diff --git a/.github/ISSUE_TEMPLATE/bug-report.yml b/.github/ISSUE_TEMPLATE/bug-report.yml new file mode 100644 index 0000000..17c2c54 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/bug-report.yml @@ -0,0 +1,88 @@ +name: 🐞 Bug +description: Report a bug or an issue you've found within the dbt package +title: "[Bug] " +labels: ["bug", "triage"] +body: + - type: markdown + attributes: + value: | + Thanks for using the Fivetran dbt package and for taking the time to fill out this bug report. Your contributions help improve this package for the entire community of users! + - type: checkboxes + attributes: + label: Is there an existing issue for this? + description: Please search to see if an issue already exists for the bug you encountered. + options: + - label: I have searched the existing issues + required: true + - type: textarea + attributes: + label: Describe the issue + description: A concise description of the problem you're experiencing. Also, please provide the steps to reproduce the issue if applicable. + validations: + required: true + - type: textarea + id: logs + attributes: + label: Relevant error log or model output + description: | + If applicable, provide the relevant error log or describe the problematic model output. + render: shell + validations: + required: false + - type: textarea + attributes: + label: Expected behavior + description: A concise description of what you expected to happen. + validations: + required: true + - type: textarea + attributes: + label: dbt Project configurations + description: Please provide the variables and any other project specific configurations from your `dbt_project.yml`. + validations: + required: true + - type: textarea + attributes: + label: Package versions + description: Please provide the contents of your `packages.yml`. + validations: + required: true + - type: dropdown + id: database + attributes: + label: What database are you using dbt with? + multiple: true + options: + - postgres + - redshift + - snowflake + - bigquery + - databricks + - other (mention it in "Additional Context") + validations: + required: true + - type: textarea + attributes: + label: dbt Version + description: Run `dbt --version` in your CLI or dbt cloud environment and copy the contents. Additionally, if you are using Fivetran dbt Transformations, provide the contents of the `dbtVersion` configuration in your `deployment.yml`. + validations: + required: true + - type: textarea + attributes: + label: Additional Context + description: | + Links? References? Anything that will give us more context about the issue you are encountering! + + Tip: You can attach images or log files by clicking this area to highlight it and then dragging files in. + validations: + required: false + - type: checkboxes + id: pr + attributes: + label: Are you willing to open a PR to help address this issue? + description: Our team will assess this issue and let you know if we will add it to a future sprint. However, if you would like to expedite the solution, we encourage you to contribute to the package via a PR. Our team will then work with you to approve and merge your contributions as soon as possible. + options: + - label: Yes. + - label: Yes, but I will need assistance and will schedule time during our [office hours](https://calendly.com/fivetran-solutions-team/fivetran-solutions-team-office-hours) for guidance + - label: No. + required: false \ No newline at end of file diff --git a/.github/ISSUE_TEMPLATE/bug_report.md b/.github/ISSUE_TEMPLATE/bug_report.md deleted file mode 100644 index c36e4fe..0000000 --- a/.github/ISSUE_TEMPLATE/bug_report.md +++ /dev/null @@ -1,62 +0,0 @@ ---- -name: Bug report -about: Create a report to help us improve -title: BUG - [your bug title here] -labels: bug -assignees: '' - ---- - -**Are you a current Fivetran customer?** -<!--- Please tell us your name, title and company --> - - -**Describe the bug** -<!--- A clear and concise description of what the bug is. --> - -**Steps to reproduce** -1. Go to '...' -2. Click on '....' -3. Scroll down to '....' -4. See error - -**Expected behavior** -<!--- A clear and concise description of what you expected to happen. --> - -**Project variables configuration** -<!--- Copy and paste the contents of your `dbt_project.yml` file below. --> -```yml -copy dbt_project.yml here -``` - -**Package Version** -<!---Copy and paste the contents of your `packages.yml` file below.--> -```yml -copy packages.yml here -``` - -**Warehouse** -<!--- Which warehouse you are running dbt and this package against. --> -<!--- To check a warehouse remove the space and insert an x in the box (eg. [x] Bigquery). --> -- [ ] BigQuery -- [ ] Redshift -- [ ] Snowflake -- [ ] Postgres -- [ ] Databricks -- [ ] Other (provide details below) - -**Additional context** -<!--- Add any other context about the problem here. --> - -**Screenshots** -<!--- If applicable, add screenshots to help explain your problem. --> - -**Please indicate the level of urgency** -<!--- Is this impacting your reporting of a critical dashboard? Are you just testing this for the first time? Provide us context so that we can prioritize accordingly. --> - -**Are you interested in contributing to this package?** -<!--- Our packages are all open-source and we welcome contributions from the community! Are you interested in helping us fix this bug? --> -- [ ] Yes, I can do this and open a PR for your review. -- [ ] Possibly, but I'm not quite sure how to do this. I'd be happy to do a live coding session with someone to get this fixed. -- [ ] No, I'd prefer if someone else fixed this. I don't have the time and/or don't know what the root cause of the problem is. - diff --git a/.github/ISSUE_TEMPLATE/feature-request.yml b/.github/ISSUE_TEMPLATE/feature-request.yml new file mode 100644 index 0000000..4701911 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/feature-request.yml @@ -0,0 +1,46 @@ +name: 🎉 Feature +description: Suggest a new feature for the Fivetran dbt package +title: "[Feature] <title>" +labels: ["enhancement"] +body: + - type: markdown + attributes: + value: | + Thanks for using the Fivetran dbt package and for taking the time to fill out this feature request. Your contributions help improve this package for the entire community of users! + - type: checkboxes + attributes: + label: Is there an existing feature request for this? + description: Please search to see if an issue already exists for the feature you would like. + options: + - label: I have searched the existing issues + required: true + - type: textarea + attributes: + label: Describe the Feature + description: A clear and concise description of what you want to happen and why you want the new feature. + validations: + required: true + - type: textarea + attributes: + label: Describe alternatives you've considered + description: | + A clear and concise description of any alternative solutions or features you've considered. + validations: + required: false + - type: checkboxes + id: contributing + attributes: + label: Are you interested in contributing this feature? + description: Our team will assess this feature and let you know if we will add it to a future sprint. However, if you would like to expedite the feature, we encourage you to contribute to the package via a PR. Our team will then work with you to approve and merge your contributions as soon as possible. + options: + - label: Yes. + - label: Yes, but I will need assistance and will schedule time during your [office hours](https://calendly.com/fivetran-solutions-team/fivetran-solutions-team-office-hours) for guidance. + - label: No. + required: false + - type: textarea + attributes: + label: Anything else? + description: | + Links? References? Anything that will give us more context about the feature you are suggesting! + validations: + required: false \ No newline at end of file diff --git a/.github/ISSUE_TEMPLATE/feature_request.md b/.github/ISSUE_TEMPLATE/feature_request.md deleted file mode 100644 index ad1df3f..0000000 --- a/.github/ISSUE_TEMPLATE/feature_request.md +++ /dev/null @@ -1,32 +0,0 @@ ---- -name: Feature request -about: Suggest an idea for this project -title: FEATURE - [your feature request title here] -labels: enhancement -assignees: '' - ---- - -**Are you a Fivetran customer?** -<!--- Please tell us your name, title and company --> - -**Is your feature request related to a problem? Please describe.** -<!--- A clear and concise description of what the problem is. Ex. I'm always frustrated when [...] --> - -**Describe the solution you'd like** -<!--- A clear and concise description of what you want to happen. --> - -**Describe alternatives you've considered** -<!--- A clear and concise description of any alternative solutions or features you've considered. --> - -**Additional context** -<!--- Add any other context or screenshots about the feature request here. --> - -**Please indicate the level of urgency and business impact of this request** -<!--- Is this impacting your reporting of a critical dashboard? What problem would implementing this feature request solve? Provide us context so that we can prioritize accordingly. --> - -**Are you interested in contributing to this package?** -<!--- Our packages are all open-source and we welcome contributions from the community! Are you interested in helping us implement this feature? --> -- [ ] Yes, I can do this and open a PR for your review. -- [ ] Possibly, but I'm not quite sure how to do this. I'd be happy to do a live coding session with someone to get this work implemented. -- [ ] No, I'd prefer if someone else did this. I don't have the time and/or don't know how to incorporate the changes necessary. diff --git a/.github/config.yml b/.github/config.yml new file mode 100644 index 0000000..44c11b0 --- /dev/null +++ b/.github/config.yml @@ -0,0 +1,19 @@ +contact_links: + - name: Provide feedback to our dbt package team + url: https://www.surveymonkey.com/r/DQ7K7WW + about: Fill out our survey form to provide valuable feedback to the Fivetran team developing and maintaining the dbt packages. + - name: Request a new dbt package + url: https://www.surveymonkey.com/r/DQ7K7WW + about: The dbt package team at Fivetran is always taking requests for future dbt packages. Request one that you would like using our feedback form! + - name: Ask a question during our office hours + url: https://calendly.com/fivetran-solutions-team/fivetran-solutions-team-office-hours + about: Schedule time during the external office hours block with the Fivetran Analytics Engineering team for support + - name: Fivetran connector question + url: https://support.fivetran.com/hc + about: Have a question about your connector? Check out the Fivetran support portal for more details. + - name: What is dbt + url: https://docs.getdbt.com/docs/introduction + about: Check out the dbt docs for all dbt related information + - name: Hang out in dbt Slack + url: https://www.getdbt.com/community/ + about: Have a question or just want to chat with fellow data friends, join dbt Slack and hangout in the tools-fivetran channel with us! \ No newline at end of file diff --git a/CHANGELOG.md b/CHANGELOG.md index 684387f..ea2b05c 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,22 @@ +# dbt_tiktok_ads_source v0.2.0 +PR [#3](https://github.com/fivetran/dbt_tiktok_ads_source/pull/3) applies the following updates: +## 🎉 Feature Enhancements 🎉 +- Inclusion of passthrough metrics: + - `tiktok_ads__ad_group_hourly_passthrough_metrics` + - `tiktok_ads__ad_hourly_passthrough_metrics` + - `tiktok_ads__campaign_hourly_passthrough_metrics` +> This applies to all passthrough columns within the `dbt_tiktok_ads_source` package and not just the `tiktok_ads__ad_group_hourly_passthrough_metrics` example. +```yml +vars: + tiktok_ads__ad_group_hourly_passthrough_metrics: + - name: "my_field_to_include" # Required: Name of the field within the source. + alias: "field_alias" # Optional: If you wish to alias the field within the staging model. +``` +- Casts all timestamp fields using dbt_utils.type_timestamp() and rounds all monetary fields +- Adds not-null tests to key fields +- Introduces the identifier variable for all source models +- Add enable configs for this specific ad platform, for use in the Ad Reporting rollup package + # dbt_tiktok_ads_source v0.1.0 ## Initial Release diff --git a/README.md b/README.md index d7d84b6..cbd8f5d 100644 --- a/README.md +++ b/README.md @@ -1,48 +1,69 @@ -[![Apache License](https://img.shields.io/badge/License-Apache%202.0-blue.svg)](https://opensource.org/licenses/Apache-2.0) -# TikTok Ads Source - -This package models TikTok Ads data from [Fivetran's connector](https://fivetran.com/docs/applications/tiktok-ads/). It uses data in the format described by [this ERD](https://fivetran.com/docs/applications/tiktok-ads#schemainformation). - -This package enriches your Fivetran data by doing the following: - -* Adds descriptions to tables and columns that are synced using Fivetran -* Adds column-level testing where applicable. For example, all primary keys are tested for uniqueness and non-null values. -* Models staging tables, which will be used in our transform package - -## Models - -This package contains staging models, designed to work simultaneously with our [TikTok Ads transform package](https://github.com/fivetran/dbt_tiktok_ads) and our [multi-platform Ad Reporting package](https://github.com/fivetran/dbt_ad_reporting). The staging models: - -* Name columns consistently across all packages: - * Boolean fields are prefixed with `is_` or `has_` - * Timestamps are appended with `_at` - * ID primary keys are prefixed with the name of the table. For example, the advertiser table's ID column is renamed `advertiser_id`. - -## Installation Instructions -Check [dbt Hub](https://hub.getdbt.com/) for the latest installation instructions, or [read the dbt docs](https://docs.getdbt.com/docs/package-management) for more information on installing packages. - -Include in your `packages.yml` - +<p align="center"> + <a alt="License" + href="https://github.com/fivetran/dbt_tiktok_source/blob/main/LICENSE"> + <img src="https://img.shields.io/badge/License-Apache%202.0-blue.svg" /></a> + <a alt="dbt-core"> + <img src="https://img.shields.io/badge/dbt_Core™_version->=1.0.0_<2.0.0-orange.svg" /></a> + <a alt="Maintained?"> + <img src="https://img.shields.io/badge/Maintained%3F-yes-green.svg" /></a> + <a alt="PRs"> + <img src="https://img.shields.io/badge/Contributions-welcome-blueviolet" /></a> +</p> + +# Tiktok Ads Source dbt Package ([Docs](https://fivetran.github.io/dbt_tiktok_ads_source/)) +# 📣 What does this dbt package do? +- Materializes [Tiktok Ads staging tables](https://fivetran.github.io/dbt_tiktok_ads_source/#!/overview/tiktok-ads-source/models/?g_v=1) which leverage data in the format described by [this ERD](https://fivetran.com/docs/applications/tiktok-ads/#schemainformation). These staging tables clean, test, and prepare your Tiktok Ads data from [Fivetran's connector](https://fivetran.com/docs/applications/tiktok-ads) for analysis by doing the following: + - Name columns for consistency across all packages and for easier analysis + - Adds freshness tests to source data + - Adds column-level testing where applicable. For example, all primary keys are tested for uniqueness and non-null values. +- Generates a comprehensive data dictionary of your Tiktok Ads data through the [dbt docs site](https://fivetran.github.io/dbt_tiktok_ads_source/). +- These tables are designed to work simultaneously with our [Tiktok Ads transformation package](https://github.com/fivetran/dbt_tiktok_ads). + + +# 🎯 How do I use the dbt package? +## Step 1: Prerequisites +To use this dbt package, you must have the following: +- At least one Fivetran Tiktok Ads connector syncing data into your destination. +- A **BigQuery**, **Snowflake**, **Redshift**, **PostgreSQL**, or **Databricks** destination. + +## Step 2: Install the package +Include the following tiktok_ads_source package version in your `packages.yml` file. +> TIP: Check [dbt Hub](https://hub.getdbt.com/) for the latest installation instructions or [read the dbt docs](https://docs.getdbt.com/docs/package-management) for more information on installing packages. ```yaml packages: - package: fivetran/tiktok_ads_source - version: [">=0.1.0", "<0.2.0"] + version: [">=0.2.0", "<0.3.0"] ``` -## Configuration -By default, this package will look for your TikTok Ads data in the `tiktok_ads` schema of your [target database](https://docs.getdbt.com/docs/running-a-dbt-project/using-the-command-line-interface/configure-your-profile). If this is not where your TikTok Ads data is, please add the following configuration to your `dbt_project.yml` file: +## Step 3: Define database and schema variables +By default, this package runs using your destination and the `tiktok_ads` schema. If this is not where your Tiktok Ads data is (for example, if your Tiktok schema is named `tiktok_ads_fivetran`), you would add the following configuration to your root `dbt_project.yml` file with your custom database and schema names: ```yml -# dbt_project.yml +vars: + tiktok_ads_database: your_destination_name + tiktok_ads_schema: your_schema_name +``` -... -config-version: 2 +## (Optional) Step 4: Additional configurations +<details><summary>Expand for configurations</summary> +### Passing Through Additional Metrics +By default, this package will select `clicks`, `impressions`, and `cost` from the source reporting tables to store into the staging models. If you would like to pass through additional metrics to the staging models, add the below configurations to your `dbt_project.yml` file. These variables allow for the pass-through fields to be aliased (`alias`) if desired, but not required. Use the below format for declaring the respective pass-through variables: + +>**Note** Please ensure you exercised due diligence when adding metrics to these models. The metrics added by default (taps, impressions, and spend) have been vetted by the Fivetran team maintaining this package for accuracy. There are metrics included within the source reports, for example metric averages, which may be inaccurately represented at the grain for reports created in this package. You will want to ensure whichever metrics you pass through are indeed appropriate to aggregate at the respective reporting levels provided in this package. + +```yml vars: - tiktok_ads_database: your_database_name - tiktok_ads_schema: your_schema_name + tiktok_ads__ad_group_hourly_passthrough_metrics: + - name: "new_custom_field" + alias: "custom_field" + - name: "my_other_field" + tiktok_ads__ad_hourly_passthrough_metrics: + - name: "this_field" + tiktok_ads__campaign_hourly_passthrough_metrics: + - name: "unique_string_field" + alias: "field_id" ``` - ### Changing the Build Schema By default, this package will build the TikTok Ads staging models within a schema titled (<target_schema> + `_stg_tiktok_ads`) in your target database. If this is not where you would like your TikTok Ads staging data to be written to, add the following configuration to your `dbt_project.yml` file: @@ -54,37 +75,47 @@ models: tiktok_ads_source: +schema: my_new_schema_name # leave blank for just the target_schema ``` -## Database Support -This package has been tested on BigQuery, Snowflake, Redshift, Postgres, and Databricks. +### Change the source table references +If an individual source table has a different name than the package expects, add the table name as it appears in your destination to the respective variable: +> IMPORTANT: See this project's [`dbt_project.yml`](https://github.com/fivetran/dbt_tiktok_ads_source/blob/main/dbt_project.yml) variable declarations to see the expected names. + +```yml +vars: + tiktok_ads_<default_source_table_name>_identifier: your_table_name +``` -### Databricks Dispatch Configuration +</details> -dbt `v0.20.0` introduced a new project-level dispatch configuration that enables an "override" setting for all dispatched macros. If you are using a Databricks destination with this package, you will need to add the following (or a variation of the following) dispatch configuration within your `dbt_project.yml`. This is required in order for the package to accurately search for macros within the `dbt-labs/spark_utils` and then the `dbt-labs/dbt_utils` packages, respectively. +## (Optional) Step 5: Orchestrate your models with Fivetran Transformations for dbt Core™ +<details><summary>Expand for more details</summary> + +Fivetran offers the ability for you to orchestrate your dbt project through [Fivetran Transformations for dbt Core™](https://fivetran.com/docs/transformations/dbt). Learn how to set up your project for orchestration through Fivetran in our [Transformations for dbt Core™ setup guides](https://fivetran.com/docs/transformations/dbt#setupguide). + +</details> + +# 🔍 Does this package have dependencies? +This dbt package is dependent on the following dbt packages. Please be aware that these dependencies are installed by default within this package. For more information on the following packages, refer to the [dbt hub](https://hub.getdbt.com/) site. +> IMPORTANT: If you have any of these dependent packages in your own `packages.yml` file, we highly recommend that you remove them from your root `packages.yml` to avoid package version conflicts. ```yml -# dbt_project.yml +packages: + - package: fivetran/fivetran_utils + version: [">=0.3.0", "<0.4.0"] -dispatch: - - macro_namespace: dbt_utils - search_order: ['spark_utils', 'dbt_utils'] + - package: dbt-labs/dbt_utils + version: [">=0.8.0", "<0.9.0"] ``` + +# 🙌 How is this package maintained and can I contribute? +## Package Maintenance +The Fivetran team maintaining this package _only_ maintains the latest version of the package. We highly recommend that you stay consistent with the [latest version](https://hub.getdbt.com/fivetran/tiktok_ads_source/latest/) of the package and refer to the [CHANGELOG](https://github.com/fivetran/dbt_tiktok_ads_source/blob/main/CHANGELOG.md) and release notes for more information on changes across versions. ## Contributions +A small team of analytics engineers at Fivetran develops these dbt packages. However, the packages are made better by community contributions! + +We highly encourage and welcome contributions to this package. Check out [this dbt Discourse article](https://discourse.getdbt.com/t/contributing-to-a-dbt-package/657) to learn how to contribute to a dbt package! -Additional contributions to this package are very welcome! Please create issues -or open PRs against `main`. Check out -[this Discourse post](https://discourse.getdbt.com/t/contributing-to-a-dbt-package/657) -on the best workflow for contributing to a package. - -## Resources: -- Provide [feedback](https://www.surveymonkey.com/r/DQ7K7WW) on our existing dbt packages or what you'd like to see next -- Have questions or feedback, or need help? Book a time during our office hours [using Calendly](https://calendly.com/fivetran-solutions-team/fivetran-solutions-team-office-hours) or email us at solutions@fivetran.com. -- Find all of Fivetran's pre-built dbt packages in our [dbt hub](https://hub.getdbt.com/fivetran/) -- Learn how to orchestrate your models with [Fivetran Transformations for dbt Core™](https://fivetran.com/docs/transformations/dbt) -- Learn more about Fivetran overall [in our docs](https://fivetran.com/docs) -- Check out [Fivetran's blog](https://fivetran.com/blog) -- Learn more about dbt [in the dbt docs](https://docs.getdbt.com/docs/introduction) -- Check out [Discourse](https://discourse.getdbt.com/) for commonly asked questions and answers -- Join the [chat](http://slack.getdbt.com/) on Slack for live discussions and support -- Find [dbt events](https://events.getdbt.com) near you -- Check out [the dbt blog](https://blog.getdbt.com/) for the latest news on dbt's development and best practices +# 🏪 Are there any resources available? +- If you have questions or want to reach out for help, please refer to the [GitHub Issue](https://github.com/fivetran/dbt_tiktok_ads_source/issues/new/choose) section to find the right avenue of support for you. +- If you would like to provide feedback to the dbt package team at Fivetran or would like to request a new dbt package, fill out our [Feedback Form](https://www.surveymonkey.com/r/DQ7K7WW). +- Have questions or want to just say hi? Book a time during our office hours [on Calendly](https://calendly.com/fivetran-solutions-team/fivetran-solutions-team-office-hours) or email us at solutions@fivetran.com. \ No newline at end of file diff --git a/dbt_project.yml b/dbt_project.yml index 0a69a13..9a2ac4d 100644 --- a/dbt_project.yml +++ b/dbt_project.yml @@ -1,5 +1,5 @@ name: 'tiktok_ads_source' -version: '0.1.0' +version: '0.2.0' config-version: 2 require-dbt-version: [">=1.0.0", "<2.0.0"] @@ -19,3 +19,7 @@ vars: ad_report_hourly: "{{ source('tiktok_ads', 'ad_report_hourly') }}" ad_group_hourly: "{{ source('tiktok_ads', 'adgroup_report_hourly') }}" campaign_report_hourly: "{{ source('tiktok_ads', 'campaign_report_hourly') }}" + + tiktok_ads__ad_group_hourly_passthrough_metrics: [] + tiktok_ads__ad_hourly_passthrough_metrics: [] + tiktok_ads__campaign_hourly_passthrough_metrics: [] diff --git a/docs/catalog.json b/docs/catalog.json index fec32d7..5a760f2 100644 --- a/docs/catalog.json +++ b/docs/catalog.json @@ -1 +1 @@ -{"metadata": {"dbt_schema_version": "https://schemas.getdbt.com/dbt/catalog/v1.json", "dbt_version": "1.0.0", "generated_at": "2022-01-06T18:49:32.398214Z", "invocation_id": "8ad2e9d0-66fc-47f9-abe0-fe38c6948257", "env": {}}, "nodes": {"model.tiktok_ads_source.stg_tiktok_ads__advertiser_tmp": {"metadata": {"type": "VIEW", "schema": "DBT_TIKTOK_ADS_STG_TIKTOK_ADS", "name": "STG_TIKTOK_ADS__ADVERTISER_TMP", "database": "FIVETRAN_DBT_TESTING", "comment": null, "owner": "ACCOUNTADMIN"}, "columns": {"ID": {"type": "NUMBER", "index": 1, "name": "ID", "comment": null}, "NAME": {"type": "TEXT", "index": 2, "name": "NAME", "comment": null}, "ADDRESS": {"type": "TEXT", "index": 3, "name": "ADDRESS", "comment": null}, "COMPANY": {"type": "TEXT", "index": 4, "name": "COMPANY", "comment": null}, "CONTACTER": {"type": "TEXT", "index": 5, "name": "CONTACTER", "comment": null}, "COUNTRY": {"type": "TEXT", "index": 6, "name": "COUNTRY", "comment": null}, "CURRENCY": {"type": "TEXT", "index": 7, "name": "CURRENCY", "comment": null}, "DESCRIPTION": {"type": "TEXT", "index": 8, "name": "DESCRIPTION", "comment": null}, "EMAIL": {"type": "TEXT", "index": 9, "name": "EMAIL", "comment": null}, "INDUSTRY": {"type": "TEXT", "index": 10, "name": "INDUSTRY", "comment": null}, "LICENSE_NO": {"type": "TEXT", "index": 11, "name": "LICENSE_NO", "comment": null}, "LICENSE_URL": {"type": "TEXT", "index": 12, "name": "LICENSE_URL", "comment": null}, "PROMOTION_AREA": {"type": "TEXT", "index": 13, "name": "PROMOTION_AREA", "comment": null}, "REASON": {"type": "TEXT", "index": 14, "name": "REASON", "comment": null}, "ROLE": {"type": "TEXT", "index": 15, "name": "ROLE", "comment": null}, "STATUS": {"type": "TEXT", "index": 16, "name": "STATUS", "comment": null}, "TELEPHONE": {"type": "TEXT", "index": 17, "name": "TELEPHONE", "comment": null}, "TIMEZONE": {"type": "TEXT", "index": 18, "name": "TIMEZONE", "comment": null}, "BALANCE": {"type": "FLOAT", "index": 19, "name": "BALANCE", "comment": null}, "CREATE_TIME": {"type": "TIMESTAMP_TZ", "index": 20, "name": "CREATE_TIME", "comment": null}, "LANGUAGE": {"type": "TEXT", "index": 21, "name": "LANGUAGE", "comment": null}, "PHONE_NUMBER": {"type": "TEXT", "index": 22, "name": "PHONE_NUMBER", "comment": null}, "_FIVETRAN_SYNCED": {"type": "TIMESTAMP_TZ", "index": 23, "name": "_FIVETRAN_SYNCED", "comment": null}}, "stats": {"has_stats": {"id": "has_stats", "label": "Has Stats?", "value": false, "include": false, "description": "Indicates whether there are statistics for this table"}}, "unique_id": "model.tiktok_ads_source.stg_tiktok_ads__advertiser_tmp"}, "model.tiktok_ads_source.stg_tiktok_ads__advertiser": {"metadata": {"type": "BASE TABLE", "schema": "DBT_TIKTOK_ADS_STG_TIKTOK_ADS", "name": "STG_TIKTOK_ADS__ADVERTISER", "database": "FIVETRAN_DBT_TESTING", "comment": null, "owner": "ACCOUNTADMIN"}, "columns": {"ADVERTISER_ID": {"type": "NUMBER", "index": 1, "name": "ADVERTISER_ID", "comment": null}, "ADDRESS": {"type": "TEXT", "index": 2, "name": "ADDRESS", "comment": null}, "BALANCE": {"type": "FLOAT", "index": 3, "name": "BALANCE", "comment": null}, "COMPANY": {"type": "TEXT", "index": 4, "name": "COMPANY", "comment": null}, "CONTACTER": {"type": "TEXT", "index": 5, "name": "CONTACTER", "comment": null}, "COUNTRY": {"type": "TEXT", "index": 6, "name": "COUNTRY", "comment": null}, "CURRENCY": {"type": "TEXT", "index": 7, "name": "CURRENCY", "comment": null}, "DESCRIPTION": {"type": "TEXT", "index": 8, "name": "DESCRIPTION", "comment": null}, "EMAIL": {"type": "TEXT", "index": 9, "name": "EMAIL", "comment": null}, "INDUSTRY": {"type": "TEXT", "index": 10, "name": "INDUSTRY", "comment": null}, "LANGUAGE": {"type": "TEXT", "index": 11, "name": "LANGUAGE", "comment": null}, "NAME": {"type": "TEXT", "index": 12, "name": "NAME", "comment": null}, "PHONE_NUMBER": {"type": "TEXT", "index": 13, "name": "PHONE_NUMBER", "comment": null}, "TELEPHONE": {"type": "TEXT", "index": 14, "name": "TELEPHONE", "comment": null}, "TIMEZONE": {"type": "TEXT", "index": 15, "name": "TIMEZONE", "comment": null}, "_FIVETRAN_SYNCED": {"type": "TIMESTAMP_TZ", "index": 16, "name": "_FIVETRAN_SYNCED", "comment": null}}, "stats": {"row_count": {"id": "row_count", "label": "Row Count", "value": 2.0, "include": true, "description": "An approximate count of rows in this table"}, "last_modified": {"id": "last_modified", "label": "Last Modified", "value": "2022-01-06 18:37UTC", "include": true, "description": "The timestamp for last update/change"}, "bytes": {"id": "bytes", "label": "Approximate Size", "value": 5632.0, "include": true, "description": "Approximate size of the table as reported by Snowflake"}, "has_stats": {"id": "has_stats", "label": "Has Stats?", "value": true, "include": false, "description": "Indicates whether there are statistics for this table"}}, "unique_id": "model.tiktok_ads_source.stg_tiktok_ads__advertiser"}, "model.tiktok_ads.tiktok_ads__ad_adapter": {"metadata": {"type": "BASE TABLE", "schema": "DBT_TIKTOK_ADS_TIKTOK_ADS", "name": "TIKTOK_ADS__AD_ADAPTER", "database": "FIVETRAN_DBT_TESTING", "comment": null, "owner": "ACCOUNTADMIN"}, "columns": {"DATE_DAY": {"type": "DATE", "index": 1, "name": "DATE_DAY", "comment": null}, "ADVERTISER_ID": {"type": "NUMBER", "index": 2, "name": "ADVERTISER_ID", "comment": null}, "ADVERTISER_NAME": {"type": "TEXT", "index": 3, "name": "ADVERTISER_NAME", "comment": null}, "CAMPAIGN_ID": {"type": "NUMBER", "index": 4, "name": "CAMPAIGN_ID", "comment": null}, "CAMPAIGN_NAME": {"type": "TEXT", "index": 5, "name": "CAMPAIGN_NAME", "comment": null}, "AD_GROUP_ID": {"type": "NUMBER", "index": 6, "name": "AD_GROUP_ID", "comment": null}, "AD_GROUP_NAME": {"type": "TEXT", "index": 7, "name": "AD_GROUP_NAME", "comment": null}, "AD_ID": {"type": "NUMBER", "index": 8, "name": "AD_ID", "comment": null}, "AD_NAME": {"type": "TEXT", "index": 9, "name": "AD_NAME", "comment": null}, "BASE_URL": {"type": "TEXT", "index": 10, "name": "BASE_URL", "comment": null}, "URL_HOST": {"type": "TEXT", "index": 11, "name": "URL_HOST", "comment": null}, "URL_PATH": {"type": "TEXT", "index": 12, "name": "URL_PATH", "comment": null}, "UTM_SOURCE": {"type": "TEXT", "index": 13, "name": "UTM_SOURCE", "comment": null}, "UTM_MEDIUM": {"type": "TEXT", "index": 14, "name": "UTM_MEDIUM", "comment": null}, "UTM_CAMPAIGN": {"type": "TEXT", "index": 15, "name": "UTM_CAMPAIGN", "comment": null}, "UTM_CONTENT": {"type": "TEXT", "index": 16, "name": "UTM_CONTENT", "comment": null}, "UTM_TERM": {"type": "TEXT", "index": 17, "name": "UTM_TERM", "comment": null}, "SPEND": {"type": "FLOAT", "index": 18, "name": "SPEND", "comment": null}, "CLICKS": {"type": "NUMBER", "index": 19, "name": "CLICKS", "comment": null}, "IMPRESSIONS": {"type": "NUMBER", "index": 20, "name": "IMPRESSIONS", "comment": null}, "REACH": {"type": "NUMBER", "index": 21, "name": "REACH", "comment": null}, "CONVERSION": {"type": "NUMBER", "index": 22, "name": "CONVERSION", "comment": null}, "LIKES": {"type": "NUMBER", "index": 23, "name": "LIKES", "comment": null}, "COMMENTS": {"type": "NUMBER", "index": 24, "name": "COMMENTS", "comment": null}, "SHARES": {"type": "NUMBER", "index": 25, "name": "SHARES", "comment": null}, "PROFILE_VISITS": {"type": "NUMBER", "index": 26, "name": "PROFILE_VISITS", "comment": null}, "FOLLOWS": {"type": "NUMBER", "index": 27, "name": "FOLLOWS", "comment": null}, "VIDEO_WATCHED_2_S": {"type": "NUMBER", "index": 28, "name": "VIDEO_WATCHED_2_S", "comment": null}, "VIDEO_WATCHED_6_S": {"type": "NUMBER", "index": 29, "name": "VIDEO_WATCHED_6_S", "comment": null}, "VIDEO_VIEWS_P_25": {"type": "NUMBER", "index": 30, "name": "VIDEO_VIEWS_P_25", "comment": null}, "VIDEO_VIEWS_P_50": {"type": "NUMBER", "index": 31, "name": "VIDEO_VIEWS_P_50", "comment": null}, "VIDEO_VIEWS_P_75": {"type": "NUMBER", "index": 32, "name": "VIDEO_VIEWS_P_75", "comment": null}, "DAILY_CPC": {"type": "FLOAT", "index": 33, "name": "DAILY_CPC", "comment": null}, "DAILY_CPM": {"type": "FLOAT", "index": 34, "name": "DAILY_CPM", "comment": null}, "DAILY_CTR": {"type": "NUMBER", "index": 35, "name": "DAILY_CTR", "comment": null}}, "stats": {"row_count": {"id": "row_count", "label": "Row Count", "value": 17439.0, "include": true, "description": "An approximate count of rows in this table"}, "last_modified": {"id": "last_modified", "label": "Last Modified", "value": "2022-01-06 18:37UTC", "include": true, "description": "The timestamp for last update/change"}, "bytes": {"id": "bytes", "label": "Approximate Size", "value": 1326592.0, "include": true, "description": "Approximate size of the table as reported by Snowflake"}, "has_stats": {"id": "has_stats", "label": "Has Stats?", "value": true, "include": false, "description": "Indicates whether there are statistics for this table"}}, "unique_id": "model.tiktok_ads.tiktok_ads__ad_adapter"}, "model.tiktok_ads_source.stg_tiktok_ads__ad_group_report_hourly_tmp": {"metadata": {"type": "VIEW", "schema": "DBT_TIKTOK_ADS_STG_TIKTOK_ADS", "name": "STG_TIKTOK_ADS__AD_GROUP_REPORT_HOURLY_TMP", "database": "FIVETRAN_DBT_TESTING", "comment": null, "owner": "ACCOUNTADMIN"}, "columns": {"ADGROUP_ID": {"type": "NUMBER", "index": 1, "name": "ADGROUP_ID", "comment": null}, "STAT_TIME_HOUR": {"type": "TIMESTAMP_NTZ", "index": 2, "name": "STAT_TIME_HOUR", "comment": null}, "COST_PER_CONVERSION": {"type": "FLOAT", "index": 3, "name": "COST_PER_CONVERSION", "comment": null}, "REAL_TIME_CONVERSION": {"type": "NUMBER", "index": 4, "name": "REAL_TIME_CONVERSION", "comment": null}, "CPC": {"type": "FLOAT", "index": 5, "name": "CPC", "comment": null}, "VIDEO_PLAY_ACTIONS": {"type": "NUMBER", "index": 6, "name": "VIDEO_PLAY_ACTIONS", "comment": null}, "CONVERSION_RATE": {"type": "FLOAT", "index": 7, "name": "CONVERSION_RATE", "comment": null}, "VIDEO_VIEWS_P_75": {"type": "NUMBER", "index": 8, "name": "VIDEO_VIEWS_P_75", "comment": null}, "RESULT": {"type": "NUMBER", "index": 9, "name": "RESULT", "comment": null}, "VIDEO_VIEWS_P_50": {"type": "NUMBER", "index": 10, "name": "VIDEO_VIEWS_P_50", "comment": null}, "IMPRESSIONS": {"type": "NUMBER", "index": 11, "name": "IMPRESSIONS", "comment": null}, "COMMENTS": {"type": "NUMBER", "index": 12, "name": "COMMENTS", "comment": null}, "REAL_TIME_COST_PER_RESULT": {"type": "FLOAT", "index": 13, "name": "REAL_TIME_COST_PER_RESULT", "comment": null}, "CONVERSION": {"type": "NUMBER", "index": 14, "name": "CONVERSION", "comment": null}, "REAL_TIME_RESULT": {"type": "NUMBER", "index": 15, "name": "REAL_TIME_RESULT", "comment": null}, "VIDEO_VIEWS_P_100": {"type": "NUMBER", "index": 16, "name": "VIDEO_VIEWS_P_100", "comment": null}, "SHARES": {"type": "NUMBER", "index": 17, "name": "SHARES", "comment": null}, "REAL_TIME_CONVERSION_RATE": {"type": "FLOAT", "index": 18, "name": "REAL_TIME_CONVERSION_RATE", "comment": null}, "COST_PER_SECONDARY_GOAL_RESULT": {"type": "TEXT", "index": 19, "name": "COST_PER_SECONDARY_GOAL_RESULT", "comment": null}, "SECONDARY_GOAL_RESULT_RATE": {"type": "TEXT", "index": 20, "name": "SECONDARY_GOAL_RESULT_RATE", "comment": null}, "CLICKS": {"type": "NUMBER", "index": 21, "name": "CLICKS", "comment": null}, "COST_PER_1000_REACHED": {"type": "FLOAT", "index": 22, "name": "COST_PER_1000_REACHED", "comment": null}, "VIDEO_VIEWS_P_25": {"type": "NUMBER", "index": 23, "name": "VIDEO_VIEWS_P_25", "comment": null}, "REACH": {"type": "NUMBER", "index": 24, "name": "REACH", "comment": null}, "REAL_TIME_COST_PER_CONVERSION": {"type": "FLOAT", "index": 25, "name": "REAL_TIME_COST_PER_CONVERSION", "comment": null}, "PROFILE_VISITS_RATE": {"type": "FLOAT", "index": 26, "name": "PROFILE_VISITS_RATE", "comment": null}, "AVERAGE_VIDEO_PLAY": {"type": "FLOAT", "index": 27, "name": "AVERAGE_VIDEO_PLAY", "comment": null}, "PROFILE_VISITS": {"type": "NUMBER", "index": 28, "name": "PROFILE_VISITS", "comment": null}, "CPM": {"type": "FLOAT", "index": 29, "name": "CPM", "comment": null}, "CTR": {"type": "FLOAT", "index": 30, "name": "CTR", "comment": null}, "VIDEO_WATCHED_2_S": {"type": "NUMBER", "index": 31, "name": "VIDEO_WATCHED_2_S", "comment": null}, "FOLLOWS": {"type": "NUMBER", "index": 32, "name": "FOLLOWS", "comment": null}, "RESULT_RATE": {"type": "FLOAT", "index": 33, "name": "RESULT_RATE", "comment": null}, "VIDEO_WATCHED_6_S": {"type": "NUMBER", "index": 34, "name": "VIDEO_WATCHED_6_S", "comment": null}, "SECONDARY_GOAL_RESULT": {"type": "TEXT", "index": 35, "name": "SECONDARY_GOAL_RESULT", "comment": null}, "COST_PER_RESULT": {"type": "FLOAT", "index": 36, "name": "COST_PER_RESULT", "comment": null}, "AVERAGE_VIDEO_PLAY_PER_USER": {"type": "FLOAT", "index": 37, "name": "AVERAGE_VIDEO_PLAY_PER_USER", "comment": null}, "REAL_TIME_RESULT_RATE": {"type": "FLOAT", "index": 38, "name": "REAL_TIME_RESULT_RATE", "comment": null}, "SPEND": {"type": "FLOAT", "index": 39, "name": "SPEND", "comment": null}, "LIKES": {"type": "NUMBER", "index": 40, "name": "LIKES", "comment": null}, "_FIVETRAN_SYNCED": {"type": "TIMESTAMP_TZ", "index": 41, "name": "_FIVETRAN_SYNCED", "comment": null}}, "stats": {"has_stats": {"id": "has_stats", "label": "Has Stats?", "value": false, "include": false, "description": "Indicates whether there are statistics for this table"}}, "unique_id": "model.tiktok_ads_source.stg_tiktok_ads__ad_group_report_hourly_tmp"}, "model.tiktok_ads_source.stg_tiktok_ads__ad_group_report_hourly": {"metadata": {"type": "BASE TABLE", "schema": "DBT_TIKTOK_ADS_STG_TIKTOK_ADS", "name": "STG_TIKTOK_ADS__AD_GROUP_REPORT_HOURLY", "database": "FIVETRAN_DBT_TESTING", "comment": null, "owner": "ACCOUNTADMIN"}, "columns": {"AD_GROUP_ID": {"type": "NUMBER", "index": 1, "name": "AD_GROUP_ID", "comment": null}, "_FIVETRAN_SYNCED": {"type": "TIMESTAMP_TZ", "index": 2, "name": "_FIVETRAN_SYNCED", "comment": null}, "STAT_TIME_HOUR": {"type": "TIMESTAMP_NTZ", "index": 3, "name": "STAT_TIME_HOUR", "comment": null}, "CPC": {"type": "FLOAT", "index": 4, "name": "CPC", "comment": null}, "CPM": {"type": "FLOAT", "index": 5, "name": "CPM", "comment": null}, "CTR": {"type": "FLOAT", "index": 6, "name": "CTR", "comment": null}, "IMPRESSIONS": {"type": "NUMBER", "index": 7, "name": "IMPRESSIONS", "comment": null}, "CLICKS": {"type": "NUMBER", "index": 8, "name": "CLICKS", "comment": null}, "SPEND": {"type": "FLOAT", "index": 9, "name": "SPEND", "comment": null}, "REACH": {"type": "NUMBER", "index": 10, "name": "REACH", "comment": null}, "CONVERSION": {"type": "NUMBER", "index": 11, "name": "CONVERSION", "comment": null}, "COST_PER_CONVERSION": {"type": "FLOAT", "index": 12, "name": "COST_PER_CONVERSION", "comment": null}, "CONVERSION_RATE": {"type": "FLOAT", "index": 13, "name": "CONVERSION_RATE", "comment": null}, "LIKES": {"type": "NUMBER", "index": 14, "name": "LIKES", "comment": null}, "COMMENTS": {"type": "NUMBER", "index": 15, "name": "COMMENTS", "comment": null}, "SHARES": {"type": "NUMBER", "index": 16, "name": "SHARES", "comment": null}, "PROFILE_VISITS": {"type": "NUMBER", "index": 17, "name": "PROFILE_VISITS", "comment": null}, "FOLLOWS": {"type": "NUMBER", "index": 18, "name": "FOLLOWS", "comment": null}, "VIDEO_PLAY_ACTIONS": {"type": "NUMBER", "index": 19, "name": "VIDEO_PLAY_ACTIONS", "comment": null}, "VIDEO_WATCHED_2_S": {"type": "NUMBER", "index": 20, "name": "VIDEO_WATCHED_2_S", "comment": null}, "VIDEO_WATCHED_6_S": {"type": "NUMBER", "index": 21, "name": "VIDEO_WATCHED_6_S", "comment": null}, "VIDEO_VIEWS_P_25": {"type": "NUMBER", "index": 22, "name": "VIDEO_VIEWS_P_25", "comment": null}, "VIDEO_VIEWS_P_50": {"type": "NUMBER", "index": 23, "name": "VIDEO_VIEWS_P_50", "comment": null}, "VIDEO_VIEWS_P_75": {"type": "NUMBER", "index": 24, "name": "VIDEO_VIEWS_P_75", "comment": null}, "AVERAGE_VIDEO_PLAY": {"type": "FLOAT", "index": 25, "name": "AVERAGE_VIDEO_PLAY", "comment": null}, "AVERAGE_VIDEO_PLAY_PER_USER": {"type": "FLOAT", "index": 26, "name": "AVERAGE_VIDEO_PLAY_PER_USER", "comment": null}}, "stats": {"row_count": {"id": "row_count", "label": "Row Count", "value": 33949.0, "include": true, "description": "An approximate count of rows in this table"}, "last_modified": {"id": "last_modified", "label": "Last Modified", "value": "2022-01-06 18:37UTC", "include": true, "description": "The timestamp for last update/change"}, "bytes": {"id": "bytes", "label": "Approximate Size", "value": 1437184.0, "include": true, "description": "Approximate size of the table as reported by Snowflake"}, "has_stats": {"id": "has_stats", "label": "Has Stats?", "value": true, "include": false, "description": "Indicates whether there are statistics for this table"}}, "unique_id": "model.tiktok_ads_source.stg_tiktok_ads__ad_group_report_hourly"}, "model.tiktok_ads.tiktok_ads__ad_group_report": {"metadata": {"type": "BASE TABLE", "schema": "DBT_TIKTOK_ADS_TIKTOK_ADS", "name": "TIKTOK_ADS__AD_GROUP_REPORT", "database": "FIVETRAN_DBT_TESTING", "comment": null, "owner": "ACCOUNTADMIN"}, "columns": {"DATE_DAY": {"type": "DATE", "index": 1, "name": "DATE_DAY", "comment": null}, "AD_GROUP_ID": {"type": "NUMBER", "index": 2, "name": "AD_GROUP_ID", "comment": null}, "ADVERTISER_ID": {"type": "NUMBER", "index": 3, "name": "ADVERTISER_ID", "comment": null}, "CAMPAIGN_ID": {"type": "NUMBER", "index": 4, "name": "CAMPAIGN_ID", "comment": null}, "CAMPAIGN_NAME": {"type": "TEXT", "index": 5, "name": "CAMPAIGN_NAME", "comment": null}, "ACTION_CATEGORIES": {"type": "VARIANT", "index": 6, "name": "ACTION_CATEGORIES", "comment": null}, "GENDER": {"type": "TEXT", "index": 7, "name": "GENDER", "comment": null}, "AUDIENCE_TYPE": {"type": "TEXT", "index": 8, "name": "AUDIENCE_TYPE", "comment": null}, "BUDGET": {"type": "FLOAT", "index": 9, "name": "BUDGET", "comment": null}, "AGE": {"type": "VARIANT", "index": 10, "name": "AGE", "comment": null}, "LANGUAGES": {"type": "VARIANT", "index": 11, "name": "LANGUAGES", "comment": null}, "INTEREST_CATEGORY": {"type": "VARIANT", "index": 12, "name": "INTEREST_CATEGORY", "comment": null}, "IMPRESSIONS": {"type": "NUMBER", "index": 13, "name": "IMPRESSIONS", "comment": null}, "CLICKS": {"type": "NUMBER", "index": 14, "name": "CLICKS", "comment": null}, "SPEND": {"type": "FLOAT", "index": 15, "name": "SPEND", "comment": null}, "REACH": {"type": "NUMBER", "index": 16, "name": "REACH", "comment": null}, "CONVERSION": {"type": "NUMBER", "index": 17, "name": "CONVERSION", "comment": null}, "LIKES": {"type": "NUMBER", "index": 18, "name": "LIKES", "comment": null}, "COMMENTS": {"type": "NUMBER", "index": 19, "name": "COMMENTS", "comment": null}, "SHARES": {"type": "NUMBER", "index": 20, "name": "SHARES", "comment": null}, "PROFILE_VISITS": {"type": "NUMBER", "index": 21, "name": "PROFILE_VISITS", "comment": null}, "FOLLOWS": {"type": "NUMBER", "index": 22, "name": "FOLLOWS", "comment": null}, "VIDEO_WATCHED_2_S": {"type": "NUMBER", "index": 23, "name": "VIDEO_WATCHED_2_S", "comment": null}, "VIDEO_WATCHED_6_S": {"type": "NUMBER", "index": 24, "name": "VIDEO_WATCHED_6_S", "comment": null}, "VIDEO_VIEWS_P_25": {"type": "NUMBER", "index": 25, "name": "VIDEO_VIEWS_P_25", "comment": null}, "VIDEO_VIEWS_P_50": {"type": "NUMBER", "index": 26, "name": "VIDEO_VIEWS_P_50", "comment": null}, "VIDEO_VIEWS_P_75": {"type": "NUMBER", "index": 27, "name": "VIDEO_VIEWS_P_75", "comment": null}, "DAILY_CPC": {"type": "FLOAT", "index": 28, "name": "DAILY_CPC", "comment": null}, "DAILY_CPM": {"type": "FLOAT", "index": 29, "name": "DAILY_CPM", "comment": null}, "DAILY_CTR": {"type": "NUMBER", "index": 30, "name": "DAILY_CTR", "comment": null}}, "stats": {"row_count": {"id": "row_count", "label": "Row Count", "value": 1234.0, "include": true, "description": "An approximate count of rows in this table"}, "last_modified": {"id": "last_modified", "label": "Last Modified", "value": "2022-01-06 18:37UTC", "include": true, "description": "The timestamp for last update/change"}, "bytes": {"id": "bytes", "label": "Approximate Size", "value": 192512.0, "include": true, "description": "Approximate size of the table as reported by Snowflake"}, "has_stats": {"id": "has_stats", "label": "Has Stats?", "value": true, "include": false, "description": "Indicates whether there are statistics for this table"}}, "unique_id": "model.tiktok_ads.tiktok_ads__ad_group_report"}, "model.tiktok_ads.tiktok_ads__campaign_report": {"metadata": {"type": "BASE TABLE", "schema": "DBT_TIKTOK_ADS_TIKTOK_ADS", "name": "TIKTOK_ADS__CAMPAIGN_REPORT", "database": "FIVETRAN_DBT_TESTING", "comment": null, "owner": "ACCOUNTADMIN"}, "columns": {"DATE_DAY": {"type": "DATE", "index": 1, "name": "DATE_DAY", "comment": null}, "CAMPAIGN_ID": {"type": "NUMBER", "index": 2, "name": "CAMPAIGN_ID", "comment": null}, "CAMPAIGN_NAME": {"type": "TEXT", "index": 3, "name": "CAMPAIGN_NAME", "comment": null}, "ADVERTISER_ID": {"type": "NUMBER", "index": 4, "name": "ADVERTISER_ID", "comment": null}, "IMPRESSIONS": {"type": "NUMBER", "index": 5, "name": "IMPRESSIONS", "comment": null}, "CLICKS": {"type": "NUMBER", "index": 6, "name": "CLICKS", "comment": null}, "SPEND": {"type": "FLOAT", "index": 7, "name": "SPEND", "comment": null}, "REACH": {"type": "NUMBER", "index": 8, "name": "REACH", "comment": null}, "CONVERSION": {"type": "NUMBER", "index": 9, "name": "CONVERSION", "comment": null}, "LIKES": {"type": "NUMBER", "index": 10, "name": "LIKES", "comment": null}, "COMMENTS": {"type": "NUMBER", "index": 11, "name": "COMMENTS", "comment": null}, "SHARES": {"type": "NUMBER", "index": 12, "name": "SHARES", "comment": null}, "PROFILE_VISITS": {"type": "NUMBER", "index": 13, "name": "PROFILE_VISITS", "comment": null}, "FOLLOWS": {"type": "NUMBER", "index": 14, "name": "FOLLOWS", "comment": null}, "VIDEO_WATCHED_2_S": {"type": "NUMBER", "index": 15, "name": "VIDEO_WATCHED_2_S", "comment": null}, "VIDEO_WATCHED_6_S": {"type": "NUMBER", "index": 16, "name": "VIDEO_WATCHED_6_S", "comment": null}, "VIDEO_VIEWS_P_25": {"type": "NUMBER", "index": 17, "name": "VIDEO_VIEWS_P_25", "comment": null}, "VIDEO_VIEWS_P_50": {"type": "NUMBER", "index": 18, "name": "VIDEO_VIEWS_P_50", "comment": null}, "VIDEO_VIEWS_P_75": {"type": "NUMBER", "index": 19, "name": "VIDEO_VIEWS_P_75", "comment": null}, "DAILY_CPC": {"type": "FLOAT", "index": 20, "name": "DAILY_CPC", "comment": null}, "DAILY_CPM": {"type": "FLOAT", "index": 21, "name": "DAILY_CPM", "comment": null}, "DAILY_CTR": {"type": "NUMBER", "index": 22, "name": "DAILY_CTR", "comment": null}}, "stats": {"row_count": {"id": "row_count", "label": "Row Count", "value": 639.0, "include": true, "description": "An approximate count of rows in this table"}, "last_modified": {"id": "last_modified", "label": "Last Modified", "value": "2022-01-06 18:37UTC", "include": true, "description": "The timestamp for last update/change"}, "bytes": {"id": "bytes", "label": "Approximate Size", "value": 96256.0, "include": true, "description": "Approximate size of the table as reported by Snowflake"}, "has_stats": {"id": "has_stats", "label": "Has Stats?", "value": true, "include": false, "description": "Indicates whether there are statistics for this table"}}, "unique_id": "model.tiktok_ads.tiktok_ads__campaign_report"}, "model.tiktok_ads_source.stg_tiktok_ads__ad_group_history_tmp": {"metadata": {"type": "VIEW", "schema": "DBT_TIKTOK_ADS_STG_TIKTOK_ADS", "name": "STG_TIKTOK_ADS__AD_GROUP_HISTORY_TMP", "database": "FIVETRAN_DBT_TESTING", "comment": null, "owner": "ACCOUNTADMIN"}, "columns": {"ADGROUP_ID": {"type": "NUMBER", "index": 1, "name": "ADGROUP_ID", "comment": null}, "UPDATED_AT": {"type": "TIMESTAMP_TZ", "index": 2, "name": "UPDATED_AT", "comment": null}, "ADVERTISER_ID": {"type": "NUMBER", "index": 3, "name": "ADVERTISER_ID", "comment": null}, "CAMPAIGN_ID": {"type": "NUMBER", "index": 4, "name": "CAMPAIGN_ID", "comment": null}, "CREATE_TIME": {"type": "TIMESTAMP_TZ", "index": 5, "name": "CREATE_TIME", "comment": null}, "ADGROUP_NAME": {"type": "TEXT", "index": 6, "name": "ADGROUP_NAME", "comment": null}, "PLACEMENT_TYPE": {"type": "TEXT", "index": 7, "name": "PLACEMENT_TYPE", "comment": null}, "PROFILE_IMAGE": {"type": "TEXT", "index": 8, "name": "PROFILE_IMAGE", "comment": null}, "LANDING_PAGE_URL": {"type": "TEXT", "index": 9, "name": "LANDING_PAGE_URL", "comment": null}, "DISPLAY_NAME": {"type": "TEXT", "index": 10, "name": "DISPLAY_NAME", "comment": null}, "APP_TYPE": {"type": "TEXT", "index": 11, "name": "APP_TYPE", "comment": null}, "APP_DOWNLOAD_URL": {"type": "TEXT", "index": 12, "name": "APP_DOWNLOAD_URL", "comment": null}, "APP_NAME": {"type": "TEXT", "index": 13, "name": "APP_NAME", "comment": null}, "EXTERNAL_ACTION": {"type": "TEXT", "index": 14, "name": "EXTERNAL_ACTION", "comment": null}, "DEEP_EXTERNAL_ACTION": {"type": "TEXT", "index": 15, "name": "DEEP_EXTERNAL_ACTION", "comment": null}, "CREATIVE_MATERIAL_MODE": {"type": "TEXT", "index": 16, "name": "CREATIVE_MATERIAL_MODE", "comment": null}, "AUDIENCE_TYPE": {"type": "TEXT", "index": 17, "name": "AUDIENCE_TYPE", "comment": null}, "GENDER": {"type": "TEXT", "index": 18, "name": "GENDER", "comment": null}, "ANDROID_OSV": {"type": "TEXT", "index": 19, "name": "ANDROID_OSV", "comment": null}, "IOS_OSV": {"type": "TEXT", "index": 20, "name": "IOS_OSV", "comment": null}, "BUDGET_MODE": {"type": "TEXT", "index": 21, "name": "BUDGET_MODE", "comment": null}, "SCHEDULE_TYPE": {"type": "TEXT", "index": 22, "name": "SCHEDULE_TYPE", "comment": null}, "DAYPARTING": {"type": "TEXT", "index": 23, "name": "DAYPARTING", "comment": null}, "OPTIMIZE_GOAL": {"type": "TEXT", "index": 24, "name": "OPTIMIZE_GOAL", "comment": null}, "CPV_VIDEO_DURATION": {"type": "TEXT", "index": 25, "name": "CPV_VIDEO_DURATION", "comment": null}, "PACING": {"type": "TEXT", "index": 26, "name": "PACING", "comment": null}, "BILLING_EVENT": {"type": "TEXT", "index": 27, "name": "BILLING_EVENT", "comment": null}, "BID_TYPE": {"type": "TEXT", "index": 28, "name": "BID_TYPE", "comment": null}, "DEEP_BID_TYPE": {"type": "TEXT", "index": 29, "name": "DEEP_BID_TYPE", "comment": null}, "IMPRESSION_TRACKING_URL": {"type": "TEXT", "index": 30, "name": "IMPRESSION_TRACKING_URL", "comment": null}, "CLICK_TRACKING_URL": {"type": "TEXT", "index": 31, "name": "CLICK_TRACKING_URL", "comment": null}, "STATUS": {"type": "TEXT", "index": 32, "name": "STATUS", "comment": null}, "OPT_STATUS": {"type": "TEXT", "index": 33, "name": "OPT_STATUS", "comment": null}, "STATISTIC_TYPE": {"type": "TEXT", "index": 34, "name": "STATISTIC_TYPE", "comment": null}, "VIDEO_DOWNLOAD": {"type": "TEXT", "index": 35, "name": "VIDEO_DOWNLOAD", "comment": null}, "OPEN_URL": {"type": "TEXT", "index": 36, "name": "OPEN_URL", "comment": null}, "OPEN_URL_TYPE": {"type": "TEXT", "index": 37, "name": "OPEN_URL_TYPE", "comment": null}, "FALLBACK_TYPE": {"type": "TEXT", "index": 38, "name": "FALLBACK_TYPE", "comment": null}, "BUDGET": {"type": "FLOAT", "index": 39, "name": "BUDGET", "comment": null}, "BID": {"type": "FLOAT", "index": 40, "name": "BID", "comment": null}, "CONVERSION_BID": {"type": "FLOAT", "index": 41, "name": "CONVERSION_BID", "comment": null}, "DEEP_CPABID": {"type": "FLOAT", "index": 42, "name": "DEEP_CPABID", "comment": null}, "SCHEDULE_START_TIME": {"type": "TIMESTAMP_TZ", "index": 43, "name": "SCHEDULE_START_TIME", "comment": null}, "SCHEDULE_END_TIME": {"type": "TIMESTAMP_TZ", "index": 44, "name": "SCHEDULE_END_TIME", "comment": null}, "APP_ID": {"type": "NUMBER", "index": 45, "name": "APP_ID", "comment": null}, "PIXEL_ID": {"type": "NUMBER", "index": 46, "name": "PIXEL_ID", "comment": null}, "ENABLE_INVENTORY_FILTER": {"type": "BOOLEAN", "index": 47, "name": "ENABLE_INVENTORY_FILTER", "comment": null}, "IS_HFSS": {"type": "BOOLEAN", "index": 48, "name": "IS_HFSS", "comment": null}, "IS_NEW_STRUCTURE": {"type": "BOOLEAN", "index": 49, "name": "IS_NEW_STRUCTURE", "comment": null}, "CATEGORY": {"type": "NUMBER", "index": 50, "name": "CATEGORY", "comment": null}, "IS_COMMENT_DISABLE": {"type": "NUMBER", "index": 51, "name": "IS_COMMENT_DISABLE", "comment": null}, "SKIP_LEARNING_PHASE": {"type": "NUMBER", "index": 52, "name": "SKIP_LEARNING_PHASE", "comment": null}, "FREQUENCY": {"type": "NUMBER", "index": 53, "name": "FREQUENCY", "comment": null}, "FREQUENCY_SCHEDULE": {"type": "NUMBER", "index": 54, "name": "FREQUENCY_SCHEDULE", "comment": null}, "ACTION_DAYS": {"type": "NUMBER", "index": 55, "name": "ACTION_DAYS", "comment": null}, "AUDIENCE": {"type": "VARIANT", "index": 56, "name": "AUDIENCE", "comment": null}, "EXCLUDED_AUDIENCE": {"type": "VARIANT", "index": 57, "name": "EXCLUDED_AUDIENCE", "comment": null}, "LOCATION": {"type": "VARIANT", "index": 58, "name": "LOCATION", "comment": null}, "INTEREST_CATEGORY_V_2": {"type": "VARIANT", "index": 59, "name": "INTEREST_CATEGORY_V_2", "comment": null}, "PANGLE_BLOCK_APP_LIST_ID": {"type": "VARIANT", "index": 60, "name": "PANGLE_BLOCK_APP_LIST_ID", "comment": null}, "ACTION_CATEGORIES": {"type": "VARIANT", "index": 61, "name": "ACTION_CATEGORIES", "comment": null}, "PLACEMENT": {"type": "VARIANT", "index": 62, "name": "PLACEMENT", "comment": null}, "KEYWORDS": {"type": "VARIANT", "index": 63, "name": "KEYWORDS", "comment": null}, "AGE": {"type": "VARIANT", "index": 64, "name": "AGE", "comment": null}, "LANGUAGES": {"type": "VARIANT", "index": 65, "name": "LANGUAGES", "comment": null}, "OPERATION_SYSTEM": {"type": "VARIANT", "index": 66, "name": "OPERATION_SYSTEM", "comment": null}, "CONNECTION_TYPE": {"type": "VARIANT", "index": 67, "name": "CONNECTION_TYPE", "comment": null}, "CARRIERS": {"type": "VARIANT", "index": 68, "name": "CARRIERS", "comment": null}, "VIDEO_ACTIONS": {"type": "VARIANT", "index": 69, "name": "VIDEO_ACTIONS", "comment": null}, "PACKAGE": {"type": "TEXT", "index": 70, "name": "PACKAGE", "comment": null}, "_FIVETRAN_SYNCED": {"type": "TIMESTAMP_TZ", "index": 71, "name": "_FIVETRAN_SYNCED", "comment": null}}, "stats": {"has_stats": {"id": "has_stats", "label": "Has Stats?", "value": false, "include": false, "description": "Indicates whether there are statistics for this table"}}, "unique_id": "model.tiktok_ads_source.stg_tiktok_ads__ad_group_history_tmp"}, "model.tiktok_ads_source.stg_tiktok_ads__ad_group_history": {"metadata": {"type": "BASE TABLE", "schema": "DBT_TIKTOK_ADS_STG_TIKTOK_ADS", "name": "STG_TIKTOK_ADS__AD_GROUP_HISTORY", "database": "FIVETRAN_DBT_TESTING", "comment": null, "owner": "ACCOUNTADMIN"}, "columns": {"AD_GROUP_ID": {"type": "NUMBER", "index": 1, "name": "AD_GROUP_ID", "comment": null}, "UPDATED_AT": {"type": "TIMESTAMP_TZ", "index": 2, "name": "UPDATED_AT", "comment": null}, "ADVERTISER_ID": {"type": "NUMBER", "index": 3, "name": "ADVERTISER_ID", "comment": null}, "CAMPAIGN_ID": {"type": "NUMBER", "index": 4, "name": "CAMPAIGN_ID", "comment": null}, "ACTION_DAYS": {"type": "NUMBER", "index": 5, "name": "ACTION_DAYS", "comment": null}, "ACTION_CATEGORIES": {"type": "VARIANT", "index": 6, "name": "ACTION_CATEGORIES", "comment": null}, "AD_GROUP_NAME": {"type": "TEXT", "index": 7, "name": "AD_GROUP_NAME", "comment": null}, "AGE": {"type": "VARIANT", "index": 8, "name": "AGE", "comment": null}, "AUDIENCE_TYPE": {"type": "TEXT", "index": 9, "name": "AUDIENCE_TYPE", "comment": null}, "BUDGET": {"type": "FLOAT", "index": 10, "name": "BUDGET", "comment": null}, "CATEGORY": {"type": "NUMBER", "index": 11, "name": "CATEGORY", "comment": null}, "DISPLAY_NAME": {"type": "TEXT", "index": 12, "name": "DISPLAY_NAME", "comment": null}, "INTEREST_CATEGORY": {"type": "VARIANT", "index": 13, "name": "INTEREST_CATEGORY", "comment": null}, "FREQUENCY": {"type": "NUMBER", "index": 14, "name": "FREQUENCY", "comment": null}, "FREQUENCY_SCHEDULE": {"type": "NUMBER", "index": 15, "name": "FREQUENCY_SCHEDULE", "comment": null}, "GENDER": {"type": "TEXT", "index": 16, "name": "GENDER", "comment": null}, "LANGUAGES": {"type": "VARIANT", "index": 17, "name": "LANGUAGES", "comment": null}, "LANDING_PAGE_URL": {"type": "TEXT", "index": 18, "name": "LANDING_PAGE_URL", "comment": null}, "_FIVETRAN_SYNCED": {"type": "TIMESTAMP_TZ", "index": 19, "name": "_FIVETRAN_SYNCED", "comment": null}, "IS_MOST_RECENT_RECORD": {"type": "BOOLEAN", "index": 20, "name": "IS_MOST_RECENT_RECORD", "comment": null}}, "stats": {"row_count": {"id": "row_count", "label": "Row Count", "value": 2265.0, "include": true, "description": "An approximate count of rows in this table"}, "last_modified": {"id": "last_modified", "label": "Last Modified", "value": "2022-01-06 18:37UTC", "include": true, "description": "The timestamp for last update/change"}, "bytes": {"id": "bytes", "label": "Approximate Size", "value": 67072.0, "include": true, "description": "Approximate size of the table as reported by Snowflake"}, "has_stats": {"id": "has_stats", "label": "Has Stats?", "value": true, "include": false, "description": "Indicates whether there are statistics for this table"}}, "unique_id": "model.tiktok_ads_source.stg_tiktok_ads__ad_group_history"}, "model.tiktok_ads_source.stg_tiktok_ads__ad_history_tmp": {"metadata": {"type": "VIEW", "schema": "DBT_TIKTOK_ADS_STG_TIKTOK_ADS", "name": "STG_TIKTOK_ADS__AD_HISTORY_TMP", "database": "FIVETRAN_DBT_TESTING", "comment": null, "owner": "ACCOUNTADMIN"}, "columns": {"AD_ID": {"type": "NUMBER", "index": 1, "name": "AD_ID", "comment": null}, "UPDATED_AT": {"type": "TIMESTAMP_TZ", "index": 2, "name": "UPDATED_AT", "comment": null}, "ADVERTISER_ID": {"type": "NUMBER", "index": 3, "name": "ADVERTISER_ID", "comment": null}, "ADGROUP_ID": {"type": "NUMBER", "index": 4, "name": "ADGROUP_ID", "comment": null}, "CAMPAIGN_ID": {"type": "NUMBER", "index": 5, "name": "CAMPAIGN_ID", "comment": null}, "CREATE_TIME": {"type": "TIMESTAMP_TZ", "index": 6, "name": "CREATE_TIME", "comment": null}, "AD_NAME": {"type": "TEXT", "index": 7, "name": "AD_NAME", "comment": null}, "CALL_TO_ACTION": {"type": "TEXT", "index": 8, "name": "CALL_TO_ACTION", "comment": null}, "STATUS": {"type": "TEXT", "index": 9, "name": "STATUS", "comment": null}, "OPT_STATUS": {"type": "TEXT", "index": 10, "name": "OPT_STATUS", "comment": null}, "AD_TEXT": {"type": "TEXT", "index": 11, "name": "AD_TEXT", "comment": null}, "VIDEO_ID": {"type": "TEXT", "index": 12, "name": "VIDEO_ID", "comment": null}, "APP_NAME": {"type": "TEXT", "index": 13, "name": "APP_NAME", "comment": null}, "OPEN_URL": {"type": "TEXT", "index": 14, "name": "OPEN_URL", "comment": null}, "LANDING_PAGE_URL": {"type": "TEXT", "index": 15, "name": "LANDING_PAGE_URL", "comment": null}, "DISPLAY_NAME": {"type": "TEXT", "index": 16, "name": "DISPLAY_NAME", "comment": null}, "PROFILE_IMAGE": {"type": "TEXT", "index": 17, "name": "PROFILE_IMAGE", "comment": null}, "IMPRESSION_TRACKING_URL": {"type": "TEXT", "index": 18, "name": "IMPRESSION_TRACKING_URL", "comment": null}, "CLICK_TRACKING_URL": {"type": "TEXT", "index": 19, "name": "CLICK_TRACKING_URL", "comment": null}, "PLAYABLE_URL": {"type": "TEXT", "index": 20, "name": "PLAYABLE_URL", "comment": null}, "IS_ACO": {"type": "BOOLEAN", "index": 21, "name": "IS_ACO", "comment": null}, "IS_CREATIVE_AUTHORIZED": {"type": "BOOLEAN", "index": 22, "name": "IS_CREATIVE_AUTHORIZED", "comment": null}, "IS_NEW_STRUCTURE": {"type": "BOOLEAN", "index": 23, "name": "IS_NEW_STRUCTURE", "comment": null}, "IMAGE_IDS": {"type": "VARIANT", "index": 24, "name": "IMAGE_IDS", "comment": null}, "_FIVETRAN_SYNCED": {"type": "TIMESTAMP_TZ", "index": 25, "name": "_FIVETRAN_SYNCED", "comment": null}}, "stats": {"has_stats": {"id": "has_stats", "label": "Has Stats?", "value": false, "include": false, "description": "Indicates whether there are statistics for this table"}}, "unique_id": "model.tiktok_ads_source.stg_tiktok_ads__ad_history_tmp"}, "model.tiktok_ads_source.stg_tiktok_ads__ad_history": {"metadata": {"type": "BASE TABLE", "schema": "DBT_TIKTOK_ADS_STG_TIKTOK_ADS", "name": "STG_TIKTOK_ADS__AD_HISTORY", "database": "FIVETRAN_DBT_TESTING", "comment": null, "owner": "ACCOUNTADMIN"}, "columns": {"AD_ID": {"type": "NUMBER", "index": 1, "name": "AD_ID", "comment": null}, "UPDATED_AT": {"type": "TIMESTAMP_TZ", "index": 2, "name": "UPDATED_AT", "comment": null}, "AD_GROUP_ID": {"type": "NUMBER", "index": 3, "name": "AD_GROUP_ID", "comment": null}, "ADVERTISER_ID": {"type": "NUMBER", "index": 4, "name": "ADVERTISER_ID", "comment": null}, "CAMPAIGN_ID": {"type": "NUMBER", "index": 5, "name": "CAMPAIGN_ID", "comment": null}, "AD_NAME": {"type": "TEXT", "index": 6, "name": "AD_NAME", "comment": null}, "AD_TEXT": {"type": "TEXT", "index": 7, "name": "AD_TEXT", "comment": null}, "CALL_TO_ACTION": {"type": "TEXT", "index": 8, "name": "CALL_TO_ACTION", "comment": null}, "CLICK_TRACKING_URL": {"type": "TEXT", "index": 9, "name": "CLICK_TRACKING_URL", "comment": null}, "IMPRESSION_TRACKING_URL": {"type": "TEXT", "index": 10, "name": "IMPRESSION_TRACKING_URL", "comment": null}, "BASE_URL": {"type": "TEXT", "index": 11, "name": "BASE_URL", "comment": null}, "URL_HOST": {"type": "TEXT", "index": 12, "name": "URL_HOST", "comment": null}, "URL_PATH": {"type": "TEXT", "index": 13, "name": "URL_PATH", "comment": null}, "UTM_SOURCE": {"type": "TEXT", "index": 14, "name": "UTM_SOURCE", "comment": null}, "UTM_MEDIUM": {"type": "TEXT", "index": 15, "name": "UTM_MEDIUM", "comment": null}, "UTM_CAMPAIGN": {"type": "TEXT", "index": 16, "name": "UTM_CAMPAIGN", "comment": null}, "UTM_CONTENT": {"type": "TEXT", "index": 17, "name": "UTM_CONTENT", "comment": null}, "UTM_TERM": {"type": "TEXT", "index": 18, "name": "UTM_TERM", "comment": null}, "LANDING_PAGE_URL": {"type": "TEXT", "index": 19, "name": "LANDING_PAGE_URL", "comment": null}, "VIDEO_ID": {"type": "TEXT", "index": 20, "name": "VIDEO_ID", "comment": null}, "_FIVETRAN_SYNCED": {"type": "TIMESTAMP_TZ", "index": 21, "name": "_FIVETRAN_SYNCED", "comment": null}, "IS_MOST_RECENT_RECORD": {"type": "BOOLEAN", "index": 22, "name": "IS_MOST_RECENT_RECORD", "comment": null}}, "stats": {"row_count": {"id": "row_count", "label": "Row Count", "value": 24809.0, "include": true, "description": "An approximate count of rows in this table"}, "last_modified": {"id": "last_modified", "label": "Last Modified", "value": "2022-01-06 18:37UTC", "include": true, "description": "The timestamp for last update/change"}, "bytes": {"id": "bytes", "label": "Approximate Size", "value": 923648.0, "include": true, "description": "Approximate size of the table as reported by Snowflake"}, "has_stats": {"id": "has_stats", "label": "Has Stats?", "value": true, "include": false, "description": "Indicates whether there are statistics for this table"}}, "unique_id": "model.tiktok_ads_source.stg_tiktok_ads__ad_history"}, "model.tiktok_ads_source.stg_tiktok_ads__campaign_report_hourly_tmp": {"metadata": {"type": "VIEW", "schema": "DBT_TIKTOK_ADS_STG_TIKTOK_ADS", "name": "STG_TIKTOK_ADS__CAMPAIGN_REPORT_HOURLY_TMP", "database": "FIVETRAN_DBT_TESTING", "comment": null, "owner": "ACCOUNTADMIN"}, "columns": {"CAMPAIGN_ID": {"type": "NUMBER", "index": 1, "name": "CAMPAIGN_ID", "comment": null}, "STAT_TIME_HOUR": {"type": "TIMESTAMP_NTZ", "index": 2, "name": "STAT_TIME_HOUR", "comment": null}, "COST_PER_CONVERSION": {"type": "FLOAT", "index": 3, "name": "COST_PER_CONVERSION", "comment": null}, "REAL_TIME_CONVERSION": {"type": "NUMBER", "index": 4, "name": "REAL_TIME_CONVERSION", "comment": null}, "CPC": {"type": "FLOAT", "index": 5, "name": "CPC", "comment": null}, "VIDEO_PLAY_ACTIONS": {"type": "NUMBER", "index": 6, "name": "VIDEO_PLAY_ACTIONS", "comment": null}, "CONVERSION_RATE": {"type": "FLOAT", "index": 7, "name": "CONVERSION_RATE", "comment": null}, "VIDEO_VIEWS_P_75": {"type": "NUMBER", "index": 8, "name": "VIDEO_VIEWS_P_75", "comment": null}, "RESULT": {"type": "NUMBER", "index": 9, "name": "RESULT", "comment": null}, "VIDEO_VIEWS_P_50": {"type": "NUMBER", "index": 10, "name": "VIDEO_VIEWS_P_50", "comment": null}, "IMPRESSIONS": {"type": "NUMBER", "index": 11, "name": "IMPRESSIONS", "comment": null}, "COMMENTS": {"type": "NUMBER", "index": 12, "name": "COMMENTS", "comment": null}, "REAL_TIME_COST_PER_RESULT": {"type": "FLOAT", "index": 13, "name": "REAL_TIME_COST_PER_RESULT", "comment": null}, "CONVERSION": {"type": "NUMBER", "index": 14, "name": "CONVERSION", "comment": null}, "REAL_TIME_RESULT": {"type": "NUMBER", "index": 15, "name": "REAL_TIME_RESULT", "comment": null}, "VIDEO_VIEWS_P_100": {"type": "NUMBER", "index": 16, "name": "VIDEO_VIEWS_P_100", "comment": null}, "SHARES": {"type": "NUMBER", "index": 17, "name": "SHARES", "comment": null}, "REAL_TIME_CONVERSION_RATE": {"type": "FLOAT", "index": 18, "name": "REAL_TIME_CONVERSION_RATE", "comment": null}, "COST_PER_SECONDARY_GOAL_RESULT": {"type": "TEXT", "index": 19, "name": "COST_PER_SECONDARY_GOAL_RESULT", "comment": null}, "SECONDARY_GOAL_RESULT_RATE": {"type": "TEXT", "index": 20, "name": "SECONDARY_GOAL_RESULT_RATE", "comment": null}, "CLICKS": {"type": "NUMBER", "index": 21, "name": "CLICKS", "comment": null}, "COST_PER_1000_REACHED": {"type": "FLOAT", "index": 22, "name": "COST_PER_1000_REACHED", "comment": null}, "VIDEO_VIEWS_P_25": {"type": "NUMBER", "index": 23, "name": "VIDEO_VIEWS_P_25", "comment": null}, "REACH": {"type": "NUMBER", "index": 24, "name": "REACH", "comment": null}, "REAL_TIME_COST_PER_CONVERSION": {"type": "FLOAT", "index": 25, "name": "REAL_TIME_COST_PER_CONVERSION", "comment": null}, "PROFILE_VISITS_RATE": {"type": "FLOAT", "index": 26, "name": "PROFILE_VISITS_RATE", "comment": null}, "AVERAGE_VIDEO_PLAY": {"type": "FLOAT", "index": 27, "name": "AVERAGE_VIDEO_PLAY", "comment": null}, "PROFILE_VISITS": {"type": "NUMBER", "index": 28, "name": "PROFILE_VISITS", "comment": null}, "CPM": {"type": "FLOAT", "index": 29, "name": "CPM", "comment": null}, "CTR": {"type": "FLOAT", "index": 30, "name": "CTR", "comment": null}, "VIDEO_WATCHED_2_S": {"type": "NUMBER", "index": 31, "name": "VIDEO_WATCHED_2_S", "comment": null}, "FOLLOWS": {"type": "NUMBER", "index": 32, "name": "FOLLOWS", "comment": null}, "RESULT_RATE": {"type": "FLOAT", "index": 33, "name": "RESULT_RATE", "comment": null}, "VIDEO_WATCHED_6_S": {"type": "NUMBER", "index": 34, "name": "VIDEO_WATCHED_6_S", "comment": null}, "SECONDARY_GOAL_RESULT": {"type": "TEXT", "index": 35, "name": "SECONDARY_GOAL_RESULT", "comment": null}, "COST_PER_RESULT": {"type": "FLOAT", "index": 36, "name": "COST_PER_RESULT", "comment": null}, "AVERAGE_VIDEO_PLAY_PER_USER": {"type": "FLOAT", "index": 37, "name": "AVERAGE_VIDEO_PLAY_PER_USER", "comment": null}, "REAL_TIME_RESULT_RATE": {"type": "FLOAT", "index": 38, "name": "REAL_TIME_RESULT_RATE", "comment": null}, "SPEND": {"type": "FLOAT", "index": 39, "name": "SPEND", "comment": null}, "LIKES": {"type": "NUMBER", "index": 40, "name": "LIKES", "comment": null}, "_FIVETRAN_SYNCED": {"type": "TIMESTAMP_TZ", "index": 41, "name": "_FIVETRAN_SYNCED", "comment": null}}, "stats": {"has_stats": {"id": "has_stats", "label": "Has Stats?", "value": false, "include": false, "description": "Indicates whether there are statistics for this table"}}, "unique_id": "model.tiktok_ads_source.stg_tiktok_ads__campaign_report_hourly_tmp"}, "model.tiktok_ads_source.stg_tiktok_ads__campaign_report_hourly": {"metadata": {"type": "BASE TABLE", "schema": "DBT_TIKTOK_ADS_STG_TIKTOK_ADS", "name": "STG_TIKTOK_ADS__CAMPAIGN_REPORT_HOURLY", "database": "FIVETRAN_DBT_TESTING", "comment": null, "owner": "ACCOUNTADMIN"}, "columns": {"CAMPAIGN_ID": {"type": "NUMBER", "index": 1, "name": "CAMPAIGN_ID", "comment": null}, "_FIVETRAN_SYNCED": {"type": "TIMESTAMP_TZ", "index": 2, "name": "_FIVETRAN_SYNCED", "comment": null}, "STAT_TIME_HOUR": {"type": "TIMESTAMP_NTZ", "index": 3, "name": "STAT_TIME_HOUR", "comment": null}, "CPC": {"type": "FLOAT", "index": 4, "name": "CPC", "comment": null}, "CPM": {"type": "FLOAT", "index": 5, "name": "CPM", "comment": null}, "CTR": {"type": "FLOAT", "index": 6, "name": "CTR", "comment": null}, "IMPRESSIONS": {"type": "NUMBER", "index": 7, "name": "IMPRESSIONS", "comment": null}, "CLICKS": {"type": "NUMBER", "index": 8, "name": "CLICKS", "comment": null}, "SPEND": {"type": "FLOAT", "index": 9, "name": "SPEND", "comment": null}, "REACH": {"type": "NUMBER", "index": 10, "name": "REACH", "comment": null}, "CONVERSION": {"type": "NUMBER", "index": 11, "name": "CONVERSION", "comment": null}, "COST_PER_CONVERSION": {"type": "FLOAT", "index": 12, "name": "COST_PER_CONVERSION", "comment": null}, "CONVERSION_RATE": {"type": "FLOAT", "index": 13, "name": "CONVERSION_RATE", "comment": null}, "LIKES": {"type": "NUMBER", "index": 14, "name": "LIKES", "comment": null}, "COMMENTS": {"type": "NUMBER", "index": 15, "name": "COMMENTS", "comment": null}, "SHARES": {"type": "NUMBER", "index": 16, "name": "SHARES", "comment": null}, "PROFILE_VISITS": {"type": "NUMBER", "index": 17, "name": "PROFILE_VISITS", "comment": null}, "FOLLOWS": {"type": "NUMBER", "index": 18, "name": "FOLLOWS", "comment": null}, "VIDEO_PLAY_ACTIONS": {"type": "NUMBER", "index": 19, "name": "VIDEO_PLAY_ACTIONS", "comment": null}, "VIDEO_WATCHED_2_S": {"type": "NUMBER", "index": 20, "name": "VIDEO_WATCHED_2_S", "comment": null}, "VIDEO_WATCHED_6_S": {"type": "NUMBER", "index": 21, "name": "VIDEO_WATCHED_6_S", "comment": null}, "VIDEO_VIEWS_P_25": {"type": "NUMBER", "index": 22, "name": "VIDEO_VIEWS_P_25", "comment": null}, "VIDEO_VIEWS_P_50": {"type": "NUMBER", "index": 23, "name": "VIDEO_VIEWS_P_50", "comment": null}, "VIDEO_VIEWS_P_75": {"type": "NUMBER", "index": 24, "name": "VIDEO_VIEWS_P_75", "comment": null}, "AVERAGE_VIDEO_PLAY": {"type": "FLOAT", "index": 25, "name": "AVERAGE_VIDEO_PLAY", "comment": null}, "AVERAGE_VIDEO_PLAY_PER_USER": {"type": "FLOAT", "index": 26, "name": "AVERAGE_VIDEO_PLAY_PER_USER", "comment": null}}, "stats": {"row_count": {"id": "row_count", "label": "Row Count", "value": 14302.0, "include": true, "description": "An approximate count of rows in this table"}, "last_modified": {"id": "last_modified", "label": "Last Modified", "value": "2022-01-06 18:37UTC", "include": true, "description": "The timestamp for last update/change"}, "bytes": {"id": "bytes", "label": "Approximate Size", "value": 735744.0, "include": true, "description": "Approximate size of the table as reported by Snowflake"}, "has_stats": {"id": "has_stats", "label": "Has Stats?", "value": true, "include": false, "description": "Indicates whether there are statistics for this table"}}, "unique_id": "model.tiktok_ads_source.stg_tiktok_ads__campaign_report_hourly"}, "model.tiktok_ads_source.stg_tiktok_ads__ad_report_hourly": {"metadata": {"type": "BASE TABLE", "schema": "DBT_TIKTOK_ADS_STG_TIKTOK_ADS", "name": "STG_TIKTOK_ADS__AD_REPORT_HOURLY", "database": "FIVETRAN_DBT_TESTING", "comment": null, "owner": "ACCOUNTADMIN"}, "columns": {"AD_ID": {"type": "NUMBER", "index": 1, "name": "AD_ID", "comment": null}, "_FIVETRAN_SYNCED": {"type": "TIMESTAMP_TZ", "index": 2, "name": "_FIVETRAN_SYNCED", "comment": null}, "STAT_TIME_HOUR": {"type": "TIMESTAMP_NTZ", "index": 3, "name": "STAT_TIME_HOUR", "comment": null}, "CPC": {"type": "FLOAT", "index": 4, "name": "CPC", "comment": null}, "CPM": {"type": "FLOAT", "index": 5, "name": "CPM", "comment": null}, "CTR": {"type": "FLOAT", "index": 6, "name": "CTR", "comment": null}, "IMPRESSIONS": {"type": "NUMBER", "index": 7, "name": "IMPRESSIONS", "comment": null}, "CLICKS": {"type": "NUMBER", "index": 8, "name": "CLICKS", "comment": null}, "SPEND": {"type": "FLOAT", "index": 9, "name": "SPEND", "comment": null}, "REACH": {"type": "NUMBER", "index": 10, "name": "REACH", "comment": null}, "CONVERSION": {"type": "NUMBER", "index": 11, "name": "CONVERSION", "comment": null}, "COST_PER_CONVERSION": {"type": "FLOAT", "index": 12, "name": "COST_PER_CONVERSION", "comment": null}, "CONVERSION_RATE": {"type": "FLOAT", "index": 13, "name": "CONVERSION_RATE", "comment": null}, "LIKES": {"type": "NUMBER", "index": 14, "name": "LIKES", "comment": null}, "COMMENTS": {"type": "NUMBER", "index": 15, "name": "COMMENTS", "comment": null}, "SHARES": {"type": "NUMBER", "index": 16, "name": "SHARES", "comment": null}, "PROFILE_VISITS": {"type": "NUMBER", "index": 17, "name": "PROFILE_VISITS", "comment": null}, "FOLLOWS": {"type": "NUMBER", "index": 18, "name": "FOLLOWS", "comment": null}, "VIDEO_PLAY_ACTIONS": {"type": "NUMBER", "index": 19, "name": "VIDEO_PLAY_ACTIONS", "comment": null}, "VIDEO_WATCHED_2_S": {"type": "NUMBER", "index": 20, "name": "VIDEO_WATCHED_2_S", "comment": null}, "VIDEO_WATCHED_6_S": {"type": "NUMBER", "index": 21, "name": "VIDEO_WATCHED_6_S", "comment": null}, "VIDEO_VIEWS_P_25": {"type": "NUMBER", "index": 22, "name": "VIDEO_VIEWS_P_25", "comment": null}, "VIDEO_VIEWS_P_50": {"type": "NUMBER", "index": 23, "name": "VIDEO_VIEWS_P_50", "comment": null}, "VIDEO_VIEWS_P_75": {"type": "NUMBER", "index": 24, "name": "VIDEO_VIEWS_P_75", "comment": null}, "AVERAGE_VIDEO_PLAY": {"type": "FLOAT", "index": 25, "name": "AVERAGE_VIDEO_PLAY", "comment": null}, "AVERAGE_VIDEO_PLAY_PER_USER": {"type": "FLOAT", "index": 26, "name": "AVERAGE_VIDEO_PLAY_PER_USER", "comment": null}}, "stats": {"row_count": {"id": "row_count", "label": "Row Count", "value": 326781.0, "include": true, "description": "An approximate count of rows in this table"}, "last_modified": {"id": "last_modified", "label": "Last Modified", "value": "2022-01-06 18:37UTC", "include": true, "description": "The timestamp for last update/change"}, "bytes": {"id": "bytes", "label": "Approximate Size", "value": 11990016.0, "include": true, "description": "Approximate size of the table as reported by Snowflake"}, "has_stats": {"id": "has_stats", "label": "Has Stats?", "value": true, "include": false, "description": "Indicates whether there are statistics for this table"}}, "unique_id": "model.tiktok_ads_source.stg_tiktok_ads__ad_report_hourly"}, "model.tiktok_ads.int_tiktok_ads__most_recent_ad": {"metadata": {"type": "BASE TABLE", "schema": "DBT_TIKTOK_ADS_TIKTOK_ADS", "name": "INT_TIKTOK_ADS__MOST_RECENT_AD", "database": "FIVETRAN_DBT_TESTING", "comment": null, "owner": "ACCOUNTADMIN"}, "columns": {"AD_ID": {"type": "NUMBER", "index": 1, "name": "AD_ID", "comment": null}, "UPDATED_AT": {"type": "TIMESTAMP_TZ", "index": 2, "name": "UPDATED_AT", "comment": null}, "AD_GROUP_ID": {"type": "NUMBER", "index": 3, "name": "AD_GROUP_ID", "comment": null}, "ADVERTISER_ID": {"type": "NUMBER", "index": 4, "name": "ADVERTISER_ID", "comment": null}, "CAMPAIGN_ID": {"type": "NUMBER", "index": 5, "name": "CAMPAIGN_ID", "comment": null}, "AD_NAME": {"type": "TEXT", "index": 6, "name": "AD_NAME", "comment": null}, "AD_TEXT": {"type": "TEXT", "index": 7, "name": "AD_TEXT", "comment": null}, "CALL_TO_ACTION": {"type": "TEXT", "index": 8, "name": "CALL_TO_ACTION", "comment": null}, "CLICK_TRACKING_URL": {"type": "TEXT", "index": 9, "name": "CLICK_TRACKING_URL", "comment": null}, "IMPRESSION_TRACKING_URL": {"type": "TEXT", "index": 10, "name": "IMPRESSION_TRACKING_URL", "comment": null}, "BASE_URL": {"type": "TEXT", "index": 11, "name": "BASE_URL", "comment": null}, "URL_HOST": {"type": "TEXT", "index": 12, "name": "URL_HOST", "comment": null}, "URL_PATH": {"type": "TEXT", "index": 13, "name": "URL_PATH", "comment": null}, "UTM_SOURCE": {"type": "TEXT", "index": 14, "name": "UTM_SOURCE", "comment": null}, "UTM_MEDIUM": {"type": "TEXT", "index": 15, "name": "UTM_MEDIUM", "comment": null}, "UTM_CAMPAIGN": {"type": "TEXT", "index": 16, "name": "UTM_CAMPAIGN", "comment": null}, "UTM_CONTENT": {"type": "TEXT", "index": 17, "name": "UTM_CONTENT", "comment": null}, "UTM_TERM": {"type": "TEXT", "index": 18, "name": "UTM_TERM", "comment": null}, "LANDING_PAGE_URL": {"type": "TEXT", "index": 19, "name": "LANDING_PAGE_URL", "comment": null}, "VIDEO_ID": {"type": "TEXT", "index": 20, "name": "VIDEO_ID", "comment": null}, "_FIVETRAN_SYNCED": {"type": "TIMESTAMP_TZ", "index": 21, "name": "_FIVETRAN_SYNCED", "comment": null}, "IS_MOST_RECENT_RECORD": {"type": "BOOLEAN", "index": 22, "name": "IS_MOST_RECENT_RECORD", "comment": null}}, "stats": {"row_count": {"id": "row_count", "label": "Row Count", "value": 3443.0, "include": true, "description": "An approximate count of rows in this table"}, "last_modified": {"id": "last_modified", "label": "Last Modified", "value": "2021-12-13 23:08UTC", "include": true, "description": "The timestamp for last update/change"}, "bytes": {"id": "bytes", "label": "Approximate Size", "value": 191488.0, "include": true, "description": "Approximate size of the table as reported by Snowflake"}, "has_stats": {"id": "has_stats", "label": "Has Stats?", "value": true, "include": false, "description": "Indicates whether there are statistics for this table"}}, "unique_id": "model.tiktok_ads.int_tiktok_ads__most_recent_ad"}, "model.tiktok_ads_source.stg_tiktok_ads__campaign_history": {"metadata": {"type": "BASE TABLE", "schema": "DBT_TIKTOK_ADS_STG_TIKTOK_ADS", "name": "STG_TIKTOK_ADS__CAMPAIGN_HISTORY", "database": "FIVETRAN_DBT_TESTING", "comment": null, "owner": "ACCOUNTADMIN"}, "columns": {"CAMPAIGN_ID": {"type": "NUMBER", "index": 1, "name": "CAMPAIGN_ID", "comment": null}, "UPDATED_AT": {"type": "TIMESTAMP_TZ", "index": 2, "name": "UPDATED_AT", "comment": null}, "ADVERTISER_ID": {"type": "NUMBER", "index": 3, "name": "ADVERTISER_ID", "comment": null}, "CAMPAIGN_NAME": {"type": "TEXT", "index": 4, "name": "CAMPAIGN_NAME", "comment": null}, "CAMPAIGN_TYPE": {"type": "TEXT", "index": 5, "name": "CAMPAIGN_TYPE", "comment": null}, "SPLIT_TEST_VARIABLE": {"type": "TEXT", "index": 6, "name": "SPLIT_TEST_VARIABLE", "comment": null}, "_FIVETRAN_SYNCED": {"type": "TIMESTAMP_TZ", "index": 7, "name": "_FIVETRAN_SYNCED", "comment": null}, "IS_MOST_RECENT_RECORD": {"type": "BOOLEAN", "index": 8, "name": "IS_MOST_RECENT_RECORD", "comment": null}}, "stats": {"row_count": {"id": "row_count", "label": "Row Count", "value": 334.0, "include": true, "description": "An approximate count of rows in this table"}, "last_modified": {"id": "last_modified", "label": "Last Modified", "value": "2022-01-06 18:37UTC", "include": true, "description": "The timestamp for last update/change"}, "bytes": {"id": "bytes", "label": "Approximate Size", "value": 9728.0, "include": true, "description": "Approximate size of the table as reported by Snowflake"}, "has_stats": {"id": "has_stats", "label": "Has Stats?", "value": true, "include": false, "description": "Indicates whether there are statistics for this table"}}, "unique_id": "model.tiktok_ads_source.stg_tiktok_ads__campaign_history"}, "model.tiktok_ads.int_tiktok_ads__most_recent_ad_group": {"metadata": {"type": "BASE TABLE", "schema": "DBT_TIKTOK_ADS_TIKTOK_ADS", "name": "INT_TIKTOK_ADS__MOST_RECENT_AD_GROUP", "database": "FIVETRAN_DBT_TESTING", "comment": null, "owner": "ACCOUNTADMIN"}, "columns": {"AD_GROUP_ID": {"type": "NUMBER", "index": 1, "name": "AD_GROUP_ID", "comment": null}, "UPDATED_AT": {"type": "TIMESTAMP_TZ", "index": 2, "name": "UPDATED_AT", "comment": null}, "ADVERTISER_ID": {"type": "NUMBER", "index": 3, "name": "ADVERTISER_ID", "comment": null}, "CAMPAIGN_ID": {"type": "NUMBER", "index": 4, "name": "CAMPAIGN_ID", "comment": null}, "ACTION_DAYS": {"type": "NUMBER", "index": 5, "name": "ACTION_DAYS", "comment": null}, "AD_GROUP_NAME": {"type": "TEXT", "index": 6, "name": "AD_GROUP_NAME", "comment": null}, "AUDIENCE_TYPE": {"type": "TEXT", "index": 7, "name": "AUDIENCE_TYPE", "comment": null}, "CATEGORY": {"type": "NUMBER", "index": 8, "name": "CATEGORY", "comment": null}, "DISPLAY_NAME": {"type": "TEXT", "index": 9, "name": "DISPLAY_NAME", "comment": null}, "FREQUENCY": {"type": "NUMBER", "index": 10, "name": "FREQUENCY", "comment": null}, "FREQUENCY_SCHEDULE": {"type": "NUMBER", "index": 11, "name": "FREQUENCY_SCHEDULE", "comment": null}, "GENDER": {"type": "TEXT", "index": 12, "name": "GENDER", "comment": null}, "LANDING_PAGE_URL": {"type": "TEXT", "index": 13, "name": "LANDING_PAGE_URL", "comment": null}, "VIDEO_DOWNLOAD": {"type": "TEXT", "index": 14, "name": "VIDEO_DOWNLOAD", "comment": null}, "_FIVETRAN_SYNCED": {"type": "TIMESTAMP_TZ", "index": 15, "name": "_FIVETRAN_SYNCED", "comment": null}, "IS_MOST_RECENT_RECORD": {"type": "BOOLEAN", "index": 16, "name": "IS_MOST_RECENT_RECORD", "comment": null}}, "stats": {"row_count": {"id": "row_count", "label": "Row Count", "value": 45.0, "include": true, "description": "An approximate count of rows in this table"}, "last_modified": {"id": "last_modified", "label": "Last Modified", "value": "2021-12-13 23:08UTC", "include": true, "description": "The timestamp for last update/change"}, "bytes": {"id": "bytes", "label": "Approximate Size", "value": 6656.0, "include": true, "description": "Approximate size of the table as reported by Snowflake"}, "has_stats": {"id": "has_stats", "label": "Has Stats?", "value": true, "include": false, "description": "Indicates whether there are statistics for this table"}}, "unique_id": "model.tiktok_ads.int_tiktok_ads__most_recent_ad_group"}, "model.tiktok_ads_source.stg_tiktok_ads__ad_report_hourly_tmp": {"metadata": {"type": "VIEW", "schema": "DBT_TIKTOK_ADS_STG_TIKTOK_ADS", "name": "STG_TIKTOK_ADS__AD_REPORT_HOURLY_TMP", "database": "FIVETRAN_DBT_TESTING", "comment": null, "owner": "ACCOUNTADMIN"}, "columns": {"AD_ID": {"type": "NUMBER", "index": 1, "name": "AD_ID", "comment": null}, "STAT_TIME_HOUR": {"type": "TIMESTAMP_NTZ", "index": 2, "name": "STAT_TIME_HOUR", "comment": null}, "COST_PER_CONVERSION": {"type": "FLOAT", "index": 3, "name": "COST_PER_CONVERSION", "comment": null}, "REAL_TIME_CONVERSION": {"type": "NUMBER", "index": 4, "name": "REAL_TIME_CONVERSION", "comment": null}, "CPC": {"type": "FLOAT", "index": 5, "name": "CPC", "comment": null}, "VIDEO_PLAY_ACTIONS": {"type": "NUMBER", "index": 6, "name": "VIDEO_PLAY_ACTIONS", "comment": null}, "CONVERSION_RATE": {"type": "FLOAT", "index": 7, "name": "CONVERSION_RATE", "comment": null}, "VIDEO_VIEWS_P_75": {"type": "NUMBER", "index": 8, "name": "VIDEO_VIEWS_P_75", "comment": null}, "RESULT": {"type": "NUMBER", "index": 9, "name": "RESULT", "comment": null}, "VIDEO_VIEWS_P_50": {"type": "NUMBER", "index": 10, "name": "VIDEO_VIEWS_P_50", "comment": null}, "IMPRESSIONS": {"type": "NUMBER", "index": 11, "name": "IMPRESSIONS", "comment": null}, "COMMENTS": {"type": "NUMBER", "index": 12, "name": "COMMENTS", "comment": null}, "REAL_TIME_COST_PER_RESULT": {"type": "FLOAT", "index": 13, "name": "REAL_TIME_COST_PER_RESULT", "comment": null}, "CONVERSION": {"type": "NUMBER", "index": 14, "name": "CONVERSION", "comment": null}, "REAL_TIME_RESULT": {"type": "NUMBER", "index": 15, "name": "REAL_TIME_RESULT", "comment": null}, "VIDEO_VIEWS_P_100": {"type": "NUMBER", "index": 16, "name": "VIDEO_VIEWS_P_100", "comment": null}, "SHARES": {"type": "NUMBER", "index": 17, "name": "SHARES", "comment": null}, "REAL_TIME_CONVERSION_RATE": {"type": "FLOAT", "index": 18, "name": "REAL_TIME_CONVERSION_RATE", "comment": null}, "COST_PER_SECONDARY_GOAL_RESULT": {"type": "TEXT", "index": 19, "name": "COST_PER_SECONDARY_GOAL_RESULT", "comment": null}, "SECONDARY_GOAL_RESULT_RATE": {"type": "TEXT", "index": 20, "name": "SECONDARY_GOAL_RESULT_RATE", "comment": null}, "CLICKS": {"type": "NUMBER", "index": 21, "name": "CLICKS", "comment": null}, "COST_PER_1000_REACHED": {"type": "FLOAT", "index": 22, "name": "COST_PER_1000_REACHED", "comment": null}, "VIDEO_VIEWS_P_25": {"type": "NUMBER", "index": 23, "name": "VIDEO_VIEWS_P_25", "comment": null}, "REACH": {"type": "NUMBER", "index": 24, "name": "REACH", "comment": null}, "REAL_TIME_COST_PER_CONVERSION": {"type": "FLOAT", "index": 25, "name": "REAL_TIME_COST_PER_CONVERSION", "comment": null}, "PROFILE_VISITS_RATE": {"type": "FLOAT", "index": 26, "name": "PROFILE_VISITS_RATE", "comment": null}, "AVERAGE_VIDEO_PLAY": {"type": "FLOAT", "index": 27, "name": "AVERAGE_VIDEO_PLAY", "comment": null}, "PROFILE_VISITS": {"type": "NUMBER", "index": 28, "name": "PROFILE_VISITS", "comment": null}, "CPM": {"type": "FLOAT", "index": 29, "name": "CPM", "comment": null}, "CTR": {"type": "FLOAT", "index": 30, "name": "CTR", "comment": null}, "VIDEO_WATCHED_2_S": {"type": "NUMBER", "index": 31, "name": "VIDEO_WATCHED_2_S", "comment": null}, "FOLLOWS": {"type": "NUMBER", "index": 32, "name": "FOLLOWS", "comment": null}, "RESULT_RATE": {"type": "FLOAT", "index": 33, "name": "RESULT_RATE", "comment": null}, "VIDEO_WATCHED_6_S": {"type": "NUMBER", "index": 34, "name": "VIDEO_WATCHED_6_S", "comment": null}, "SECONDARY_GOAL_RESULT": {"type": "TEXT", "index": 35, "name": "SECONDARY_GOAL_RESULT", "comment": null}, "COST_PER_RESULT": {"type": "FLOAT", "index": 36, "name": "COST_PER_RESULT", "comment": null}, "AVERAGE_VIDEO_PLAY_PER_USER": {"type": "FLOAT", "index": 37, "name": "AVERAGE_VIDEO_PLAY_PER_USER", "comment": null}, "REAL_TIME_RESULT_RATE": {"type": "FLOAT", "index": 38, "name": "REAL_TIME_RESULT_RATE", "comment": null}, "SPEND": {"type": "FLOAT", "index": 39, "name": "SPEND", "comment": null}, "LIKES": {"type": "NUMBER", "index": 40, "name": "LIKES", "comment": null}, "_FIVETRAN_SYNCED": {"type": "TIMESTAMP_TZ", "index": 41, "name": "_FIVETRAN_SYNCED", "comment": null}}, "stats": {"has_stats": {"id": "has_stats", "label": "Has Stats?", "value": false, "include": false, "description": "Indicates whether there are statistics for this table"}}, "unique_id": "model.tiktok_ads_source.stg_tiktok_ads__ad_report_hourly_tmp"}, "model.tiktok_ads.int_tiktok_ads__most_recent_campaign": {"metadata": {"type": "BASE TABLE", "schema": "DBT_TIKTOK_ADS_TIKTOK_ADS", "name": "INT_TIKTOK_ADS__MOST_RECENT_CAMPAIGN", "database": "FIVETRAN_DBT_TESTING", "comment": null, "owner": "ACCOUNTADMIN"}, "columns": {"CAMPAIGN_ID": {"type": "NUMBER", "index": 1, "name": "CAMPAIGN_ID", "comment": null}, "UPDATED_AT": {"type": "TIMESTAMP_TZ", "index": 2, "name": "UPDATED_AT", "comment": null}, "ADVERTISER_ID": {"type": "NUMBER", "index": 3, "name": "ADVERTISER_ID", "comment": null}, "CAMPAIGN_NAME": {"type": "TEXT", "index": 4, "name": "CAMPAIGN_NAME", "comment": null}, "CAMPAIGN_TYPE": {"type": "TEXT", "index": 5, "name": "CAMPAIGN_TYPE", "comment": null}, "SPLIT_TEST_VARIABLE": {"type": "TEXT", "index": 6, "name": "SPLIT_TEST_VARIABLE", "comment": null}, "_FIVETRAN_SYNCED": {"type": "TIMESTAMP_TZ", "index": 7, "name": "_FIVETRAN_SYNCED", "comment": null}, "IS_MOST_RECENT_RECORD": {"type": "BOOLEAN", "index": 8, "name": "IS_MOST_RECENT_RECORD", "comment": null}}, "stats": {"row_count": {"id": "row_count", "label": "Row Count", "value": 12.0, "include": true, "description": "An approximate count of rows in this table"}, "last_modified": {"id": "last_modified", "label": "Last Modified", "value": "2021-12-13 23:08UTC", "include": true, "description": "The timestamp for last update/change"}, "bytes": {"id": "bytes", "label": "Approximate Size", "value": 3584.0, "include": true, "description": "Approximate size of the table as reported by Snowflake"}, "has_stats": {"id": "has_stats", "label": "Has Stats?", "value": true, "include": false, "description": "Indicates whether there are statistics for this table"}}, "unique_id": "model.tiktok_ads.int_tiktok_ads__most_recent_campaign"}, "model.tiktok_ads_source.stg_tiktok_ads__campaign_history_tmp": {"metadata": {"type": "VIEW", "schema": "DBT_TIKTOK_ADS_STG_TIKTOK_ADS", "name": "STG_TIKTOK_ADS__CAMPAIGN_HISTORY_TMP", "database": "FIVETRAN_DBT_TESTING", "comment": null, "owner": "ACCOUNTADMIN"}, "columns": {"CAMPAIGN_ID": {"type": "NUMBER", "index": 1, "name": "CAMPAIGN_ID", "comment": null}, "UPDATED_AT": {"type": "TIMESTAMP_TZ", "index": 2, "name": "UPDATED_AT", "comment": null}, "ADVERTISER_ID": {"type": "NUMBER", "index": 3, "name": "ADVERTISER_ID", "comment": null}, "CAMPAIGN_NAME": {"type": "TEXT", "index": 4, "name": "CAMPAIGN_NAME", "comment": null}, "CAMPAIGN_TYPE": {"type": "TEXT", "index": 5, "name": "CAMPAIGN_TYPE", "comment": null}, "BUDGET": {"type": "FLOAT", "index": 6, "name": "BUDGET", "comment": null}, "BUDGET_MODE": {"type": "TEXT", "index": 7, "name": "BUDGET_MODE", "comment": null}, "OPT_STATUS": {"type": "TEXT", "index": 8, "name": "OPT_STATUS", "comment": null}, "OBJECTIVE_TYPE": {"type": "TEXT", "index": 9, "name": "OBJECTIVE_TYPE", "comment": null}, "IS_NEW_STRUCTURE": {"type": "TEXT", "index": 10, "name": "IS_NEW_STRUCTURE", "comment": null}, "SPLIT_TEST_VARIABLE": {"type": "TEXT", "index": 11, "name": "SPLIT_TEST_VARIABLE", "comment": null}, "CREATE_TIME": {"type": "TIMESTAMP_TZ", "index": 12, "name": "CREATE_TIME", "comment": null}, "_FIVETRAN_SYNCED": {"type": "TIMESTAMP_TZ", "index": 13, "name": "_FIVETRAN_SYNCED", "comment": null}}, "stats": {"has_stats": {"id": "has_stats", "label": "Has Stats?", "value": false, "include": false, "description": "Indicates whether there are statistics for this table"}}, "unique_id": "model.tiktok_ads_source.stg_tiktok_ads__campaign_history_tmp"}}, "sources": {"source.tiktok_ads_source.tiktok_ads.advertiser": {"metadata": {"type": "BASE TABLE", "schema": "TIKTOK_ADS", "name": "ADVERTISER", "database": "MB_TIKTOK_ADS", "comment": null, "owner": null}, "columns": {"ID": {"type": "NUMBER", "index": 1, "name": "ID", "comment": null}, "NAME": {"type": "TEXT", "index": 2, "name": "NAME", "comment": null}, "ADDRESS": {"type": "TEXT", "index": 3, "name": "ADDRESS", "comment": null}, "COMPANY": {"type": "TEXT", "index": 4, "name": "COMPANY", "comment": null}, "CONTACTER": {"type": "TEXT", "index": 5, "name": "CONTACTER", "comment": null}, "COUNTRY": {"type": "TEXT", "index": 6, "name": "COUNTRY", "comment": null}, "CURRENCY": {"type": "TEXT", "index": 7, "name": "CURRENCY", "comment": null}, "DESCRIPTION": {"type": "TEXT", "index": 8, "name": "DESCRIPTION", "comment": null}, "EMAIL": {"type": "TEXT", "index": 9, "name": "EMAIL", "comment": null}, "INDUSTRY": {"type": "TEXT", "index": 10, "name": "INDUSTRY", "comment": null}, "LICENSE_NO": {"type": "TEXT", "index": 11, "name": "LICENSE_NO", "comment": null}, "LICENSE_URL": {"type": "TEXT", "index": 12, "name": "LICENSE_URL", "comment": null}, "PROMOTION_AREA": {"type": "TEXT", "index": 13, "name": "PROMOTION_AREA", "comment": null}, "REASON": {"type": "TEXT", "index": 14, "name": "REASON", "comment": null}, "ROLE": {"type": "TEXT", "index": 15, "name": "ROLE", "comment": null}, "STATUS": {"type": "TEXT", "index": 16, "name": "STATUS", "comment": null}, "TELEPHONE": {"type": "TEXT", "index": 17, "name": "TELEPHONE", "comment": null}, "TIMEZONE": {"type": "TEXT", "index": 18, "name": "TIMEZONE", "comment": null}, "BALANCE": {"type": "FLOAT", "index": 19, "name": "BALANCE", "comment": null}, "CREATE_TIME": {"type": "TIMESTAMP_TZ", "index": 20, "name": "CREATE_TIME", "comment": null}, "LANGUAGE": {"type": "TEXT", "index": 21, "name": "LANGUAGE", "comment": null}, "PHONE_NUMBER": {"type": "TEXT", "index": 22, "name": "PHONE_NUMBER", "comment": null}, "_FIVETRAN_SYNCED": {"type": "TIMESTAMP_TZ", "index": 23, "name": "_FIVETRAN_SYNCED", "comment": null}}, "stats": {"row_count": {"id": "row_count", "label": "Row Count", "value": 2.0, "include": true, "description": "An approximate count of rows in this table"}, "last_modified": {"id": "last_modified", "label": "Last Modified", "value": "2021-09-15 16:03UTC", "include": true, "description": "The timestamp for last update/change"}, "bytes": {"id": "bytes", "label": "Approximate Size", "value": 7680.0, "include": true, "description": "Approximate size of the table as reported by Snowflake"}, "has_stats": {"id": "has_stats", "label": "Has Stats?", "value": true, "include": false, "description": "Indicates whether there are statistics for this table"}}, "unique_id": "source.tiktok_ads_source.tiktok_ads.advertiser"}, "source.tiktok_ads_source.tiktok_ads.adgroup_report_hourly": {"metadata": {"type": "BASE TABLE", "schema": "TIKTOK_ADS", "name": "ADGROUP_REPORT_HOURLY", "database": "MB_TIKTOK_ADS", "comment": null, "owner": null}, "columns": {"ADGROUP_ID": {"type": "NUMBER", "index": 1, "name": "ADGROUP_ID", "comment": null}, "STAT_TIME_HOUR": {"type": "TIMESTAMP_NTZ", "index": 2, "name": "STAT_TIME_HOUR", "comment": null}, "COST_PER_CONVERSION": {"type": "FLOAT", "index": 3, "name": "COST_PER_CONVERSION", "comment": null}, "REAL_TIME_CONVERSION": {"type": "NUMBER", "index": 4, "name": "REAL_TIME_CONVERSION", "comment": null}, "CPC": {"type": "FLOAT", "index": 5, "name": "CPC", "comment": null}, "VIDEO_PLAY_ACTIONS": {"type": "NUMBER", "index": 6, "name": "VIDEO_PLAY_ACTIONS", "comment": null}, "CONVERSION_RATE": {"type": "FLOAT", "index": 7, "name": "CONVERSION_RATE", "comment": null}, "VIDEO_VIEWS_P_75": {"type": "NUMBER", "index": 8, "name": "VIDEO_VIEWS_P_75", "comment": null}, "RESULT": {"type": "NUMBER", "index": 9, "name": "RESULT", "comment": null}, "VIDEO_VIEWS_P_50": {"type": "NUMBER", "index": 10, "name": "VIDEO_VIEWS_P_50", "comment": null}, "IMPRESSIONS": {"type": "NUMBER", "index": 11, "name": "IMPRESSIONS", "comment": null}, "COMMENTS": {"type": "NUMBER", "index": 12, "name": "COMMENTS", "comment": null}, "REAL_TIME_COST_PER_RESULT": {"type": "FLOAT", "index": 13, "name": "REAL_TIME_COST_PER_RESULT", "comment": null}, "CONVERSION": {"type": "NUMBER", "index": 14, "name": "CONVERSION", "comment": null}, "REAL_TIME_RESULT": {"type": "NUMBER", "index": 15, "name": "REAL_TIME_RESULT", "comment": null}, "VIDEO_VIEWS_P_100": {"type": "NUMBER", "index": 16, "name": "VIDEO_VIEWS_P_100", "comment": null}, "SHARES": {"type": "NUMBER", "index": 17, "name": "SHARES", "comment": null}, "REAL_TIME_CONVERSION_RATE": {"type": "FLOAT", "index": 18, "name": "REAL_TIME_CONVERSION_RATE", "comment": null}, "COST_PER_SECONDARY_GOAL_RESULT": {"type": "TEXT", "index": 19, "name": "COST_PER_SECONDARY_GOAL_RESULT", "comment": null}, "SECONDARY_GOAL_RESULT_RATE": {"type": "TEXT", "index": 20, "name": "SECONDARY_GOAL_RESULT_RATE", "comment": null}, "CLICKS": {"type": "NUMBER", "index": 21, "name": "CLICKS", "comment": null}, "COST_PER_1000_REACHED": {"type": "FLOAT", "index": 22, "name": "COST_PER_1000_REACHED", "comment": null}, "VIDEO_VIEWS_P_25": {"type": "NUMBER", "index": 23, "name": "VIDEO_VIEWS_P_25", "comment": null}, "REACH": {"type": "NUMBER", "index": 24, "name": "REACH", "comment": null}, "REAL_TIME_COST_PER_CONVERSION": {"type": "FLOAT", "index": 25, "name": "REAL_TIME_COST_PER_CONVERSION", "comment": null}, "PROFILE_VISITS_RATE": {"type": "FLOAT", "index": 26, "name": "PROFILE_VISITS_RATE", "comment": null}, "AVERAGE_VIDEO_PLAY": {"type": "FLOAT", "index": 27, "name": "AVERAGE_VIDEO_PLAY", "comment": null}, "PROFILE_VISITS": {"type": "NUMBER", "index": 28, "name": "PROFILE_VISITS", "comment": null}, "CPM": {"type": "FLOAT", "index": 29, "name": "CPM", "comment": null}, "CTR": {"type": "FLOAT", "index": 30, "name": "CTR", "comment": null}, "VIDEO_WATCHED_2_S": {"type": "NUMBER", "index": 31, "name": "VIDEO_WATCHED_2_S", "comment": null}, "FOLLOWS": {"type": "NUMBER", "index": 32, "name": "FOLLOWS", "comment": null}, "RESULT_RATE": {"type": "FLOAT", "index": 33, "name": "RESULT_RATE", "comment": null}, "VIDEO_WATCHED_6_S": {"type": "NUMBER", "index": 34, "name": "VIDEO_WATCHED_6_S", "comment": null}, "SECONDARY_GOAL_RESULT": {"type": "TEXT", "index": 35, "name": "SECONDARY_GOAL_RESULT", "comment": null}, "COST_PER_RESULT": {"type": "FLOAT", "index": 36, "name": "COST_PER_RESULT", "comment": null}, "AVERAGE_VIDEO_PLAY_PER_USER": {"type": "FLOAT", "index": 37, "name": "AVERAGE_VIDEO_PLAY_PER_USER", "comment": null}, "REAL_TIME_RESULT_RATE": {"type": "FLOAT", "index": 38, "name": "REAL_TIME_RESULT_RATE", "comment": null}, "SPEND": {"type": "FLOAT", "index": 39, "name": "SPEND", "comment": null}, "LIKES": {"type": "NUMBER", "index": 40, "name": "LIKES", "comment": null}, "_FIVETRAN_SYNCED": {"type": "TIMESTAMP_TZ", "index": 41, "name": "_FIVETRAN_SYNCED", "comment": null}}, "stats": {"row_count": {"id": "row_count", "label": "Row Count", "value": 33949.0, "include": true, "description": "An approximate count of rows in this table"}, "last_modified": {"id": "last_modified", "label": "Last Modified", "value": "2021-09-15 16:02UTC", "include": true, "description": "The timestamp for last update/change"}, "bytes": {"id": "bytes", "label": "Approximate Size", "value": 2539008.0, "include": true, "description": "Approximate size of the table as reported by Snowflake"}, "has_stats": {"id": "has_stats", "label": "Has Stats?", "value": true, "include": false, "description": "Indicates whether there are statistics for this table"}}, "unique_id": "source.tiktok_ads_source.tiktok_ads.adgroup_report_hourly"}, "source.tiktok_ads_source.tiktok_ads.campaign_report_hourly": {"metadata": {"type": "BASE TABLE", "schema": "TIKTOK_ADS", "name": "CAMPAIGN_REPORT_HOURLY", "database": "MB_TIKTOK_ADS", "comment": null, "owner": null}, "columns": {"CAMPAIGN_ID": {"type": "NUMBER", "index": 1, "name": "CAMPAIGN_ID", "comment": null}, "STAT_TIME_HOUR": {"type": "TIMESTAMP_NTZ", "index": 2, "name": "STAT_TIME_HOUR", "comment": null}, "COST_PER_CONVERSION": {"type": "FLOAT", "index": 3, "name": "COST_PER_CONVERSION", "comment": null}, "REAL_TIME_CONVERSION": {"type": "NUMBER", "index": 4, "name": "REAL_TIME_CONVERSION", "comment": null}, "CPC": {"type": "FLOAT", "index": 5, "name": "CPC", "comment": null}, "VIDEO_PLAY_ACTIONS": {"type": "NUMBER", "index": 6, "name": "VIDEO_PLAY_ACTIONS", "comment": null}, "CONVERSION_RATE": {"type": "FLOAT", "index": 7, "name": "CONVERSION_RATE", "comment": null}, "VIDEO_VIEWS_P_75": {"type": "NUMBER", "index": 8, "name": "VIDEO_VIEWS_P_75", "comment": null}, "RESULT": {"type": "NUMBER", "index": 9, "name": "RESULT", "comment": null}, "VIDEO_VIEWS_P_50": {"type": "NUMBER", "index": 10, "name": "VIDEO_VIEWS_P_50", "comment": null}, "IMPRESSIONS": {"type": "NUMBER", "index": 11, "name": "IMPRESSIONS", "comment": null}, "COMMENTS": {"type": "NUMBER", "index": 12, "name": "COMMENTS", "comment": null}, "REAL_TIME_COST_PER_RESULT": {"type": "FLOAT", "index": 13, "name": "REAL_TIME_COST_PER_RESULT", "comment": null}, "CONVERSION": {"type": "NUMBER", "index": 14, "name": "CONVERSION", "comment": null}, "REAL_TIME_RESULT": {"type": "NUMBER", "index": 15, "name": "REAL_TIME_RESULT", "comment": null}, "VIDEO_VIEWS_P_100": {"type": "NUMBER", "index": 16, "name": "VIDEO_VIEWS_P_100", "comment": null}, "SHARES": {"type": "NUMBER", "index": 17, "name": "SHARES", "comment": null}, "REAL_TIME_CONVERSION_RATE": {"type": "FLOAT", "index": 18, "name": "REAL_TIME_CONVERSION_RATE", "comment": null}, "COST_PER_SECONDARY_GOAL_RESULT": {"type": "TEXT", "index": 19, "name": "COST_PER_SECONDARY_GOAL_RESULT", "comment": null}, "SECONDARY_GOAL_RESULT_RATE": {"type": "TEXT", "index": 20, "name": "SECONDARY_GOAL_RESULT_RATE", "comment": null}, "CLICKS": {"type": "NUMBER", "index": 21, "name": "CLICKS", "comment": null}, "COST_PER_1000_REACHED": {"type": "FLOAT", "index": 22, "name": "COST_PER_1000_REACHED", "comment": null}, "VIDEO_VIEWS_P_25": {"type": "NUMBER", "index": 23, "name": "VIDEO_VIEWS_P_25", "comment": null}, "REACH": {"type": "NUMBER", "index": 24, "name": "REACH", "comment": null}, "REAL_TIME_COST_PER_CONVERSION": {"type": "FLOAT", "index": 25, "name": "REAL_TIME_COST_PER_CONVERSION", "comment": null}, "PROFILE_VISITS_RATE": {"type": "FLOAT", "index": 26, "name": "PROFILE_VISITS_RATE", "comment": null}, "AVERAGE_VIDEO_PLAY": {"type": "FLOAT", "index": 27, "name": "AVERAGE_VIDEO_PLAY", "comment": null}, "PROFILE_VISITS": {"type": "NUMBER", "index": 28, "name": "PROFILE_VISITS", "comment": null}, "CPM": {"type": "FLOAT", "index": 29, "name": "CPM", "comment": null}, "CTR": {"type": "FLOAT", "index": 30, "name": "CTR", "comment": null}, "VIDEO_WATCHED_2_S": {"type": "NUMBER", "index": 31, "name": "VIDEO_WATCHED_2_S", "comment": null}, "FOLLOWS": {"type": "NUMBER", "index": 32, "name": "FOLLOWS", "comment": null}, "RESULT_RATE": {"type": "FLOAT", "index": 33, "name": "RESULT_RATE", "comment": null}, "VIDEO_WATCHED_6_S": {"type": "NUMBER", "index": 34, "name": "VIDEO_WATCHED_6_S", "comment": null}, "SECONDARY_GOAL_RESULT": {"type": "TEXT", "index": 35, "name": "SECONDARY_GOAL_RESULT", "comment": null}, "COST_PER_RESULT": {"type": "FLOAT", "index": 36, "name": "COST_PER_RESULT", "comment": null}, "AVERAGE_VIDEO_PLAY_PER_USER": {"type": "FLOAT", "index": 37, "name": "AVERAGE_VIDEO_PLAY_PER_USER", "comment": null}, "REAL_TIME_RESULT_RATE": {"type": "FLOAT", "index": 38, "name": "REAL_TIME_RESULT_RATE", "comment": null}, "SPEND": {"type": "FLOAT", "index": 39, "name": "SPEND", "comment": null}, "LIKES": {"type": "NUMBER", "index": 40, "name": "LIKES", "comment": null}, "_FIVETRAN_SYNCED": {"type": "TIMESTAMP_TZ", "index": 41, "name": "_FIVETRAN_SYNCED", "comment": null}}, "stats": {"row_count": {"id": "row_count", "label": "Row Count", "value": 14302.0, "include": true, "description": "An approximate count of rows in this table"}, "last_modified": {"id": "last_modified", "label": "Last Modified", "value": "2021-09-15 16:02UTC", "include": true, "description": "The timestamp for last update/change"}, "bytes": {"id": "bytes", "label": "Approximate Size", "value": 1323008.0, "include": true, "description": "Approximate size of the table as reported by Snowflake"}, "has_stats": {"id": "has_stats", "label": "Has Stats?", "value": true, "include": false, "description": "Indicates whether there are statistics for this table"}}, "unique_id": "source.tiktok_ads_source.tiktok_ads.campaign_report_hourly"}, "source.tiktok_ads_source.tiktok_ads.adgroup_history": {"metadata": {"type": "BASE TABLE", "schema": "TIKTOK_ADS", "name": "ADGROUP_HISTORY", "database": "MB_TIKTOK_ADS", "comment": null, "owner": null}, "columns": {"ADGROUP_ID": {"type": "NUMBER", "index": 1, "name": "ADGROUP_ID", "comment": null}, "UPDATED_AT": {"type": "TIMESTAMP_TZ", "index": 2, "name": "UPDATED_AT", "comment": null}, "ADVERTISER_ID": {"type": "NUMBER", "index": 3, "name": "ADVERTISER_ID", "comment": null}, "CAMPAIGN_ID": {"type": "NUMBER", "index": 4, "name": "CAMPAIGN_ID", "comment": null}, "CREATE_TIME": {"type": "TIMESTAMP_TZ", "index": 5, "name": "CREATE_TIME", "comment": null}, "ADGROUP_NAME": {"type": "TEXT", "index": 6, "name": "ADGROUP_NAME", "comment": null}, "PLACEMENT_TYPE": {"type": "TEXT", "index": 7, "name": "PLACEMENT_TYPE", "comment": null}, "PROFILE_IMAGE": {"type": "TEXT", "index": 8, "name": "PROFILE_IMAGE", "comment": null}, "LANDING_PAGE_URL": {"type": "TEXT", "index": 9, "name": "LANDING_PAGE_URL", "comment": null}, "DISPLAY_NAME": {"type": "TEXT", "index": 10, "name": "DISPLAY_NAME", "comment": null}, "APP_TYPE": {"type": "TEXT", "index": 11, "name": "APP_TYPE", "comment": null}, "APP_DOWNLOAD_URL": {"type": "TEXT", "index": 12, "name": "APP_DOWNLOAD_URL", "comment": null}, "APP_NAME": {"type": "TEXT", "index": 13, "name": "APP_NAME", "comment": null}, "EXTERNAL_ACTION": {"type": "TEXT", "index": 14, "name": "EXTERNAL_ACTION", "comment": null}, "DEEP_EXTERNAL_ACTION": {"type": "TEXT", "index": 15, "name": "DEEP_EXTERNAL_ACTION", "comment": null}, "CREATIVE_MATERIAL_MODE": {"type": "TEXT", "index": 16, "name": "CREATIVE_MATERIAL_MODE", "comment": null}, "AUDIENCE_TYPE": {"type": "TEXT", "index": 17, "name": "AUDIENCE_TYPE", "comment": null}, "GENDER": {"type": "TEXT", "index": 18, "name": "GENDER", "comment": null}, "ANDROID_OSV": {"type": "TEXT", "index": 19, "name": "ANDROID_OSV", "comment": null}, "IOS_OSV": {"type": "TEXT", "index": 20, "name": "IOS_OSV", "comment": null}, "BUDGET_MODE": {"type": "TEXT", "index": 21, "name": "BUDGET_MODE", "comment": null}, "SCHEDULE_TYPE": {"type": "TEXT", "index": 22, "name": "SCHEDULE_TYPE", "comment": null}, "DAYPARTING": {"type": "TEXT", "index": 23, "name": "DAYPARTING", "comment": null}, "OPTIMIZE_GOAL": {"type": "TEXT", "index": 24, "name": "OPTIMIZE_GOAL", "comment": null}, "CPV_VIDEO_DURATION": {"type": "TEXT", "index": 25, "name": "CPV_VIDEO_DURATION", "comment": null}, "PACING": {"type": "TEXT", "index": 26, "name": "PACING", "comment": null}, "BILLING_EVENT": {"type": "TEXT", "index": 27, "name": "BILLING_EVENT", "comment": null}, "BID_TYPE": {"type": "TEXT", "index": 28, "name": "BID_TYPE", "comment": null}, "DEEP_BID_TYPE": {"type": "TEXT", "index": 29, "name": "DEEP_BID_TYPE", "comment": null}, "IMPRESSION_TRACKING_URL": {"type": "TEXT", "index": 30, "name": "IMPRESSION_TRACKING_URL", "comment": null}, "CLICK_TRACKING_URL": {"type": "TEXT", "index": 31, "name": "CLICK_TRACKING_URL", "comment": null}, "STATUS": {"type": "TEXT", "index": 32, "name": "STATUS", "comment": null}, "OPT_STATUS": {"type": "TEXT", "index": 33, "name": "OPT_STATUS", "comment": null}, "STATISTIC_TYPE": {"type": "TEXT", "index": 34, "name": "STATISTIC_TYPE", "comment": null}, "VIDEO_DOWNLOAD": {"type": "TEXT", "index": 35, "name": "VIDEO_DOWNLOAD", "comment": null}, "OPEN_URL": {"type": "TEXT", "index": 36, "name": "OPEN_URL", "comment": null}, "OPEN_URL_TYPE": {"type": "TEXT", "index": 37, "name": "OPEN_URL_TYPE", "comment": null}, "FALLBACK_TYPE": {"type": "TEXT", "index": 38, "name": "FALLBACK_TYPE", "comment": null}, "BUDGET": {"type": "FLOAT", "index": 39, "name": "BUDGET", "comment": null}, "BID": {"type": "FLOAT", "index": 40, "name": "BID", "comment": null}, "CONVERSION_BID": {"type": "FLOAT", "index": 41, "name": "CONVERSION_BID", "comment": null}, "DEEP_CPABID": {"type": "FLOAT", "index": 42, "name": "DEEP_CPABID", "comment": null}, "SCHEDULE_START_TIME": {"type": "TIMESTAMP_TZ", "index": 43, "name": "SCHEDULE_START_TIME", "comment": null}, "SCHEDULE_END_TIME": {"type": "TIMESTAMP_TZ", "index": 44, "name": "SCHEDULE_END_TIME", "comment": null}, "APP_ID": {"type": "NUMBER", "index": 45, "name": "APP_ID", "comment": null}, "PIXEL_ID": {"type": "NUMBER", "index": 46, "name": "PIXEL_ID", "comment": null}, "ENABLE_INVENTORY_FILTER": {"type": "BOOLEAN", "index": 47, "name": "ENABLE_INVENTORY_FILTER", "comment": null}, "IS_HFSS": {"type": "BOOLEAN", "index": 48, "name": "IS_HFSS", "comment": null}, "IS_NEW_STRUCTURE": {"type": "BOOLEAN", "index": 49, "name": "IS_NEW_STRUCTURE", "comment": null}, "CATEGORY": {"type": "NUMBER", "index": 50, "name": "CATEGORY", "comment": null}, "IS_COMMENT_DISABLE": {"type": "NUMBER", "index": 51, "name": "IS_COMMENT_DISABLE", "comment": null}, "SKIP_LEARNING_PHASE": {"type": "NUMBER", "index": 52, "name": "SKIP_LEARNING_PHASE", "comment": null}, "FREQUENCY": {"type": "NUMBER", "index": 53, "name": "FREQUENCY", "comment": null}, "FREQUENCY_SCHEDULE": {"type": "NUMBER", "index": 54, "name": "FREQUENCY_SCHEDULE", "comment": null}, "ACTION_DAYS": {"type": "NUMBER", "index": 55, "name": "ACTION_DAYS", "comment": null}, "AUDIENCE": {"type": "VARIANT", "index": 56, "name": "AUDIENCE", "comment": null}, "EXCLUDED_AUDIENCE": {"type": "VARIANT", "index": 57, "name": "EXCLUDED_AUDIENCE", "comment": null}, "LOCATION": {"type": "VARIANT", "index": 58, "name": "LOCATION", "comment": null}, "INTEREST_CATEGORY_V_2": {"type": "VARIANT", "index": 59, "name": "INTEREST_CATEGORY_V_2", "comment": null}, "PANGLE_BLOCK_APP_LIST_ID": {"type": "VARIANT", "index": 60, "name": "PANGLE_BLOCK_APP_LIST_ID", "comment": null}, "ACTION_CATEGORIES": {"type": "VARIANT", "index": 61, "name": "ACTION_CATEGORIES", "comment": null}, "PLACEMENT": {"type": "VARIANT", "index": 62, "name": "PLACEMENT", "comment": null}, "KEYWORDS": {"type": "VARIANT", "index": 63, "name": "KEYWORDS", "comment": null}, "AGE": {"type": "VARIANT", "index": 64, "name": "AGE", "comment": null}, "LANGUAGES": {"type": "VARIANT", "index": 65, "name": "LANGUAGES", "comment": null}, "OPERATION_SYSTEM": {"type": "VARIANT", "index": 66, "name": "OPERATION_SYSTEM", "comment": null}, "CONNECTION_TYPE": {"type": "VARIANT", "index": 67, "name": "CONNECTION_TYPE", "comment": null}, "CARRIERS": {"type": "VARIANT", "index": 68, "name": "CARRIERS", "comment": null}, "VIDEO_ACTIONS": {"type": "VARIANT", "index": 69, "name": "VIDEO_ACTIONS", "comment": null}, "PACKAGE": {"type": "TEXT", "index": 70, "name": "PACKAGE", "comment": null}, "_FIVETRAN_SYNCED": {"type": "TIMESTAMP_TZ", "index": 71, "name": "_FIVETRAN_SYNCED", "comment": null}}, "stats": {"row_count": {"id": "row_count", "label": "Row Count", "value": 2265.0, "include": true, "description": "An approximate count of rows in this table"}, "last_modified": {"id": "last_modified", "label": "Last Modified", "value": "2021-09-15 16:03UTC", "include": true, "description": "The timestamp for last update/change"}, "bytes": {"id": "bytes", "label": "Approximate Size", "value": 141824.0, "include": true, "description": "Approximate size of the table as reported by Snowflake"}, "has_stats": {"id": "has_stats", "label": "Has Stats?", "value": true, "include": false, "description": "Indicates whether there are statistics for this table"}}, "unique_id": "source.tiktok_ads_source.tiktok_ads.adgroup_history"}, "source.tiktok_ads_source.tiktok_ads.campaign_history": {"metadata": {"type": "BASE TABLE", "schema": "TIKTOK_ADS", "name": "CAMPAIGN_HISTORY", "database": "MB_TIKTOK_ADS", "comment": null, "owner": null}, "columns": {"CAMPAIGN_ID": {"type": "NUMBER", "index": 1, "name": "CAMPAIGN_ID", "comment": null}, "UPDATED_AT": {"type": "TIMESTAMP_TZ", "index": 2, "name": "UPDATED_AT", "comment": null}, "ADVERTISER_ID": {"type": "NUMBER", "index": 3, "name": "ADVERTISER_ID", "comment": null}, "CAMPAIGN_NAME": {"type": "TEXT", "index": 4, "name": "CAMPAIGN_NAME", "comment": null}, "CAMPAIGN_TYPE": {"type": "TEXT", "index": 5, "name": "CAMPAIGN_TYPE", "comment": null}, "BUDGET": {"type": "FLOAT", "index": 6, "name": "BUDGET", "comment": null}, "BUDGET_MODE": {"type": "TEXT", "index": 7, "name": "BUDGET_MODE", "comment": null}, "OPT_STATUS": {"type": "TEXT", "index": 8, "name": "OPT_STATUS", "comment": null}, "OBJECTIVE_TYPE": {"type": "TEXT", "index": 9, "name": "OBJECTIVE_TYPE", "comment": null}, "IS_NEW_STRUCTURE": {"type": "TEXT", "index": 10, "name": "IS_NEW_STRUCTURE", "comment": null}, "SPLIT_TEST_VARIABLE": {"type": "TEXT", "index": 11, "name": "SPLIT_TEST_VARIABLE", "comment": null}, "CREATE_TIME": {"type": "TIMESTAMP_TZ", "index": 12, "name": "CREATE_TIME", "comment": null}, "_FIVETRAN_SYNCED": {"type": "TIMESTAMP_TZ", "index": 13, "name": "_FIVETRAN_SYNCED", "comment": null}}, "stats": {"row_count": {"id": "row_count", "label": "Row Count", "value": 334.0, "include": true, "description": "An approximate count of rows in this table"}, "last_modified": {"id": "last_modified", "label": "Last Modified", "value": "2021-09-15 16:03UTC", "include": true, "description": "The timestamp for last update/change"}, "bytes": {"id": "bytes", "label": "Approximate Size", "value": 13824.0, "include": true, "description": "Approximate size of the table as reported by Snowflake"}, "has_stats": {"id": "has_stats", "label": "Has Stats?", "value": true, "include": false, "description": "Indicates whether there are statistics for this table"}}, "unique_id": "source.tiktok_ads_source.tiktok_ads.campaign_history"}, "source.tiktok_ads_source.tiktok_ads.ad_history": {"metadata": {"type": "BASE TABLE", "schema": "TIKTOK_ADS", "name": "AD_HISTORY", "database": "MB_TIKTOK_ADS", "comment": null, "owner": null}, "columns": {"AD_ID": {"type": "NUMBER", "index": 1, "name": "AD_ID", "comment": null}, "UPDATED_AT": {"type": "TIMESTAMP_TZ", "index": 2, "name": "UPDATED_AT", "comment": null}, "ADVERTISER_ID": {"type": "NUMBER", "index": 3, "name": "ADVERTISER_ID", "comment": null}, "ADGROUP_ID": {"type": "NUMBER", "index": 4, "name": "ADGROUP_ID", "comment": null}, "CAMPAIGN_ID": {"type": "NUMBER", "index": 5, "name": "CAMPAIGN_ID", "comment": null}, "CREATE_TIME": {"type": "TIMESTAMP_TZ", "index": 6, "name": "CREATE_TIME", "comment": null}, "AD_NAME": {"type": "TEXT", "index": 7, "name": "AD_NAME", "comment": null}, "CALL_TO_ACTION": {"type": "TEXT", "index": 8, "name": "CALL_TO_ACTION", "comment": null}, "STATUS": {"type": "TEXT", "index": 9, "name": "STATUS", "comment": null}, "OPT_STATUS": {"type": "TEXT", "index": 10, "name": "OPT_STATUS", "comment": null}, "AD_TEXT": {"type": "TEXT", "index": 11, "name": "AD_TEXT", "comment": null}, "VIDEO_ID": {"type": "TEXT", "index": 12, "name": "VIDEO_ID", "comment": null}, "APP_NAME": {"type": "TEXT", "index": 13, "name": "APP_NAME", "comment": null}, "OPEN_URL": {"type": "TEXT", "index": 14, "name": "OPEN_URL", "comment": null}, "LANDING_PAGE_URL": {"type": "TEXT", "index": 15, "name": "LANDING_PAGE_URL", "comment": null}, "DISPLAY_NAME": {"type": "TEXT", "index": 16, "name": "DISPLAY_NAME", "comment": null}, "PROFILE_IMAGE": {"type": "TEXT", "index": 17, "name": "PROFILE_IMAGE", "comment": null}, "IMPRESSION_TRACKING_URL": {"type": "TEXT", "index": 18, "name": "IMPRESSION_TRACKING_URL", "comment": null}, "CLICK_TRACKING_URL": {"type": "TEXT", "index": 19, "name": "CLICK_TRACKING_URL", "comment": null}, "PLAYABLE_URL": {"type": "TEXT", "index": 20, "name": "PLAYABLE_URL", "comment": null}, "IS_ACO": {"type": "BOOLEAN", "index": 21, "name": "IS_ACO", "comment": null}, "IS_CREATIVE_AUTHORIZED": {"type": "BOOLEAN", "index": 22, "name": "IS_CREATIVE_AUTHORIZED", "comment": null}, "IS_NEW_STRUCTURE": {"type": "BOOLEAN", "index": 23, "name": "IS_NEW_STRUCTURE", "comment": null}, "IMAGE_IDS": {"type": "VARIANT", "index": 24, "name": "IMAGE_IDS", "comment": null}, "_FIVETRAN_SYNCED": {"type": "TIMESTAMP_TZ", "index": 25, "name": "_FIVETRAN_SYNCED", "comment": null}}, "stats": {"row_count": {"id": "row_count", "label": "Row Count", "value": 24809.0, "include": true, "description": "An approximate count of rows in this table"}, "last_modified": {"id": "last_modified", "label": "Last Modified", "value": "2021-09-15 16:02UTC", "include": true, "description": "The timestamp for last update/change"}, "bytes": {"id": "bytes", "label": "Approximate Size", "value": 1277952.0, "include": true, "description": "Approximate size of the table as reported by Snowflake"}, "has_stats": {"id": "has_stats", "label": "Has Stats?", "value": true, "include": false, "description": "Indicates whether there are statistics for this table"}}, "unique_id": "source.tiktok_ads_source.tiktok_ads.ad_history"}, "source.tiktok_ads_source.tiktok_ads.ad_report_hourly": {"metadata": {"type": "BASE TABLE", "schema": "TIKTOK_ADS", "name": "AD_REPORT_HOURLY", "database": "MB_TIKTOK_ADS", "comment": null, "owner": null}, "columns": {"AD_ID": {"type": "NUMBER", "index": 1, "name": "AD_ID", "comment": null}, "STAT_TIME_HOUR": {"type": "TIMESTAMP_NTZ", "index": 2, "name": "STAT_TIME_HOUR", "comment": null}, "COST_PER_CONVERSION": {"type": "FLOAT", "index": 3, "name": "COST_PER_CONVERSION", "comment": null}, "REAL_TIME_CONVERSION": {"type": "NUMBER", "index": 4, "name": "REAL_TIME_CONVERSION", "comment": null}, "CPC": {"type": "FLOAT", "index": 5, "name": "CPC", "comment": null}, "VIDEO_PLAY_ACTIONS": {"type": "NUMBER", "index": 6, "name": "VIDEO_PLAY_ACTIONS", "comment": null}, "CONVERSION_RATE": {"type": "FLOAT", "index": 7, "name": "CONVERSION_RATE", "comment": null}, "VIDEO_VIEWS_P_75": {"type": "NUMBER", "index": 8, "name": "VIDEO_VIEWS_P_75", "comment": null}, "RESULT": {"type": "NUMBER", "index": 9, "name": "RESULT", "comment": null}, "VIDEO_VIEWS_P_50": {"type": "NUMBER", "index": 10, "name": "VIDEO_VIEWS_P_50", "comment": null}, "IMPRESSIONS": {"type": "NUMBER", "index": 11, "name": "IMPRESSIONS", "comment": null}, "COMMENTS": {"type": "NUMBER", "index": 12, "name": "COMMENTS", "comment": null}, "REAL_TIME_COST_PER_RESULT": {"type": "FLOAT", "index": 13, "name": "REAL_TIME_COST_PER_RESULT", "comment": null}, "CONVERSION": {"type": "NUMBER", "index": 14, "name": "CONVERSION", "comment": null}, "REAL_TIME_RESULT": {"type": "NUMBER", "index": 15, "name": "REAL_TIME_RESULT", "comment": null}, "VIDEO_VIEWS_P_100": {"type": "NUMBER", "index": 16, "name": "VIDEO_VIEWS_P_100", "comment": null}, "SHARES": {"type": "NUMBER", "index": 17, "name": "SHARES", "comment": null}, "REAL_TIME_CONVERSION_RATE": {"type": "FLOAT", "index": 18, "name": "REAL_TIME_CONVERSION_RATE", "comment": null}, "COST_PER_SECONDARY_GOAL_RESULT": {"type": "TEXT", "index": 19, "name": "COST_PER_SECONDARY_GOAL_RESULT", "comment": null}, "SECONDARY_GOAL_RESULT_RATE": {"type": "TEXT", "index": 20, "name": "SECONDARY_GOAL_RESULT_RATE", "comment": null}, "CLICKS": {"type": "NUMBER", "index": 21, "name": "CLICKS", "comment": null}, "COST_PER_1000_REACHED": {"type": "FLOAT", "index": 22, "name": "COST_PER_1000_REACHED", "comment": null}, "VIDEO_VIEWS_P_25": {"type": "NUMBER", "index": 23, "name": "VIDEO_VIEWS_P_25", "comment": null}, "REACH": {"type": "NUMBER", "index": 24, "name": "REACH", "comment": null}, "REAL_TIME_COST_PER_CONVERSION": {"type": "FLOAT", "index": 25, "name": "REAL_TIME_COST_PER_CONVERSION", "comment": null}, "PROFILE_VISITS_RATE": {"type": "FLOAT", "index": 26, "name": "PROFILE_VISITS_RATE", "comment": null}, "AVERAGE_VIDEO_PLAY": {"type": "FLOAT", "index": 27, "name": "AVERAGE_VIDEO_PLAY", "comment": null}, "PROFILE_VISITS": {"type": "NUMBER", "index": 28, "name": "PROFILE_VISITS", "comment": null}, "CPM": {"type": "FLOAT", "index": 29, "name": "CPM", "comment": null}, "CTR": {"type": "FLOAT", "index": 30, "name": "CTR", "comment": null}, "VIDEO_WATCHED_2_S": {"type": "NUMBER", "index": 31, "name": "VIDEO_WATCHED_2_S", "comment": null}, "FOLLOWS": {"type": "NUMBER", "index": 32, "name": "FOLLOWS", "comment": null}, "RESULT_RATE": {"type": "FLOAT", "index": 33, "name": "RESULT_RATE", "comment": null}, "VIDEO_WATCHED_6_S": {"type": "NUMBER", "index": 34, "name": "VIDEO_WATCHED_6_S", "comment": null}, "SECONDARY_GOAL_RESULT": {"type": "TEXT", "index": 35, "name": "SECONDARY_GOAL_RESULT", "comment": null}, "COST_PER_RESULT": {"type": "FLOAT", "index": 36, "name": "COST_PER_RESULT", "comment": null}, "AVERAGE_VIDEO_PLAY_PER_USER": {"type": "FLOAT", "index": 37, "name": "AVERAGE_VIDEO_PLAY_PER_USER", "comment": null}, "REAL_TIME_RESULT_RATE": {"type": "FLOAT", "index": 38, "name": "REAL_TIME_RESULT_RATE", "comment": null}, "SPEND": {"type": "FLOAT", "index": 39, "name": "SPEND", "comment": null}, "LIKES": {"type": "NUMBER", "index": 40, "name": "LIKES", "comment": null}, "_FIVETRAN_SYNCED": {"type": "TIMESTAMP_TZ", "index": 41, "name": "_FIVETRAN_SYNCED", "comment": null}}, "stats": {"row_count": {"id": "row_count", "label": "Row Count", "value": 326781.0, "include": true, "description": "An approximate count of rows in this table"}, "last_modified": {"id": "last_modified", "label": "Last Modified", "value": "2021-09-15 16:02UTC", "include": true, "description": "The timestamp for last update/change"}, "bytes": {"id": "bytes", "label": "Approximate Size", "value": 17682432.0, "include": true, "description": "Approximate size of the table as reported by Snowflake"}, "has_stats": {"id": "has_stats", "label": "Has Stats?", "value": true, "include": false, "description": "Indicates whether there are statistics for this table"}}, "unique_id": "source.tiktok_ads_source.tiktok_ads.ad_report_hourly"}}, "errors": null} \ No newline at end of file +{"metadata": {"dbt_schema_version": "https://schemas.getdbt.com/dbt/catalog/v1.json", "dbt_version": "1.0.4", "generated_at": "2022-08-26T20:02:13.016874Z", "invocation_id": "9fdbca68-4741-4af7-99ac-be7d5e1618c0", "env": {}}, "nodes": {"seed.tiktok_ads_source_integration_tests.tiktok_ad_history_data": {"metadata": {"type": "BASE TABLE", "schema": "tiktok_ads_source_integration_tests_1", "name": "tiktok_ad_history_data", "database": "postgres", "comment": null, "owner": "pguser"}, "columns": {"ad_id": {"type": "integer", "index": 1, "name": "ad_id", "comment": null}, "updated_at": {"type": "text", "index": 2, "name": "updated_at", "comment": null}, "advertiser_id": {"type": "integer", "index": 3, "name": "advertiser_id", "comment": null}, "adgroup_id": {"type": "integer", "index": 4, "name": "adgroup_id", "comment": null}, "campaign_id": {"type": "integer", "index": 5, "name": "campaign_id", "comment": null}, "create_time": {"type": "text", "index": 6, "name": "create_time", "comment": null}, "ad_name": {"type": "text", "index": 7, "name": "ad_name", "comment": null}, "call_to_action": {"type": "text", "index": 8, "name": "call_to_action", "comment": null}, "status": {"type": "text", "index": 9, "name": "status", "comment": null}, "opt_status": {"type": "text", "index": 10, "name": "opt_status", "comment": null}, "ad_text": {"type": "text", "index": 11, "name": "ad_text", "comment": null}, "video_id": {"type": "text", "index": 12, "name": "video_id", "comment": null}, "app_name": {"type": "integer", "index": 13, "name": "app_name", "comment": null}, "open_url": {"type": "integer", "index": 14, "name": "open_url", "comment": null}, "landing_page_url": {"type": "text", "index": 15, "name": "landing_page_url", "comment": null}, "display_name": {"type": "text", "index": 16, "name": "display_name", "comment": null}, "profile_image": {"type": "integer", "index": 17, "name": "profile_image", "comment": null}, "impression_tracking_url": {"type": "integer", "index": 18, "name": "impression_tracking_url", "comment": null}, "click_tracking_url": {"type": "integer", "index": 19, "name": "click_tracking_url", "comment": null}, "playable_url": {"type": "integer", "index": 20, "name": "playable_url", "comment": null}, "is_aco": {"type": "boolean", "index": 21, "name": "is_aco", "comment": null}, "is_creative_authorized": {"type": "boolean", "index": 22, "name": "is_creative_authorized", "comment": null}, "is_new_structure": {"type": "boolean", "index": 23, "name": "is_new_structure", "comment": null}, "image_ids": {"type": "text", "index": 24, "name": "image_ids", "comment": null}, "_fivetran_synced": {"type": "text", "index": 25, "name": "_fivetran_synced", "comment": null}}, "stats": {"has_stats": {"id": "has_stats", "label": "Has Stats?", "value": false, "include": false, "description": "Indicates whether there are statistics for this table"}}, "unique_id": "seed.tiktok_ads_source_integration_tests.tiktok_ad_history_data"}, "seed.tiktok_ads_source_integration_tests.tiktok_ad_report_hourly_data": {"metadata": {"type": "BASE TABLE", "schema": "tiktok_ads_source_integration_tests_1", "name": "tiktok_ad_report_hourly_data", "database": "postgres", "comment": null, "owner": "pguser"}, "columns": {"ad_id": {"type": "integer", "index": 1, "name": "ad_id", "comment": null}, "stat_time_hour": {"type": "timestamp without time zone", "index": 2, "name": "stat_time_hour", "comment": null}, "cost_per_conversion": {"type": "double precision", "index": 3, "name": "cost_per_conversion", "comment": null}, "real_time_conversion": {"type": "integer", "index": 4, "name": "real_time_conversion", "comment": null}, "cpc": {"type": "double precision", "index": 5, "name": "cpc", "comment": null}, "video_play_actions": {"type": "integer", "index": 6, "name": "video_play_actions", "comment": null}, "conversion_rate": {"type": "integer", "index": 7, "name": "conversion_rate", "comment": null}, "video_views_p_75": {"type": "integer", "index": 8, "name": "video_views_p_75", "comment": null}, "result": {"type": "integer", "index": 9, "name": "result", "comment": null}, "video_views_p_50": {"type": "integer", "index": 10, "name": "video_views_p_50", "comment": null}, "impressions": {"type": "integer", "index": 11, "name": "impressions", "comment": null}, "comments": {"type": "integer", "index": 12, "name": "comments", "comment": null}, "real_time_cost_per_result": {"type": "double precision", "index": 13, "name": "real_time_cost_per_result", "comment": null}, "conversion": {"type": "integer", "index": 14, "name": "conversion", "comment": null}, "real_time_result": {"type": "integer", "index": 15, "name": "real_time_result", "comment": null}, "video_views_p_100": {"type": "integer", "index": 16, "name": "video_views_p_100", "comment": null}, "shares": {"type": "integer", "index": 17, "name": "shares", "comment": null}, "real_time_conversion_rate": {"type": "integer", "index": 18, "name": "real_time_conversion_rate", "comment": null}, "cost_per_secondary_goal_result": {"type": "text", "index": 19, "name": "cost_per_secondary_goal_result", "comment": null}, "secondary_goal_result_rate": {"type": "text", "index": 20, "name": "secondary_goal_result_rate", "comment": null}, "clicks": {"type": "integer", "index": 21, "name": "clicks", "comment": null}, "cost_per_1000_reached": {"type": "integer", "index": 22, "name": "cost_per_1000_reached", "comment": null}, "video_views_p_25": {"type": "integer", "index": 23, "name": "video_views_p_25", "comment": null}, "reach": {"type": "integer", "index": 24, "name": "reach", "comment": null}, "real_time_cost_per_conversion": {"type": "double precision", "index": 25, "name": "real_time_cost_per_conversion", "comment": null}, "profile_visits_rate": {"type": "integer", "index": 26, "name": "profile_visits_rate", "comment": null}, "average_video_play": {"type": "double precision", "index": 27, "name": "average_video_play", "comment": null}, "profile_visits": {"type": "integer", "index": 28, "name": "profile_visits", "comment": null}, "cpm": {"type": "double precision", "index": 29, "name": "cpm", "comment": null}, "ctr": {"type": "double precision", "index": 30, "name": "ctr", "comment": null}, "video_watched_2_s": {"type": "integer", "index": 31, "name": "video_watched_2_s", "comment": null}, "follows": {"type": "integer", "index": 32, "name": "follows", "comment": null}, "result_rate": {"type": "integer", "index": 33, "name": "result_rate", "comment": null}, "video_watched_6_s": {"type": "integer", "index": 34, "name": "video_watched_6_s", "comment": null}, "secondary_goal_result": {"type": "text", "index": 35, "name": "secondary_goal_result", "comment": null}, "cost_per_result": {"type": "double precision", "index": 36, "name": "cost_per_result", "comment": null}, "average_video_play_per_user": {"type": "integer", "index": 37, "name": "average_video_play_per_user", "comment": null}, "real_time_result_rate": {"type": "integer", "index": 38, "name": "real_time_result_rate", "comment": null}, "spend": {"type": "double precision", "index": 39, "name": "spend", "comment": null}, "likes": {"type": "integer", "index": 40, "name": "likes", "comment": null}, "_fivetran_synced": {"type": "text", "index": 41, "name": "_fivetran_synced", "comment": null}}, "stats": {"has_stats": {"id": "has_stats", "label": "Has Stats?", "value": false, "include": false, "description": "Indicates whether there are statistics for this table"}}, "unique_id": "seed.tiktok_ads_source_integration_tests.tiktok_ad_report_hourly_data"}, "seed.tiktok_ads_source_integration_tests.tiktok_adgroup_history_data": {"metadata": {"type": "BASE TABLE", "schema": "tiktok_ads_source_integration_tests_1", "name": "tiktok_adgroup_history_data", "database": "postgres", "comment": null, "owner": "pguser"}, "columns": {"adgroup_id": {"type": "integer", "index": 1, "name": "adgroup_id", "comment": null}, "updated_at": {"type": "text", "index": 2, "name": "updated_at", "comment": null}, "advertiser_id": {"type": "integer", "index": 3, "name": "advertiser_id", "comment": null}, "campaign_id": {"type": "integer", "index": 4, "name": "campaign_id", "comment": null}, "create_time": {"type": "text", "index": 5, "name": "create_time", "comment": null}, "adgroup_name": {"type": "text", "index": 6, "name": "adgroup_name", "comment": null}, "placement_type": {"type": "text", "index": 7, "name": "placement_type", "comment": null}, "profile_image": {"type": "integer", "index": 8, "name": "profile_image", "comment": null}, "landing_page_url": {"type": "integer", "index": 9, "name": "landing_page_url", "comment": null}, "display_name": {"type": "integer", "index": 10, "name": "display_name", "comment": null}, "app_type": {"type": "integer", "index": 11, "name": "app_type", "comment": null}, "app_download_url": {"type": "integer", "index": 12, "name": "app_download_url", "comment": null}, "app_name": {"type": "integer", "index": 13, "name": "app_name", "comment": null}, "external_action": {"type": "text", "index": 14, "name": "external_action", "comment": null}, "deep_external_action": {"type": "integer", "index": 15, "name": "deep_external_action", "comment": null}, "creative_material_mode": {"type": "text", "index": 16, "name": "creative_material_mode", "comment": null}, "audience_type": {"type": "integer", "index": 17, "name": "audience_type", "comment": null}, "gender": {"type": "text", "index": 18, "name": "gender", "comment": null}, "android_osv": {"type": "integer", "index": 19, "name": "android_osv", "comment": null}, "ios_osv": {"type": "integer", "index": 20, "name": "ios_osv", "comment": null}, "budget_mode": {"type": "text", "index": 21, "name": "budget_mode", "comment": null}, "schedule_type": {"type": "text", "index": 22, "name": "schedule_type", "comment": null}, "dayparting": {"type": "integer", "index": 23, "name": "dayparting", "comment": null}, "optimize_goal": {"type": "text", "index": 24, "name": "optimize_goal", "comment": null}, "cpv_video_duration": {"type": "integer", "index": 25, "name": "cpv_video_duration", "comment": null}, "pacing": {"type": "text", "index": 26, "name": "pacing", "comment": null}, "billing_event": {"type": "text", "index": 27, "name": "billing_event", "comment": null}, "bid_type": {"type": "text", "index": 28, "name": "bid_type", "comment": null}, "deep_bid_type": {"type": "integer", "index": 29, "name": "deep_bid_type", "comment": null}, "impression_tracking_url": {"type": "integer", "index": 30, "name": "impression_tracking_url", "comment": null}, "click_tracking_url": {"type": "integer", "index": 31, "name": "click_tracking_url", "comment": null}, "status": {"type": "text", "index": 32, "name": "status", "comment": null}, "opt_status": {"type": "text", "index": 33, "name": "opt_status", "comment": null}, "statistic_type": {"type": "integer", "index": 34, "name": "statistic_type", "comment": null}, "video_download": {"type": "text", "index": 35, "name": "video_download", "comment": null}, "open_url": {"type": "integer", "index": 36, "name": "open_url", "comment": null}, "open_url_type": {"type": "integer", "index": 37, "name": "open_url_type", "comment": null}, "fallback_type": {"type": "integer", "index": 38, "name": "fallback_type", "comment": null}, "budget": {"type": "integer", "index": 39, "name": "budget", "comment": null}, "bid": {"type": "integer", "index": 40, "name": "bid", "comment": null}, "conversion_bid": {"type": "integer", "index": 41, "name": "conversion_bid", "comment": null}, "deep_cpabid": {"type": "integer", "index": 42, "name": "deep_cpabid", "comment": null}, "schedule_start_time": {"type": "text", "index": 43, "name": "schedule_start_time", "comment": null}, "schedule_end_time": {"type": "text", "index": 44, "name": "schedule_end_time", "comment": null}, "app_id": {"type": "integer", "index": 45, "name": "app_id", "comment": null}, "pixel_id": {"type": "integer", "index": 46, "name": "pixel_id", "comment": null}, "enable_inventory_filter": {"type": "boolean", "index": 47, "name": "enable_inventory_filter", "comment": null}, "is_hfss": {"type": "boolean", "index": 48, "name": "is_hfss", "comment": null}, "is_new_structure": {"type": "boolean", "index": 49, "name": "is_new_structure", "comment": null}, "category": {"type": "integer", "index": 50, "name": "category", "comment": null}, "is_comment_disable": {"type": "integer", "index": 51, "name": "is_comment_disable", "comment": null}, "skip_learning_phase": {"type": "integer", "index": 52, "name": "skip_learning_phase", "comment": null}, "frequency": {"type": "integer", "index": 53, "name": "frequency", "comment": null}, "frequency_schedule": {"type": "integer", "index": 54, "name": "frequency_schedule", "comment": null}, "action_days": {"type": "integer", "index": 55, "name": "action_days", "comment": null}, "audience": {"type": "text", "index": 56, "name": "audience", "comment": null}, "excluded_audience": {"type": "text", "index": 57, "name": "excluded_audience", "comment": null}, "location": {"type": "text", "index": 58, "name": "location", "comment": null}, "interest_category_v_2": {"type": "text", "index": 59, "name": "interest_category_v_2", "comment": null}, "pangle_block_app_list_id": {"type": "text", "index": 60, "name": "pangle_block_app_list_id", "comment": null}, "action_categories": {"type": "text", "index": 61, "name": "action_categories", "comment": null}, "placement": {"type": "text", "index": 62, "name": "placement", "comment": null}, "keywords": {"type": "integer", "index": 63, "name": "keywords", "comment": null}, "age": {"type": "text", "index": 64, "name": "age", "comment": null}, "languages": {"type": "text", "index": 65, "name": "languages", "comment": null}, "operation_system": {"type": "text", "index": 66, "name": "operation_system", "comment": null}, "connection_type": {"type": "text", "index": 67, "name": "connection_type", "comment": null}, "carriers": {"type": "text", "index": 68, "name": "carriers", "comment": null}, "video_actions": {"type": "text", "index": 69, "name": "video_actions", "comment": null}, "package": {"type": "integer", "index": 70, "name": "package", "comment": null}, "_fivetran_synced": {"type": "text", "index": 71, "name": "_fivetran_synced", "comment": null}}, "stats": {"has_stats": {"id": "has_stats", "label": "Has Stats?", "value": false, "include": false, "description": "Indicates whether there are statistics for this table"}}, "unique_id": "seed.tiktok_ads_source_integration_tests.tiktok_adgroup_history_data"}, "seed.tiktok_ads_source_integration_tests.tiktok_adgroup_report_hourly_data": {"metadata": {"type": "BASE TABLE", "schema": "tiktok_ads_source_integration_tests_1", "name": "tiktok_adgroup_report_hourly_data", "database": "postgres", "comment": null, "owner": "pguser"}, "columns": {"adgroup_id": {"type": "integer", "index": 1, "name": "adgroup_id", "comment": null}, "stat_time_hour": {"type": "timestamp without time zone", "index": 2, "name": "stat_time_hour", "comment": null}, "cost_per_conversion": {"type": "double precision", "index": 3, "name": "cost_per_conversion", "comment": null}, "real_time_conversion": {"type": "integer", "index": 4, "name": "real_time_conversion", "comment": null}, "cpc": {"type": "double precision", "index": 5, "name": "cpc", "comment": null}, "video_play_actions": {"type": "integer", "index": 6, "name": "video_play_actions", "comment": null}, "conversion_rate": {"type": "integer", "index": 7, "name": "conversion_rate", "comment": null}, "video_views_p_75": {"type": "integer", "index": 8, "name": "video_views_p_75", "comment": null}, "result": {"type": "integer", "index": 9, "name": "result", "comment": null}, "video_views_p_50": {"type": "integer", "index": 10, "name": "video_views_p_50", "comment": null}, "impressions": {"type": "integer", "index": 11, "name": "impressions", "comment": null}, "comments": {"type": "integer", "index": 12, "name": "comments", "comment": null}, "real_time_cost_per_result": {"type": "double precision", "index": 13, "name": "real_time_cost_per_result", "comment": null}, "conversion": {"type": "integer", "index": 14, "name": "conversion", "comment": null}, "real_time_result": {"type": "integer", "index": 15, "name": "real_time_result", "comment": null}, "video_views_p_100": {"type": "integer", "index": 16, "name": "video_views_p_100", "comment": null}, "shares": {"type": "integer", "index": 17, "name": "shares", "comment": null}, "real_time_conversion_rate": {"type": "double precision", "index": 18, "name": "real_time_conversion_rate", "comment": null}, "cost_per_secondary_goal_result": {"type": "text", "index": 19, "name": "cost_per_secondary_goal_result", "comment": null}, "secondary_goal_result_rate": {"type": "text", "index": 20, "name": "secondary_goal_result_rate", "comment": null}, "clicks": {"type": "integer", "index": 21, "name": "clicks", "comment": null}, "cost_per_1000_reached": {"type": "double precision", "index": 22, "name": "cost_per_1000_reached", "comment": null}, "video_views_p_25": {"type": "integer", "index": 23, "name": "video_views_p_25", "comment": null}, "reach": {"type": "integer", "index": 24, "name": "reach", "comment": null}, "real_time_cost_per_conversion": {"type": "double precision", "index": 25, "name": "real_time_cost_per_conversion", "comment": null}, "profile_visits_rate": {"type": "integer", "index": 26, "name": "profile_visits_rate", "comment": null}, "average_video_play": {"type": "double precision", "index": 27, "name": "average_video_play", "comment": null}, "profile_visits": {"type": "integer", "index": 28, "name": "profile_visits", "comment": null}, "cpm": {"type": "double precision", "index": 29, "name": "cpm", "comment": null}, "ctr": {"type": "double precision", "index": 30, "name": "ctr", "comment": null}, "video_watched_2_s": {"type": "integer", "index": 31, "name": "video_watched_2_s", "comment": null}, "follows": {"type": "integer", "index": 32, "name": "follows", "comment": null}, "result_rate": {"type": "double precision", "index": 33, "name": "result_rate", "comment": null}, "video_watched_6_s": {"type": "integer", "index": 34, "name": "video_watched_6_s", "comment": null}, "secondary_goal_result": {"type": "text", "index": 35, "name": "secondary_goal_result", "comment": null}, "cost_per_result": {"type": "double precision", "index": 36, "name": "cost_per_result", "comment": null}, "average_video_play_per_user": {"type": "double precision", "index": 37, "name": "average_video_play_per_user", "comment": null}, "real_time_result_rate": {"type": "double precision", "index": 38, "name": "real_time_result_rate", "comment": null}, "spend": {"type": "double precision", "index": 39, "name": "spend", "comment": null}, "likes": {"type": "integer", "index": 40, "name": "likes", "comment": null}, "_fivetran_synced": {"type": "text", "index": 41, "name": "_fivetran_synced", "comment": null}}, "stats": {"has_stats": {"id": "has_stats", "label": "Has Stats?", "value": false, "include": false, "description": "Indicates whether there are statistics for this table"}}, "unique_id": "seed.tiktok_ads_source_integration_tests.tiktok_adgroup_report_hourly_data"}, "seed.tiktok_ads_source_integration_tests.tiktok_advertiser_data": {"metadata": {"type": "BASE TABLE", "schema": "tiktok_ads_source_integration_tests_1", "name": "tiktok_advertiser_data", "database": "postgres", "comment": null, "owner": "pguser"}, "columns": {"id": {"type": "integer", "index": 1, "name": "id", "comment": null}, "name": {"type": "text", "index": 2, "name": "name", "comment": null}, "address": {"type": "text", "index": 3, "name": "address", "comment": null}, "company": {"type": "text", "index": 4, "name": "company", "comment": null}, "contacter": {"type": "integer", "index": 5, "name": "contacter", "comment": null}, "country": {"type": "text", "index": 6, "name": "country", "comment": null}, "currency": {"type": "text", "index": 7, "name": "currency", "comment": null}, "description": {"type": "text", "index": 8, "name": "description", "comment": null}, "email": {"type": "text", "index": 9, "name": "email", "comment": null}, "industry": {"type": "integer", "index": 10, "name": "industry", "comment": null}, "license_no": {"type": "integer", "index": 11, "name": "license_no", "comment": null}, "license_url": {"type": "integer", "index": 12, "name": "license_url", "comment": null}, "promotion_area": {"type": "integer", "index": 13, "name": "promotion_area", "comment": null}, "reason": {"type": "integer", "index": 14, "name": "reason", "comment": null}, "role": {"type": "text", "index": 15, "name": "role", "comment": null}, "status": {"type": "text", "index": 16, "name": "status", "comment": null}, "telephone": {"type": "integer", "index": 17, "name": "telephone", "comment": null}, "timezone": {"type": "text", "index": 18, "name": "timezone", "comment": null}, "balance": {"type": "double precision", "index": 19, "name": "balance", "comment": null}, "create_time": {"type": "text", "index": 20, "name": "create_time", "comment": null}, "language": {"type": "text", "index": 21, "name": "language", "comment": null}, "phone_number": {"type": "text", "index": 22, "name": "phone_number", "comment": null}, "_fivetran_synced": {"type": "text", "index": 23, "name": "_fivetran_synced", "comment": null}}, "stats": {"has_stats": {"id": "has_stats", "label": "Has Stats?", "value": false, "include": false, "description": "Indicates whether there are statistics for this table"}}, "unique_id": "seed.tiktok_ads_source_integration_tests.tiktok_advertiser_data"}, "seed.tiktok_ads_source_integration_tests.tiktok_campaign_history_data": {"metadata": {"type": "BASE TABLE", "schema": "tiktok_ads_source_integration_tests_1", "name": "tiktok_campaign_history_data", "database": "postgres", "comment": null, "owner": "pguser"}, "columns": {"campaign_id": {"type": "integer", "index": 1, "name": "campaign_id", "comment": null}, "updated_at": {"type": "text", "index": 2, "name": "updated_at", "comment": null}, "advertiser_id": {"type": "integer", "index": 3, "name": "advertiser_id", "comment": null}, "campaign_name": {"type": "text", "index": 4, "name": "campaign_name", "comment": null}, "campaign_type": {"type": "text", "index": 5, "name": "campaign_type", "comment": null}, "budget": {"type": "integer", "index": 6, "name": "budget", "comment": null}, "budget_mode": {"type": "text", "index": 7, "name": "budget_mode", "comment": null}, "opt_status": {"type": "text", "index": 8, "name": "opt_status", "comment": null}, "objective_type": {"type": "text", "index": 9, "name": "objective_type", "comment": null}, "is_new_structure": {"type": "boolean", "index": 10, "name": "is_new_structure", "comment": null}, "split_test_variable": {"type": "integer", "index": 11, "name": "split_test_variable", "comment": null}, "create_time": {"type": "text", "index": 12, "name": "create_time", "comment": null}, "_fivetran_synced": {"type": "text", "index": 13, "name": "_fivetran_synced", "comment": null}}, "stats": {"has_stats": {"id": "has_stats", "label": "Has Stats?", "value": false, "include": false, "description": "Indicates whether there are statistics for this table"}}, "unique_id": "seed.tiktok_ads_source_integration_tests.tiktok_campaign_history_data"}, "seed.tiktok_ads_source_integration_tests.tiktok_campaign_report_hourly_data": {"metadata": {"type": "BASE TABLE", "schema": "tiktok_ads_source_integration_tests_1", "name": "tiktok_campaign_report_hourly_data", "database": "postgres", "comment": null, "owner": "pguser"}, "columns": {"campaign_id": {"type": "integer", "index": 1, "name": "campaign_id", "comment": null}, "stat_time_hour": {"type": "timestamp without time zone", "index": 2, "name": "stat_time_hour", "comment": null}, "cost_per_conversion": {"type": "double precision", "index": 3, "name": "cost_per_conversion", "comment": null}, "real_time_conversion": {"type": "integer", "index": 4, "name": "real_time_conversion", "comment": null}, "cpc": {"type": "double precision", "index": 5, "name": "cpc", "comment": null}, "video_play_actions": {"type": "integer", "index": 6, "name": "video_play_actions", "comment": null}, "conversion_rate": {"type": "integer", "index": 7, "name": "conversion_rate", "comment": null}, "video_views_p_75": {"type": "integer", "index": 8, "name": "video_views_p_75", "comment": null}, "result": {"type": "integer", "index": 9, "name": "result", "comment": null}, "video_views_p_50": {"type": "integer", "index": 10, "name": "video_views_p_50", "comment": null}, "impressions": {"type": "integer", "index": 11, "name": "impressions", "comment": null}, "comments": {"type": "integer", "index": 12, "name": "comments", "comment": null}, "real_time_cost_per_result": {"type": "double precision", "index": 13, "name": "real_time_cost_per_result", "comment": null}, "conversion": {"type": "integer", "index": 14, "name": "conversion", "comment": null}, "real_time_result": {"type": "integer", "index": 15, "name": "real_time_result", "comment": null}, "video_views_p_100": {"type": "integer", "index": 16, "name": "video_views_p_100", "comment": null}, "shares": {"type": "integer", "index": 17, "name": "shares", "comment": null}, "real_time_conversion_rate": {"type": "double precision", "index": 18, "name": "real_time_conversion_rate", "comment": null}, "cost_per_secondary_goal_result": {"type": "text", "index": 19, "name": "cost_per_secondary_goal_result", "comment": null}, "secondary_goal_result_rate": {"type": "text", "index": 20, "name": "secondary_goal_result_rate", "comment": null}, "clicks": {"type": "integer", "index": 21, "name": "clicks", "comment": null}, "cost_per_1000_reached": {"type": "double precision", "index": 22, "name": "cost_per_1000_reached", "comment": null}, "video_views_p_25": {"type": "integer", "index": 23, "name": "video_views_p_25", "comment": null}, "reach": {"type": "integer", "index": 24, "name": "reach", "comment": null}, "real_time_cost_per_conversion": {"type": "double precision", "index": 25, "name": "real_time_cost_per_conversion", "comment": null}, "profile_visits_rate": {"type": "integer", "index": 26, "name": "profile_visits_rate", "comment": null}, "average_video_play": {"type": "double precision", "index": 27, "name": "average_video_play", "comment": null}, "profile_visits": {"type": "integer", "index": 28, "name": "profile_visits", "comment": null}, "cpm": {"type": "double precision", "index": 29, "name": "cpm", "comment": null}, "ctr": {"type": "double precision", "index": 30, "name": "ctr", "comment": null}, "video_watched_2_s": {"type": "integer", "index": 31, "name": "video_watched_2_s", "comment": null}, "follows": {"type": "integer", "index": 32, "name": "follows", "comment": null}, "result_rate": {"type": "double precision", "index": 33, "name": "result_rate", "comment": null}, "video_watched_6_s": {"type": "integer", "index": 34, "name": "video_watched_6_s", "comment": null}, "secondary_goal_result": {"type": "text", "index": 35, "name": "secondary_goal_result", "comment": null}, "cost_per_result": {"type": "double precision", "index": 36, "name": "cost_per_result", "comment": null}, "average_video_play_per_user": {"type": "double precision", "index": 37, "name": "average_video_play_per_user", "comment": null}, "real_time_result_rate": {"type": "double precision", "index": 38, "name": "real_time_result_rate", "comment": null}, "spend": {"type": "double precision", "index": 39, "name": "spend", "comment": null}, "likes": {"type": "integer", "index": 40, "name": "likes", "comment": null}, "_fivetran_synced": {"type": "text", "index": 41, "name": "_fivetran_synced", "comment": null}}, "stats": {"has_stats": {"id": "has_stats", "label": "Has Stats?", "value": false, "include": false, "description": "Indicates whether there are statistics for this table"}}, "unique_id": "seed.tiktok_ads_source_integration_tests.tiktok_campaign_report_hourly_data"}, "model.tiktok_ads_source.stg_tiktok_ads__ad_group_history": {"metadata": {"type": "BASE TABLE", "schema": "tiktok_ads_source_integration_tests_1_stg_tiktok_ads", "name": "stg_tiktok_ads__ad_group_history", "database": "postgres", "comment": null, "owner": "pguser"}, "columns": {"ad_group_id": {"type": "integer", "index": 1, "name": "ad_group_id", "comment": null}, "updated_at": {"type": "timestamp without time zone", "index": 2, "name": "updated_at", "comment": null}, "advertiser_id": {"type": "integer", "index": 3, "name": "advertiser_id", "comment": null}, "campaign_id": {"type": "integer", "index": 4, "name": "campaign_id", "comment": null}, "action_days": {"type": "integer", "index": 5, "name": "action_days", "comment": null}, "action_categories": {"type": "text", "index": 6, "name": "action_categories", "comment": null}, "ad_group_name": {"type": "text", "index": 7, "name": "ad_group_name", "comment": null}, "age": {"type": "text", "index": 8, "name": "age", "comment": null}, "audience_type": {"type": "integer", "index": 9, "name": "audience_type", "comment": null}, "budget": {"type": "integer", "index": 10, "name": "budget", "comment": null}, "category": {"type": "integer", "index": 11, "name": "category", "comment": null}, "display_name": {"type": "integer", "index": 12, "name": "display_name", "comment": null}, "interest_category": {"type": "text", "index": 13, "name": "interest_category", "comment": null}, "frequency": {"type": "integer", "index": 14, "name": "frequency", "comment": null}, "frequency_schedule": {"type": "integer", "index": 15, "name": "frequency_schedule", "comment": null}, "gender": {"type": "text", "index": 16, "name": "gender", "comment": null}, "languages": {"type": "text", "index": 17, "name": "languages", "comment": null}, "landing_page_url": {"type": "integer", "index": 18, "name": "landing_page_url", "comment": null}, "is_most_recent_record": {"type": "boolean", "index": 19, "name": "is_most_recent_record", "comment": null}}, "stats": {"has_stats": {"id": "has_stats", "label": "Has Stats?", "value": false, "include": false, "description": "Indicates whether there are statistics for this table"}}, "unique_id": "model.tiktok_ads_source.stg_tiktok_ads__ad_group_history"}, "model.tiktok_ads_source.stg_tiktok_ads__ad_group_history_tmp": {"metadata": {"type": "VIEW", "schema": "tiktok_ads_source_integration_tests_1_stg_tiktok_ads", "name": "stg_tiktok_ads__ad_group_history_tmp", "database": "postgres", "comment": null, "owner": "pguser"}, "columns": {"adgroup_id": {"type": "integer", "index": 1, "name": "adgroup_id", "comment": null}, "updated_at": {"type": "text", "index": 2, "name": "updated_at", "comment": null}, "advertiser_id": {"type": "integer", "index": 3, "name": "advertiser_id", "comment": null}, "campaign_id": {"type": "integer", "index": 4, "name": "campaign_id", "comment": null}, "create_time": {"type": "text", "index": 5, "name": "create_time", "comment": null}, "adgroup_name": {"type": "text", "index": 6, "name": "adgroup_name", "comment": null}, "placement_type": {"type": "text", "index": 7, "name": "placement_type", "comment": null}, "profile_image": {"type": "integer", "index": 8, "name": "profile_image", "comment": null}, "landing_page_url": {"type": "integer", "index": 9, "name": "landing_page_url", "comment": null}, "display_name": {"type": "integer", "index": 10, "name": "display_name", "comment": null}, "app_type": {"type": "integer", "index": 11, "name": "app_type", "comment": null}, "app_download_url": {"type": "integer", "index": 12, "name": "app_download_url", "comment": null}, "app_name": {"type": "integer", "index": 13, "name": "app_name", "comment": null}, "external_action": {"type": "text", "index": 14, "name": "external_action", "comment": null}, "deep_external_action": {"type": "integer", "index": 15, "name": "deep_external_action", "comment": null}, "creative_material_mode": {"type": "text", "index": 16, "name": "creative_material_mode", "comment": null}, "audience_type": {"type": "integer", "index": 17, "name": "audience_type", "comment": null}, "gender": {"type": "text", "index": 18, "name": "gender", "comment": null}, "android_osv": {"type": "integer", "index": 19, "name": "android_osv", "comment": null}, "ios_osv": {"type": "integer", "index": 20, "name": "ios_osv", "comment": null}, "budget_mode": {"type": "text", "index": 21, "name": "budget_mode", "comment": null}, "schedule_type": {"type": "text", "index": 22, "name": "schedule_type", "comment": null}, "dayparting": {"type": "integer", "index": 23, "name": "dayparting", "comment": null}, "optimize_goal": {"type": "text", "index": 24, "name": "optimize_goal", "comment": null}, "cpv_video_duration": {"type": "integer", "index": 25, "name": "cpv_video_duration", "comment": null}, "pacing": {"type": "text", "index": 26, "name": "pacing", "comment": null}, "billing_event": {"type": "text", "index": 27, "name": "billing_event", "comment": null}, "bid_type": {"type": "text", "index": 28, "name": "bid_type", "comment": null}, "deep_bid_type": {"type": "integer", "index": 29, "name": "deep_bid_type", "comment": null}, "impression_tracking_url": {"type": "integer", "index": 30, "name": "impression_tracking_url", "comment": null}, "click_tracking_url": {"type": "integer", "index": 31, "name": "click_tracking_url", "comment": null}, "status": {"type": "text", "index": 32, "name": "status", "comment": null}, "opt_status": {"type": "text", "index": 33, "name": "opt_status", "comment": null}, "statistic_type": {"type": "integer", "index": 34, "name": "statistic_type", "comment": null}, "video_download": {"type": "text", "index": 35, "name": "video_download", "comment": null}, "open_url": {"type": "integer", "index": 36, "name": "open_url", "comment": null}, "open_url_type": {"type": "integer", "index": 37, "name": "open_url_type", "comment": null}, "fallback_type": {"type": "integer", "index": 38, "name": "fallback_type", "comment": null}, "budget": {"type": "integer", "index": 39, "name": "budget", "comment": null}, "bid": {"type": "integer", "index": 40, "name": "bid", "comment": null}, "conversion_bid": {"type": "integer", "index": 41, "name": "conversion_bid", "comment": null}, "deep_cpabid": {"type": "integer", "index": 42, "name": "deep_cpabid", "comment": null}, "schedule_start_time": {"type": "text", "index": 43, "name": "schedule_start_time", "comment": null}, "schedule_end_time": {"type": "text", "index": 44, "name": "schedule_end_time", "comment": null}, "app_id": {"type": "integer", "index": 45, "name": "app_id", "comment": null}, "pixel_id": {"type": "integer", "index": 46, "name": "pixel_id", "comment": null}, "enable_inventory_filter": {"type": "boolean", "index": 47, "name": "enable_inventory_filter", "comment": null}, "is_hfss": {"type": "boolean", "index": 48, "name": "is_hfss", "comment": null}, "is_new_structure": {"type": "boolean", "index": 49, "name": "is_new_structure", "comment": null}, "category": {"type": "integer", "index": 50, "name": "category", "comment": null}, "is_comment_disable": {"type": "integer", "index": 51, "name": "is_comment_disable", "comment": null}, "skip_learning_phase": {"type": "integer", "index": 52, "name": "skip_learning_phase", "comment": null}, "frequency": {"type": "integer", "index": 53, "name": "frequency", "comment": null}, "frequency_schedule": {"type": "integer", "index": 54, "name": "frequency_schedule", "comment": null}, "action_days": {"type": "integer", "index": 55, "name": "action_days", "comment": null}, "audience": {"type": "text", "index": 56, "name": "audience", "comment": null}, "excluded_audience": {"type": "text", "index": 57, "name": "excluded_audience", "comment": null}, "location": {"type": "text", "index": 58, "name": "location", "comment": null}, "interest_category_v_2": {"type": "text", "index": 59, "name": "interest_category_v_2", "comment": null}, "pangle_block_app_list_id": {"type": "text", "index": 60, "name": "pangle_block_app_list_id", "comment": null}, "action_categories": {"type": "text", "index": 61, "name": "action_categories", "comment": null}, "placement": {"type": "text", "index": 62, "name": "placement", "comment": null}, "keywords": {"type": "integer", "index": 63, "name": "keywords", "comment": null}, "age": {"type": "text", "index": 64, "name": "age", "comment": null}, "languages": {"type": "text", "index": 65, "name": "languages", "comment": null}, "operation_system": {"type": "text", "index": 66, "name": "operation_system", "comment": null}, "connection_type": {"type": "text", "index": 67, "name": "connection_type", "comment": null}, "carriers": {"type": "text", "index": 68, "name": "carriers", "comment": null}, "video_actions": {"type": "text", "index": 69, "name": "video_actions", "comment": null}, "package": {"type": "integer", "index": 70, "name": "package", "comment": null}, "_fivetran_synced": {"type": "text", "index": 71, "name": "_fivetran_synced", "comment": null}}, "stats": {"has_stats": {"id": "has_stats", "label": "Has Stats?", "value": false, "include": false, "description": "Indicates whether there are statistics for this table"}}, "unique_id": "model.tiktok_ads_source.stg_tiktok_ads__ad_group_history_tmp"}, "model.tiktok_ads_source.stg_tiktok_ads__ad_group_report_hourly": {"metadata": {"type": "BASE TABLE", "schema": "tiktok_ads_source_integration_tests_1_stg_tiktok_ads", "name": "stg_tiktok_ads__ad_group_report_hourly", "database": "postgres", "comment": null, "owner": "pguser"}, "columns": {"ad_group_id": {"type": "integer", "index": 1, "name": "ad_group_id", "comment": null}, "stat_time_hour": {"type": "timestamp without time zone", "index": 2, "name": "stat_time_hour", "comment": null}, "cpc": {"type": "double precision", "index": 3, "name": "cpc", "comment": null}, "cpm": {"type": "double precision", "index": 4, "name": "cpm", "comment": null}, "ctr": {"type": "double precision", "index": 5, "name": "ctr", "comment": null}, "impressions": {"type": "integer", "index": 6, "name": "impressions", "comment": null}, "clicks": {"type": "integer", "index": 7, "name": "clicks", "comment": null}, "spend": {"type": "double precision", "index": 8, "name": "spend", "comment": null}, "reach": {"type": "integer", "index": 9, "name": "reach", "comment": null}, "conversion": {"type": "integer", "index": 10, "name": "conversion", "comment": null}, "cost_per_conversion": {"type": "double precision", "index": 11, "name": "cost_per_conversion", "comment": null}, "conversion_rate": {"type": "integer", "index": 12, "name": "conversion_rate", "comment": null}, "likes": {"type": "integer", "index": 13, "name": "likes", "comment": null}, "comments": {"type": "integer", "index": 14, "name": "comments", "comment": null}, "shares": {"type": "integer", "index": 15, "name": "shares", "comment": null}, "profile_visits": {"type": "integer", "index": 16, "name": "profile_visits", "comment": null}, "follows": {"type": "integer", "index": 17, "name": "follows", "comment": null}, "video_play_actions": {"type": "integer", "index": 18, "name": "video_play_actions", "comment": null}, "video_watched_2_s": {"type": "integer", "index": 19, "name": "video_watched_2_s", "comment": null}, "video_watched_6_s": {"type": "integer", "index": 20, "name": "video_watched_6_s", "comment": null}, "video_views_p_25": {"type": "integer", "index": 21, "name": "video_views_p_25", "comment": null}, "video_views_p_50": {"type": "integer", "index": 22, "name": "video_views_p_50", "comment": null}, "video_views_p_75": {"type": "integer", "index": 23, "name": "video_views_p_75", "comment": null}, "average_video_play": {"type": "double precision", "index": 24, "name": "average_video_play", "comment": null}, "average_video_play_per_user": {"type": "double precision", "index": 25, "name": "average_video_play_per_user", "comment": null}}, "stats": {"has_stats": {"id": "has_stats", "label": "Has Stats?", "value": false, "include": false, "description": "Indicates whether there are statistics for this table"}}, "unique_id": "model.tiktok_ads_source.stg_tiktok_ads__ad_group_report_hourly"}, "model.tiktok_ads_source.stg_tiktok_ads__ad_group_report_hourly_tmp": {"metadata": {"type": "VIEW", "schema": "tiktok_ads_source_integration_tests_1_stg_tiktok_ads", "name": "stg_tiktok_ads__ad_group_report_hourly_tmp", "database": "postgres", "comment": null, "owner": "pguser"}, "columns": {"adgroup_id": {"type": "integer", "index": 1, "name": "adgroup_id", "comment": null}, "stat_time_hour": {"type": "timestamp without time zone", "index": 2, "name": "stat_time_hour", "comment": null}, "cost_per_conversion": {"type": "double precision", "index": 3, "name": "cost_per_conversion", "comment": null}, "real_time_conversion": {"type": "integer", "index": 4, "name": "real_time_conversion", "comment": null}, "cpc": {"type": "double precision", "index": 5, "name": "cpc", "comment": null}, "video_play_actions": {"type": "integer", "index": 6, "name": "video_play_actions", "comment": null}, "conversion_rate": {"type": "integer", "index": 7, "name": "conversion_rate", "comment": null}, "video_views_p_75": {"type": "integer", "index": 8, "name": "video_views_p_75", "comment": null}, "result": {"type": "integer", "index": 9, "name": "result", "comment": null}, "video_views_p_50": {"type": "integer", "index": 10, "name": "video_views_p_50", "comment": null}, "impressions": {"type": "integer", "index": 11, "name": "impressions", "comment": null}, "comments": {"type": "integer", "index": 12, "name": "comments", "comment": null}, "real_time_cost_per_result": {"type": "double precision", "index": 13, "name": "real_time_cost_per_result", "comment": null}, "conversion": {"type": "integer", "index": 14, "name": "conversion", "comment": null}, "real_time_result": {"type": "integer", "index": 15, "name": "real_time_result", "comment": null}, "video_views_p_100": {"type": "integer", "index": 16, "name": "video_views_p_100", "comment": null}, "shares": {"type": "integer", "index": 17, "name": "shares", "comment": null}, "real_time_conversion_rate": {"type": "double precision", "index": 18, "name": "real_time_conversion_rate", "comment": null}, "cost_per_secondary_goal_result": {"type": "text", "index": 19, "name": "cost_per_secondary_goal_result", "comment": null}, "secondary_goal_result_rate": {"type": "text", "index": 20, "name": "secondary_goal_result_rate", "comment": null}, "clicks": {"type": "integer", "index": 21, "name": "clicks", "comment": null}, "cost_per_1000_reached": {"type": "double precision", "index": 22, "name": "cost_per_1000_reached", "comment": null}, "video_views_p_25": {"type": "integer", "index": 23, "name": "video_views_p_25", "comment": null}, "reach": {"type": "integer", "index": 24, "name": "reach", "comment": null}, "real_time_cost_per_conversion": {"type": "double precision", "index": 25, "name": "real_time_cost_per_conversion", "comment": null}, "profile_visits_rate": {"type": "integer", "index": 26, "name": "profile_visits_rate", "comment": null}, "average_video_play": {"type": "double precision", "index": 27, "name": "average_video_play", "comment": null}, "profile_visits": {"type": "integer", "index": 28, "name": "profile_visits", "comment": null}, "cpm": {"type": "double precision", "index": 29, "name": "cpm", "comment": null}, "ctr": {"type": "double precision", "index": 30, "name": "ctr", "comment": null}, "video_watched_2_s": {"type": "integer", "index": 31, "name": "video_watched_2_s", "comment": null}, "follows": {"type": "integer", "index": 32, "name": "follows", "comment": null}, "result_rate": {"type": "double precision", "index": 33, "name": "result_rate", "comment": null}, "video_watched_6_s": {"type": "integer", "index": 34, "name": "video_watched_6_s", "comment": null}, "secondary_goal_result": {"type": "text", "index": 35, "name": "secondary_goal_result", "comment": null}, "cost_per_result": {"type": "double precision", "index": 36, "name": "cost_per_result", "comment": null}, "average_video_play_per_user": {"type": "double precision", "index": 37, "name": "average_video_play_per_user", "comment": null}, "real_time_result_rate": {"type": "double precision", "index": 38, "name": "real_time_result_rate", "comment": null}, "spend": {"type": "double precision", "index": 39, "name": "spend", "comment": null}, "likes": {"type": "integer", "index": 40, "name": "likes", "comment": null}, "_fivetran_synced": {"type": "text", "index": 41, "name": "_fivetran_synced", "comment": null}}, "stats": {"has_stats": {"id": "has_stats", "label": "Has Stats?", "value": false, "include": false, "description": "Indicates whether there are statistics for this table"}}, "unique_id": "model.tiktok_ads_source.stg_tiktok_ads__ad_group_report_hourly_tmp"}, "model.tiktok_ads_source.stg_tiktok_ads__ad_history": {"metadata": {"type": "BASE TABLE", "schema": "tiktok_ads_source_integration_tests_1_stg_tiktok_ads", "name": "stg_tiktok_ads__ad_history", "database": "postgres", "comment": null, "owner": "pguser"}, "columns": {"ad_id": {"type": "integer", "index": 1, "name": "ad_id", "comment": null}, "updated_at": {"type": "timestamp without time zone", "index": 2, "name": "updated_at", "comment": null}, "ad_group_id": {"type": "integer", "index": 3, "name": "ad_group_id", "comment": null}, "advertiser_id": {"type": "integer", "index": 4, "name": "advertiser_id", "comment": null}, "campaign_id": {"type": "integer", "index": 5, "name": "campaign_id", "comment": null}, "ad_name": {"type": "text", "index": 6, "name": "ad_name", "comment": null}, "call_to_action": {"type": "text", "index": 7, "name": "call_to_action", "comment": null}, "click_tracking_url": {"type": "integer", "index": 8, "name": "click_tracking_url", "comment": null}, "impression_tracking_url": {"type": "integer", "index": 9, "name": "impression_tracking_url", "comment": null}, "base_url": {"type": "text", "index": 10, "name": "base_url", "comment": null}, "url_host": {"type": "character varying", "index": 11, "name": "url_host", "comment": null}, "url_path": {"type": "text", "index": 12, "name": "url_path", "comment": null}, "utm_source": {"type": "text", "index": 13, "name": "utm_source", "comment": null}, "utm_medium": {"type": "text", "index": 14, "name": "utm_medium", "comment": null}, "utm_campaign": {"type": "text", "index": 15, "name": "utm_campaign", "comment": null}, "utm_content": {"type": "text", "index": 16, "name": "utm_content", "comment": null}, "utm_term": {"type": "text", "index": 17, "name": "utm_term", "comment": null}, "landing_page_url": {"type": "text", "index": 18, "name": "landing_page_url", "comment": null}, "is_most_recent_record": {"type": "boolean", "index": 19, "name": "is_most_recent_record", "comment": null}}, "stats": {"has_stats": {"id": "has_stats", "label": "Has Stats?", "value": false, "include": false, "description": "Indicates whether there are statistics for this table"}}, "unique_id": "model.tiktok_ads_source.stg_tiktok_ads__ad_history"}, "model.tiktok_ads_source.stg_tiktok_ads__ad_history_tmp": {"metadata": {"type": "VIEW", "schema": "tiktok_ads_source_integration_tests_1_stg_tiktok_ads", "name": "stg_tiktok_ads__ad_history_tmp", "database": "postgres", "comment": null, "owner": "pguser"}, "columns": {"ad_id": {"type": "integer", "index": 1, "name": "ad_id", "comment": null}, "updated_at": {"type": "text", "index": 2, "name": "updated_at", "comment": null}, "advertiser_id": {"type": "integer", "index": 3, "name": "advertiser_id", "comment": null}, "adgroup_id": {"type": "integer", "index": 4, "name": "adgroup_id", "comment": null}, "campaign_id": {"type": "integer", "index": 5, "name": "campaign_id", "comment": null}, "create_time": {"type": "text", "index": 6, "name": "create_time", "comment": null}, "ad_name": {"type": "text", "index": 7, "name": "ad_name", "comment": null}, "call_to_action": {"type": "text", "index": 8, "name": "call_to_action", "comment": null}, "status": {"type": "text", "index": 9, "name": "status", "comment": null}, "opt_status": {"type": "text", "index": 10, "name": "opt_status", "comment": null}, "ad_text": {"type": "text", "index": 11, "name": "ad_text", "comment": null}, "video_id": {"type": "text", "index": 12, "name": "video_id", "comment": null}, "app_name": {"type": "integer", "index": 13, "name": "app_name", "comment": null}, "open_url": {"type": "integer", "index": 14, "name": "open_url", "comment": null}, "landing_page_url": {"type": "text", "index": 15, "name": "landing_page_url", "comment": null}, "display_name": {"type": "text", "index": 16, "name": "display_name", "comment": null}, "profile_image": {"type": "integer", "index": 17, "name": "profile_image", "comment": null}, "impression_tracking_url": {"type": "integer", "index": 18, "name": "impression_tracking_url", "comment": null}, "click_tracking_url": {"type": "integer", "index": 19, "name": "click_tracking_url", "comment": null}, "playable_url": {"type": "integer", "index": 20, "name": "playable_url", "comment": null}, "is_aco": {"type": "boolean", "index": 21, "name": "is_aco", "comment": null}, "is_creative_authorized": {"type": "boolean", "index": 22, "name": "is_creative_authorized", "comment": null}, "is_new_structure": {"type": "boolean", "index": 23, "name": "is_new_structure", "comment": null}, "image_ids": {"type": "text", "index": 24, "name": "image_ids", "comment": null}, "_fivetran_synced": {"type": "text", "index": 25, "name": "_fivetran_synced", "comment": null}}, "stats": {"has_stats": {"id": "has_stats", "label": "Has Stats?", "value": false, "include": false, "description": "Indicates whether there are statistics for this table"}}, "unique_id": "model.tiktok_ads_source.stg_tiktok_ads__ad_history_tmp"}, "model.tiktok_ads_source.stg_tiktok_ads__ad_report_hourly": {"metadata": {"type": "BASE TABLE", "schema": "tiktok_ads_source_integration_tests_1_stg_tiktok_ads", "name": "stg_tiktok_ads__ad_report_hourly", "database": "postgres", "comment": null, "owner": "pguser"}, "columns": {"ad_id": {"type": "integer", "index": 1, "name": "ad_id", "comment": null}, "stat_time_hour": {"type": "timestamp without time zone", "index": 2, "name": "stat_time_hour", "comment": null}, "cpc": {"type": "double precision", "index": 3, "name": "cpc", "comment": null}, "cpm": {"type": "double precision", "index": 4, "name": "cpm", "comment": null}, "ctr": {"type": "double precision", "index": 5, "name": "ctr", "comment": null}, "impressions": {"type": "integer", "index": 6, "name": "impressions", "comment": null}, "clicks": {"type": "integer", "index": 7, "name": "clicks", "comment": null}, "spend": {"type": "double precision", "index": 8, "name": "spend", "comment": null}, "reach": {"type": "integer", "index": 9, "name": "reach", "comment": null}, "conversion": {"type": "integer", "index": 10, "name": "conversion", "comment": null}, "cost_per_conversion": {"type": "double precision", "index": 11, "name": "cost_per_conversion", "comment": null}, "conversion_rate": {"type": "integer", "index": 12, "name": "conversion_rate", "comment": null}, "likes": {"type": "integer", "index": 13, "name": "likes", "comment": null}, "comments": {"type": "integer", "index": 14, "name": "comments", "comment": null}, "shares": {"type": "integer", "index": 15, "name": "shares", "comment": null}, "profile_visits": {"type": "integer", "index": 16, "name": "profile_visits", "comment": null}, "follows": {"type": "integer", "index": 17, "name": "follows", "comment": null}, "video_play_actions": {"type": "integer", "index": 18, "name": "video_play_actions", "comment": null}, "video_watched_2_s": {"type": "integer", "index": 19, "name": "video_watched_2_s", "comment": null}, "video_watched_6_s": {"type": "integer", "index": 20, "name": "video_watched_6_s", "comment": null}, "video_views_p_25": {"type": "integer", "index": 21, "name": "video_views_p_25", "comment": null}, "video_views_p_50": {"type": "integer", "index": 22, "name": "video_views_p_50", "comment": null}, "video_views_p_75": {"type": "integer", "index": 23, "name": "video_views_p_75", "comment": null}, "average_video_play": {"type": "double precision", "index": 24, "name": "average_video_play", "comment": null}, "average_video_play_per_user": {"type": "integer", "index": 25, "name": "average_video_play_per_user", "comment": null}}, "stats": {"has_stats": {"id": "has_stats", "label": "Has Stats?", "value": false, "include": false, "description": "Indicates whether there are statistics for this table"}}, "unique_id": "model.tiktok_ads_source.stg_tiktok_ads__ad_report_hourly"}, "model.tiktok_ads_source.stg_tiktok_ads__ad_report_hourly_tmp": {"metadata": {"type": "VIEW", "schema": "tiktok_ads_source_integration_tests_1_stg_tiktok_ads", "name": "stg_tiktok_ads__ad_report_hourly_tmp", "database": "postgres", "comment": null, "owner": "pguser"}, "columns": {"ad_id": {"type": "integer", "index": 1, "name": "ad_id", "comment": null}, "stat_time_hour": {"type": "timestamp without time zone", "index": 2, "name": "stat_time_hour", "comment": null}, "cost_per_conversion": {"type": "double precision", "index": 3, "name": "cost_per_conversion", "comment": null}, "real_time_conversion": {"type": "integer", "index": 4, "name": "real_time_conversion", "comment": null}, "cpc": {"type": "double precision", "index": 5, "name": "cpc", "comment": null}, "video_play_actions": {"type": "integer", "index": 6, "name": "video_play_actions", "comment": null}, "conversion_rate": {"type": "integer", "index": 7, "name": "conversion_rate", "comment": null}, "video_views_p_75": {"type": "integer", "index": 8, "name": "video_views_p_75", "comment": null}, "result": {"type": "integer", "index": 9, "name": "result", "comment": null}, "video_views_p_50": {"type": "integer", "index": 10, "name": "video_views_p_50", "comment": null}, "impressions": {"type": "integer", "index": 11, "name": "impressions", "comment": null}, "comments": {"type": "integer", "index": 12, "name": "comments", "comment": null}, "real_time_cost_per_result": {"type": "double precision", "index": 13, "name": "real_time_cost_per_result", "comment": null}, "conversion": {"type": "integer", "index": 14, "name": "conversion", "comment": null}, "real_time_result": {"type": "integer", "index": 15, "name": "real_time_result", "comment": null}, "video_views_p_100": {"type": "integer", "index": 16, "name": "video_views_p_100", "comment": null}, "shares": {"type": "integer", "index": 17, "name": "shares", "comment": null}, "real_time_conversion_rate": {"type": "integer", "index": 18, "name": "real_time_conversion_rate", "comment": null}, "cost_per_secondary_goal_result": {"type": "text", "index": 19, "name": "cost_per_secondary_goal_result", "comment": null}, "secondary_goal_result_rate": {"type": "text", "index": 20, "name": "secondary_goal_result_rate", "comment": null}, "clicks": {"type": "integer", "index": 21, "name": "clicks", "comment": null}, "cost_per_1000_reached": {"type": "integer", "index": 22, "name": "cost_per_1000_reached", "comment": null}, "video_views_p_25": {"type": "integer", "index": 23, "name": "video_views_p_25", "comment": null}, "reach": {"type": "integer", "index": 24, "name": "reach", "comment": null}, "real_time_cost_per_conversion": {"type": "double precision", "index": 25, "name": "real_time_cost_per_conversion", "comment": null}, "profile_visits_rate": {"type": "integer", "index": 26, "name": "profile_visits_rate", "comment": null}, "average_video_play": {"type": "double precision", "index": 27, "name": "average_video_play", "comment": null}, "profile_visits": {"type": "integer", "index": 28, "name": "profile_visits", "comment": null}, "cpm": {"type": "double precision", "index": 29, "name": "cpm", "comment": null}, "ctr": {"type": "double precision", "index": 30, "name": "ctr", "comment": null}, "video_watched_2_s": {"type": "integer", "index": 31, "name": "video_watched_2_s", "comment": null}, "follows": {"type": "integer", "index": 32, "name": "follows", "comment": null}, "result_rate": {"type": "integer", "index": 33, "name": "result_rate", "comment": null}, "video_watched_6_s": {"type": "integer", "index": 34, "name": "video_watched_6_s", "comment": null}, "secondary_goal_result": {"type": "text", "index": 35, "name": "secondary_goal_result", "comment": null}, "cost_per_result": {"type": "double precision", "index": 36, "name": "cost_per_result", "comment": null}, "average_video_play_per_user": {"type": "integer", "index": 37, "name": "average_video_play_per_user", "comment": null}, "real_time_result_rate": {"type": "integer", "index": 38, "name": "real_time_result_rate", "comment": null}, "spend": {"type": "double precision", "index": 39, "name": "spend", "comment": null}, "likes": {"type": "integer", "index": 40, "name": "likes", "comment": null}, "_fivetran_synced": {"type": "text", "index": 41, "name": "_fivetran_synced", "comment": null}}, "stats": {"has_stats": {"id": "has_stats", "label": "Has Stats?", "value": false, "include": false, "description": "Indicates whether there are statistics for this table"}}, "unique_id": "model.tiktok_ads_source.stg_tiktok_ads__ad_report_hourly_tmp"}, "model.tiktok_ads_source.stg_tiktok_ads__advertiser": {"metadata": {"type": "BASE TABLE", "schema": "tiktok_ads_source_integration_tests_1_stg_tiktok_ads", "name": "stg_tiktok_ads__advertiser", "database": "postgres", "comment": null, "owner": "pguser"}, "columns": {"advertiser_id": {"type": "integer", "index": 1, "name": "advertiser_id", "comment": null}, "address": {"type": "text", "index": 2, "name": "address", "comment": null}, "balance": {"type": "double precision", "index": 3, "name": "balance", "comment": null}, "company": {"type": "text", "index": 4, "name": "company", "comment": null}, "contacter": {"type": "integer", "index": 5, "name": "contacter", "comment": null}, "country": {"type": "text", "index": 6, "name": "country", "comment": null}, "currency": {"type": "text", "index": 7, "name": "currency", "comment": null}, "description": {"type": "text", "index": 8, "name": "description", "comment": null}, "email": {"type": "text", "index": 9, "name": "email", "comment": null}, "industry": {"type": "integer", "index": 10, "name": "industry", "comment": null}, "language": {"type": "text", "index": 11, "name": "language", "comment": null}, "advertiser_name": {"type": "text", "index": 12, "name": "advertiser_name", "comment": null}, "phone_number": {"type": "text", "index": 13, "name": "phone_number", "comment": null}, "telephone": {"type": "integer", "index": 14, "name": "telephone", "comment": null}, "timezone": {"type": "text", "index": 15, "name": "timezone", "comment": null}}, "stats": {"has_stats": {"id": "has_stats", "label": "Has Stats?", "value": false, "include": false, "description": "Indicates whether there are statistics for this table"}}, "unique_id": "model.tiktok_ads_source.stg_tiktok_ads__advertiser"}, "model.tiktok_ads_source.stg_tiktok_ads__advertiser_tmp": {"metadata": {"type": "VIEW", "schema": "tiktok_ads_source_integration_tests_1_stg_tiktok_ads", "name": "stg_tiktok_ads__advertiser_tmp", "database": "postgres", "comment": null, "owner": "pguser"}, "columns": {"id": {"type": "integer", "index": 1, "name": "id", "comment": null}, "name": {"type": "text", "index": 2, "name": "name", "comment": null}, "address": {"type": "text", "index": 3, "name": "address", "comment": null}, "company": {"type": "text", "index": 4, "name": "company", "comment": null}, "contacter": {"type": "integer", "index": 5, "name": "contacter", "comment": null}, "country": {"type": "text", "index": 6, "name": "country", "comment": null}, "currency": {"type": "text", "index": 7, "name": "currency", "comment": null}, "description": {"type": "text", "index": 8, "name": "description", "comment": null}, "email": {"type": "text", "index": 9, "name": "email", "comment": null}, "industry": {"type": "integer", "index": 10, "name": "industry", "comment": null}, "license_no": {"type": "integer", "index": 11, "name": "license_no", "comment": null}, "license_url": {"type": "integer", "index": 12, "name": "license_url", "comment": null}, "promotion_area": {"type": "integer", "index": 13, "name": "promotion_area", "comment": null}, "reason": {"type": "integer", "index": 14, "name": "reason", "comment": null}, "role": {"type": "text", "index": 15, "name": "role", "comment": null}, "status": {"type": "text", "index": 16, "name": "status", "comment": null}, "telephone": {"type": "integer", "index": 17, "name": "telephone", "comment": null}, "timezone": {"type": "text", "index": 18, "name": "timezone", "comment": null}, "balance": {"type": "double precision", "index": 19, "name": "balance", "comment": null}, "create_time": {"type": "text", "index": 20, "name": "create_time", "comment": null}, "language": {"type": "text", "index": 21, "name": "language", "comment": null}, "phone_number": {"type": "text", "index": 22, "name": "phone_number", "comment": null}, "_fivetran_synced": {"type": "text", "index": 23, "name": "_fivetran_synced", "comment": null}}, "stats": {"has_stats": {"id": "has_stats", "label": "Has Stats?", "value": false, "include": false, "description": "Indicates whether there are statistics for this table"}}, "unique_id": "model.tiktok_ads_source.stg_tiktok_ads__advertiser_tmp"}, "model.tiktok_ads_source.stg_tiktok_ads__campaign_history": {"metadata": {"type": "BASE TABLE", "schema": "tiktok_ads_source_integration_tests_1_stg_tiktok_ads", "name": "stg_tiktok_ads__campaign_history", "database": "postgres", "comment": null, "owner": "pguser"}, "columns": {"campaign_id": {"type": "integer", "index": 1, "name": "campaign_id", "comment": null}, "updated_at": {"type": "timestamp without time zone", "index": 2, "name": "updated_at", "comment": null}, "advertiser_id": {"type": "integer", "index": 3, "name": "advertiser_id", "comment": null}, "campaign_name": {"type": "text", "index": 4, "name": "campaign_name", "comment": null}, "campaign_type": {"type": "text", "index": 5, "name": "campaign_type", "comment": null}, "split_test_variable": {"type": "integer", "index": 6, "name": "split_test_variable", "comment": null}, "is_most_recent_record": {"type": "boolean", "index": 7, "name": "is_most_recent_record", "comment": null}}, "stats": {"has_stats": {"id": "has_stats", "label": "Has Stats?", "value": false, "include": false, "description": "Indicates whether there are statistics for this table"}}, "unique_id": "model.tiktok_ads_source.stg_tiktok_ads__campaign_history"}, "model.tiktok_ads_source.stg_tiktok_ads__campaign_history_tmp": {"metadata": {"type": "VIEW", "schema": "tiktok_ads_source_integration_tests_1_stg_tiktok_ads", "name": "stg_tiktok_ads__campaign_history_tmp", "database": "postgres", "comment": null, "owner": "pguser"}, "columns": {"campaign_id": {"type": "integer", "index": 1, "name": "campaign_id", "comment": null}, "updated_at": {"type": "text", "index": 2, "name": "updated_at", "comment": null}, "advertiser_id": {"type": "integer", "index": 3, "name": "advertiser_id", "comment": null}, "campaign_name": {"type": "text", "index": 4, "name": "campaign_name", "comment": null}, "campaign_type": {"type": "text", "index": 5, "name": "campaign_type", "comment": null}, "budget": {"type": "integer", "index": 6, "name": "budget", "comment": null}, "budget_mode": {"type": "text", "index": 7, "name": "budget_mode", "comment": null}, "opt_status": {"type": "text", "index": 8, "name": "opt_status", "comment": null}, "objective_type": {"type": "text", "index": 9, "name": "objective_type", "comment": null}, "is_new_structure": {"type": "boolean", "index": 10, "name": "is_new_structure", "comment": null}, "split_test_variable": {"type": "integer", "index": 11, "name": "split_test_variable", "comment": null}, "create_time": {"type": "text", "index": 12, "name": "create_time", "comment": null}, "_fivetran_synced": {"type": "text", "index": 13, "name": "_fivetran_synced", "comment": null}}, "stats": {"has_stats": {"id": "has_stats", "label": "Has Stats?", "value": false, "include": false, "description": "Indicates whether there are statistics for this table"}}, "unique_id": "model.tiktok_ads_source.stg_tiktok_ads__campaign_history_tmp"}, "model.tiktok_ads_source.stg_tiktok_ads__campaign_report_hourly": {"metadata": {"type": "BASE TABLE", "schema": "tiktok_ads_source_integration_tests_1_stg_tiktok_ads", "name": "stg_tiktok_ads__campaign_report_hourly", "database": "postgres", "comment": null, "owner": "pguser"}, "columns": {"campaign_id": {"type": "integer", "index": 1, "name": "campaign_id", "comment": null}, "stat_time_hour": {"type": "timestamp without time zone", "index": 2, "name": "stat_time_hour", "comment": null}, "cpc": {"type": "double precision", "index": 3, "name": "cpc", "comment": null}, "cpm": {"type": "double precision", "index": 4, "name": "cpm", "comment": null}, "ctr": {"type": "double precision", "index": 5, "name": "ctr", "comment": null}, "impressions": {"type": "integer", "index": 6, "name": "impressions", "comment": null}, "clicks": {"type": "integer", "index": 7, "name": "clicks", "comment": null}, "spend": {"type": "double precision", "index": 8, "name": "spend", "comment": null}, "reach": {"type": "integer", "index": 9, "name": "reach", "comment": null}, "conversion": {"type": "integer", "index": 10, "name": "conversion", "comment": null}, "cost_per_conversion": {"type": "double precision", "index": 11, "name": "cost_per_conversion", "comment": null}, "conversion_rate": {"type": "integer", "index": 12, "name": "conversion_rate", "comment": null}, "likes": {"type": "integer", "index": 13, "name": "likes", "comment": null}, "comments": {"type": "integer", "index": 14, "name": "comments", "comment": null}, "shares": {"type": "integer", "index": 15, "name": "shares", "comment": null}, "profile_visits": {"type": "integer", "index": 16, "name": "profile_visits", "comment": null}, "follows": {"type": "integer", "index": 17, "name": "follows", "comment": null}, "video_play_actions": {"type": "integer", "index": 18, "name": "video_play_actions", "comment": null}, "video_watched_2_s": {"type": "integer", "index": 19, "name": "video_watched_2_s", "comment": null}, "video_watched_6_s": {"type": "integer", "index": 20, "name": "video_watched_6_s", "comment": null}, "video_views_p_25": {"type": "integer", "index": 21, "name": "video_views_p_25", "comment": null}, "video_views_p_50": {"type": "integer", "index": 22, "name": "video_views_p_50", "comment": null}, "video_views_p_75": {"type": "integer", "index": 23, "name": "video_views_p_75", "comment": null}, "average_video_play": {"type": "double precision", "index": 24, "name": "average_video_play", "comment": null}, "average_video_play_per_user": {"type": "double precision", "index": 25, "name": "average_video_play_per_user", "comment": null}}, "stats": {"has_stats": {"id": "has_stats", "label": "Has Stats?", "value": false, "include": false, "description": "Indicates whether there are statistics for this table"}}, "unique_id": "model.tiktok_ads_source.stg_tiktok_ads__campaign_report_hourly"}, "model.tiktok_ads_source.stg_tiktok_ads__campaign_report_hourly_tmp": {"metadata": {"type": "VIEW", "schema": "tiktok_ads_source_integration_tests_1_stg_tiktok_ads", "name": "stg_tiktok_ads__campaign_report_hourly_tmp", "database": "postgres", "comment": null, "owner": "pguser"}, "columns": {"campaign_id": {"type": "integer", "index": 1, "name": "campaign_id", "comment": null}, "stat_time_hour": {"type": "timestamp without time zone", "index": 2, "name": "stat_time_hour", "comment": null}, "cost_per_conversion": {"type": "double precision", "index": 3, "name": "cost_per_conversion", "comment": null}, "real_time_conversion": {"type": "integer", "index": 4, "name": "real_time_conversion", "comment": null}, "cpc": {"type": "double precision", "index": 5, "name": "cpc", "comment": null}, "video_play_actions": {"type": "integer", "index": 6, "name": "video_play_actions", "comment": null}, "conversion_rate": {"type": "integer", "index": 7, "name": "conversion_rate", "comment": null}, "video_views_p_75": {"type": "integer", "index": 8, "name": "video_views_p_75", "comment": null}, "result": {"type": "integer", "index": 9, "name": "result", "comment": null}, "video_views_p_50": {"type": "integer", "index": 10, "name": "video_views_p_50", "comment": null}, "impressions": {"type": "integer", "index": 11, "name": "impressions", "comment": null}, "comments": {"type": "integer", "index": 12, "name": "comments", "comment": null}, "real_time_cost_per_result": {"type": "double precision", "index": 13, "name": "real_time_cost_per_result", "comment": null}, "conversion": {"type": "integer", "index": 14, "name": "conversion", "comment": null}, "real_time_result": {"type": "integer", "index": 15, "name": "real_time_result", "comment": null}, "video_views_p_100": {"type": "integer", "index": 16, "name": "video_views_p_100", "comment": null}, "shares": {"type": "integer", "index": 17, "name": "shares", "comment": null}, "real_time_conversion_rate": {"type": "double precision", "index": 18, "name": "real_time_conversion_rate", "comment": null}, "cost_per_secondary_goal_result": {"type": "text", "index": 19, "name": "cost_per_secondary_goal_result", "comment": null}, "secondary_goal_result_rate": {"type": "text", "index": 20, "name": "secondary_goal_result_rate", "comment": null}, "clicks": {"type": "integer", "index": 21, "name": "clicks", "comment": null}, "cost_per_1000_reached": {"type": "double precision", "index": 22, "name": "cost_per_1000_reached", "comment": null}, "video_views_p_25": {"type": "integer", "index": 23, "name": "video_views_p_25", "comment": null}, "reach": {"type": "integer", "index": 24, "name": "reach", "comment": null}, "real_time_cost_per_conversion": {"type": "double precision", "index": 25, "name": "real_time_cost_per_conversion", "comment": null}, "profile_visits_rate": {"type": "integer", "index": 26, "name": "profile_visits_rate", "comment": null}, "average_video_play": {"type": "double precision", "index": 27, "name": "average_video_play", "comment": null}, "profile_visits": {"type": "integer", "index": 28, "name": "profile_visits", "comment": null}, "cpm": {"type": "double precision", "index": 29, "name": "cpm", "comment": null}, "ctr": {"type": "double precision", "index": 30, "name": "ctr", "comment": null}, "video_watched_2_s": {"type": "integer", "index": 31, "name": "video_watched_2_s", "comment": null}, "follows": {"type": "integer", "index": 32, "name": "follows", "comment": null}, "result_rate": {"type": "double precision", "index": 33, "name": "result_rate", "comment": null}, "video_watched_6_s": {"type": "integer", "index": 34, "name": "video_watched_6_s", "comment": null}, "secondary_goal_result": {"type": "text", "index": 35, "name": "secondary_goal_result", "comment": null}, "cost_per_result": {"type": "double precision", "index": 36, "name": "cost_per_result", "comment": null}, "average_video_play_per_user": {"type": "double precision", "index": 37, "name": "average_video_play_per_user", "comment": null}, "real_time_result_rate": {"type": "double precision", "index": 38, "name": "real_time_result_rate", "comment": null}, "spend": {"type": "double precision", "index": 39, "name": "spend", "comment": null}, "likes": {"type": "integer", "index": 40, "name": "likes", "comment": null}, "_fivetran_synced": {"type": "text", "index": 41, "name": "_fivetran_synced", "comment": null}}, "stats": {"has_stats": {"id": "has_stats", "label": "Has Stats?", "value": false, "include": false, "description": "Indicates whether there are statistics for this table"}}, "unique_id": "model.tiktok_ads_source.stg_tiktok_ads__campaign_report_hourly_tmp"}}, "sources": {"source.tiktok_ads_source.tiktok_ads.ad_history": {"metadata": {"type": "BASE TABLE", "schema": "tiktok_ads_source_integration_tests_1", "name": "tiktok_ad_history_data", "database": "postgres", "comment": null, "owner": "pguser"}, "columns": {"ad_id": {"type": "integer", "index": 1, "name": "ad_id", "comment": null}, "updated_at": {"type": "text", "index": 2, "name": "updated_at", "comment": null}, "advertiser_id": {"type": "integer", "index": 3, "name": "advertiser_id", "comment": null}, "adgroup_id": {"type": "integer", "index": 4, "name": "adgroup_id", "comment": null}, "campaign_id": {"type": "integer", "index": 5, "name": "campaign_id", "comment": null}, "create_time": {"type": "text", "index": 6, "name": "create_time", "comment": null}, "ad_name": {"type": "text", "index": 7, "name": "ad_name", "comment": null}, "call_to_action": {"type": "text", "index": 8, "name": "call_to_action", "comment": null}, "status": {"type": "text", "index": 9, "name": "status", "comment": null}, "opt_status": {"type": "text", "index": 10, "name": "opt_status", "comment": null}, "ad_text": {"type": "text", "index": 11, "name": "ad_text", "comment": null}, "video_id": {"type": "text", "index": 12, "name": "video_id", "comment": null}, "app_name": {"type": "integer", "index": 13, "name": "app_name", "comment": null}, "open_url": {"type": "integer", "index": 14, "name": "open_url", "comment": null}, "landing_page_url": {"type": "text", "index": 15, "name": "landing_page_url", "comment": null}, "display_name": {"type": "text", "index": 16, "name": "display_name", "comment": null}, "profile_image": {"type": "integer", "index": 17, "name": "profile_image", "comment": null}, "impression_tracking_url": {"type": "integer", "index": 18, "name": "impression_tracking_url", "comment": null}, "click_tracking_url": {"type": "integer", "index": 19, "name": "click_tracking_url", "comment": null}, "playable_url": {"type": "integer", "index": 20, "name": "playable_url", "comment": null}, "is_aco": {"type": "boolean", "index": 21, "name": "is_aco", "comment": null}, "is_creative_authorized": {"type": "boolean", "index": 22, "name": "is_creative_authorized", "comment": null}, "is_new_structure": {"type": "boolean", "index": 23, "name": "is_new_structure", "comment": null}, "image_ids": {"type": "text", "index": 24, "name": "image_ids", "comment": null}, "_fivetran_synced": {"type": "text", "index": 25, "name": "_fivetran_synced", "comment": null}}, "stats": {"has_stats": {"id": "has_stats", "label": "Has Stats?", "value": false, "include": false, "description": "Indicates whether there are statistics for this table"}}, "unique_id": "source.tiktok_ads_source.tiktok_ads.ad_history"}, "source.tiktok_ads_source.tiktok_ads.ad_report_hourly": {"metadata": {"type": "BASE TABLE", "schema": "tiktok_ads_source_integration_tests_1", "name": "tiktok_ad_report_hourly_data", "database": "postgres", "comment": null, "owner": "pguser"}, "columns": {"ad_id": {"type": "integer", "index": 1, "name": "ad_id", "comment": null}, "stat_time_hour": {"type": "timestamp without time zone", "index": 2, "name": "stat_time_hour", "comment": null}, "cost_per_conversion": {"type": "double precision", "index": 3, "name": "cost_per_conversion", "comment": null}, "real_time_conversion": {"type": "integer", "index": 4, "name": "real_time_conversion", "comment": null}, "cpc": {"type": "double precision", "index": 5, "name": "cpc", "comment": null}, "video_play_actions": {"type": "integer", "index": 6, "name": "video_play_actions", "comment": null}, "conversion_rate": {"type": "integer", "index": 7, "name": "conversion_rate", "comment": null}, "video_views_p_75": {"type": "integer", "index": 8, "name": "video_views_p_75", "comment": null}, "result": {"type": "integer", "index": 9, "name": "result", "comment": null}, "video_views_p_50": {"type": "integer", "index": 10, "name": "video_views_p_50", "comment": null}, "impressions": {"type": "integer", "index": 11, "name": "impressions", "comment": null}, "comments": {"type": "integer", "index": 12, "name": "comments", "comment": null}, "real_time_cost_per_result": {"type": "double precision", "index": 13, "name": "real_time_cost_per_result", "comment": null}, "conversion": {"type": "integer", "index": 14, "name": "conversion", "comment": null}, "real_time_result": {"type": "integer", "index": 15, "name": "real_time_result", "comment": null}, "video_views_p_100": {"type": "integer", "index": 16, "name": "video_views_p_100", "comment": null}, "shares": {"type": "integer", "index": 17, "name": "shares", "comment": null}, "real_time_conversion_rate": {"type": "integer", "index": 18, "name": "real_time_conversion_rate", "comment": null}, "cost_per_secondary_goal_result": {"type": "text", "index": 19, "name": "cost_per_secondary_goal_result", "comment": null}, "secondary_goal_result_rate": {"type": "text", "index": 20, "name": "secondary_goal_result_rate", "comment": null}, "clicks": {"type": "integer", "index": 21, "name": "clicks", "comment": null}, "cost_per_1000_reached": {"type": "integer", "index": 22, "name": "cost_per_1000_reached", "comment": null}, "video_views_p_25": {"type": "integer", "index": 23, "name": "video_views_p_25", "comment": null}, "reach": {"type": "integer", "index": 24, "name": "reach", "comment": null}, "real_time_cost_per_conversion": {"type": "double precision", "index": 25, "name": "real_time_cost_per_conversion", "comment": null}, "profile_visits_rate": {"type": "integer", "index": 26, "name": "profile_visits_rate", "comment": null}, "average_video_play": {"type": "double precision", "index": 27, "name": "average_video_play", "comment": null}, "profile_visits": {"type": "integer", "index": 28, "name": "profile_visits", "comment": null}, "cpm": {"type": "double precision", "index": 29, "name": "cpm", "comment": null}, "ctr": {"type": "double precision", "index": 30, "name": "ctr", "comment": null}, "video_watched_2_s": {"type": "integer", "index": 31, "name": "video_watched_2_s", "comment": null}, "follows": {"type": "integer", "index": 32, "name": "follows", "comment": null}, "result_rate": {"type": "integer", "index": 33, "name": "result_rate", "comment": null}, "video_watched_6_s": {"type": "integer", "index": 34, "name": "video_watched_6_s", "comment": null}, "secondary_goal_result": {"type": "text", "index": 35, "name": "secondary_goal_result", "comment": null}, "cost_per_result": {"type": "double precision", "index": 36, "name": "cost_per_result", "comment": null}, "average_video_play_per_user": {"type": "integer", "index": 37, "name": "average_video_play_per_user", "comment": null}, "real_time_result_rate": {"type": "integer", "index": 38, "name": "real_time_result_rate", "comment": null}, "spend": {"type": "double precision", "index": 39, "name": "spend", "comment": null}, "likes": {"type": "integer", "index": 40, "name": "likes", "comment": null}, "_fivetran_synced": {"type": "text", "index": 41, "name": "_fivetran_synced", "comment": null}}, "stats": {"has_stats": {"id": "has_stats", "label": "Has Stats?", "value": false, "include": false, "description": "Indicates whether there are statistics for this table"}}, "unique_id": "source.tiktok_ads_source.tiktok_ads.ad_report_hourly"}, "source.tiktok_ads_source.tiktok_ads.adgroup_history": {"metadata": {"type": "BASE TABLE", "schema": "tiktok_ads_source_integration_tests_1", "name": "tiktok_adgroup_history_data", "database": "postgres", "comment": null, "owner": "pguser"}, "columns": {"adgroup_id": {"type": "integer", "index": 1, "name": "adgroup_id", "comment": null}, "updated_at": {"type": "text", "index": 2, "name": "updated_at", "comment": null}, "advertiser_id": {"type": "integer", "index": 3, "name": "advertiser_id", "comment": null}, "campaign_id": {"type": "integer", "index": 4, "name": "campaign_id", "comment": null}, "create_time": {"type": "text", "index": 5, "name": "create_time", "comment": null}, "adgroup_name": {"type": "text", "index": 6, "name": "adgroup_name", "comment": null}, "placement_type": {"type": "text", "index": 7, "name": "placement_type", "comment": null}, "profile_image": {"type": "integer", "index": 8, "name": "profile_image", "comment": null}, "landing_page_url": {"type": "integer", "index": 9, "name": "landing_page_url", "comment": null}, "display_name": {"type": "integer", "index": 10, "name": "display_name", "comment": null}, "app_type": {"type": "integer", "index": 11, "name": "app_type", "comment": null}, "app_download_url": {"type": "integer", "index": 12, "name": "app_download_url", "comment": null}, "app_name": {"type": "integer", "index": 13, "name": "app_name", "comment": null}, "external_action": {"type": "text", "index": 14, "name": "external_action", "comment": null}, "deep_external_action": {"type": "integer", "index": 15, "name": "deep_external_action", "comment": null}, "creative_material_mode": {"type": "text", "index": 16, "name": "creative_material_mode", "comment": null}, "audience_type": {"type": "integer", "index": 17, "name": "audience_type", "comment": null}, "gender": {"type": "text", "index": 18, "name": "gender", "comment": null}, "android_osv": {"type": "integer", "index": 19, "name": "android_osv", "comment": null}, "ios_osv": {"type": "integer", "index": 20, "name": "ios_osv", "comment": null}, "budget_mode": {"type": "text", "index": 21, "name": "budget_mode", "comment": null}, "schedule_type": {"type": "text", "index": 22, "name": "schedule_type", "comment": null}, "dayparting": {"type": "integer", "index": 23, "name": "dayparting", "comment": null}, "optimize_goal": {"type": "text", "index": 24, "name": "optimize_goal", "comment": null}, "cpv_video_duration": {"type": "integer", "index": 25, "name": "cpv_video_duration", "comment": null}, "pacing": {"type": "text", "index": 26, "name": "pacing", "comment": null}, "billing_event": {"type": "text", "index": 27, "name": "billing_event", "comment": null}, "bid_type": {"type": "text", "index": 28, "name": "bid_type", "comment": null}, "deep_bid_type": {"type": "integer", "index": 29, "name": "deep_bid_type", "comment": null}, "impression_tracking_url": {"type": "integer", "index": 30, "name": "impression_tracking_url", "comment": null}, "click_tracking_url": {"type": "integer", "index": 31, "name": "click_tracking_url", "comment": null}, "status": {"type": "text", "index": 32, "name": "status", "comment": null}, "opt_status": {"type": "text", "index": 33, "name": "opt_status", "comment": null}, "statistic_type": {"type": "integer", "index": 34, "name": "statistic_type", "comment": null}, "video_download": {"type": "text", "index": 35, "name": "video_download", "comment": null}, "open_url": {"type": "integer", "index": 36, "name": "open_url", "comment": null}, "open_url_type": {"type": "integer", "index": 37, "name": "open_url_type", "comment": null}, "fallback_type": {"type": "integer", "index": 38, "name": "fallback_type", "comment": null}, "budget": {"type": "integer", "index": 39, "name": "budget", "comment": null}, "bid": {"type": "integer", "index": 40, "name": "bid", "comment": null}, "conversion_bid": {"type": "integer", "index": 41, "name": "conversion_bid", "comment": null}, "deep_cpabid": {"type": "integer", "index": 42, "name": "deep_cpabid", "comment": null}, "schedule_start_time": {"type": "text", "index": 43, "name": "schedule_start_time", "comment": null}, "schedule_end_time": {"type": "text", "index": 44, "name": "schedule_end_time", "comment": null}, "app_id": {"type": "integer", "index": 45, "name": "app_id", "comment": null}, "pixel_id": {"type": "integer", "index": 46, "name": "pixel_id", "comment": null}, "enable_inventory_filter": {"type": "boolean", "index": 47, "name": "enable_inventory_filter", "comment": null}, "is_hfss": {"type": "boolean", "index": 48, "name": "is_hfss", "comment": null}, "is_new_structure": {"type": "boolean", "index": 49, "name": "is_new_structure", "comment": null}, "category": {"type": "integer", "index": 50, "name": "category", "comment": null}, "is_comment_disable": {"type": "integer", "index": 51, "name": "is_comment_disable", "comment": null}, "skip_learning_phase": {"type": "integer", "index": 52, "name": "skip_learning_phase", "comment": null}, "frequency": {"type": "integer", "index": 53, "name": "frequency", "comment": null}, "frequency_schedule": {"type": "integer", "index": 54, "name": "frequency_schedule", "comment": null}, "action_days": {"type": "integer", "index": 55, "name": "action_days", "comment": null}, "audience": {"type": "text", "index": 56, "name": "audience", "comment": null}, "excluded_audience": {"type": "text", "index": 57, "name": "excluded_audience", "comment": null}, "location": {"type": "text", "index": 58, "name": "location", "comment": null}, "interest_category_v_2": {"type": "text", "index": 59, "name": "interest_category_v_2", "comment": null}, "pangle_block_app_list_id": {"type": "text", "index": 60, "name": "pangle_block_app_list_id", "comment": null}, "action_categories": {"type": "text", "index": 61, "name": "action_categories", "comment": null}, "placement": {"type": "text", "index": 62, "name": "placement", "comment": null}, "keywords": {"type": "integer", "index": 63, "name": "keywords", "comment": null}, "age": {"type": "text", "index": 64, "name": "age", "comment": null}, "languages": {"type": "text", "index": 65, "name": "languages", "comment": null}, "operation_system": {"type": "text", "index": 66, "name": "operation_system", "comment": null}, "connection_type": {"type": "text", "index": 67, "name": "connection_type", "comment": null}, "carriers": {"type": "text", "index": 68, "name": "carriers", "comment": null}, "video_actions": {"type": "text", "index": 69, "name": "video_actions", "comment": null}, "package": {"type": "integer", "index": 70, "name": "package", "comment": null}, "_fivetran_synced": {"type": "text", "index": 71, "name": "_fivetran_synced", "comment": null}}, "stats": {"has_stats": {"id": "has_stats", "label": "Has Stats?", "value": false, "include": false, "description": "Indicates whether there are statistics for this table"}}, "unique_id": "source.tiktok_ads_source.tiktok_ads.adgroup_history"}, "source.tiktok_ads_source.tiktok_ads.adgroup_report_hourly": {"metadata": {"type": "BASE TABLE", "schema": "tiktok_ads_source_integration_tests_1", "name": "tiktok_adgroup_report_hourly_data", "database": "postgres", "comment": null, "owner": "pguser"}, "columns": {"adgroup_id": {"type": "integer", "index": 1, "name": "adgroup_id", "comment": null}, "stat_time_hour": {"type": "timestamp without time zone", "index": 2, "name": "stat_time_hour", "comment": null}, "cost_per_conversion": {"type": "double precision", "index": 3, "name": "cost_per_conversion", "comment": null}, "real_time_conversion": {"type": "integer", "index": 4, "name": "real_time_conversion", "comment": null}, "cpc": {"type": "double precision", "index": 5, "name": "cpc", "comment": null}, "video_play_actions": {"type": "integer", "index": 6, "name": "video_play_actions", "comment": null}, "conversion_rate": {"type": "integer", "index": 7, "name": "conversion_rate", "comment": null}, "video_views_p_75": {"type": "integer", "index": 8, "name": "video_views_p_75", "comment": null}, "result": {"type": "integer", "index": 9, "name": "result", "comment": null}, "video_views_p_50": {"type": "integer", "index": 10, "name": "video_views_p_50", "comment": null}, "impressions": {"type": "integer", "index": 11, "name": "impressions", "comment": null}, "comments": {"type": "integer", "index": 12, "name": "comments", "comment": null}, "real_time_cost_per_result": {"type": "double precision", "index": 13, "name": "real_time_cost_per_result", "comment": null}, "conversion": {"type": "integer", "index": 14, "name": "conversion", "comment": null}, "real_time_result": {"type": "integer", "index": 15, "name": "real_time_result", "comment": null}, "video_views_p_100": {"type": "integer", "index": 16, "name": "video_views_p_100", "comment": null}, "shares": {"type": "integer", "index": 17, "name": "shares", "comment": null}, "real_time_conversion_rate": {"type": "double precision", "index": 18, "name": "real_time_conversion_rate", "comment": null}, "cost_per_secondary_goal_result": {"type": "text", "index": 19, "name": "cost_per_secondary_goal_result", "comment": null}, "secondary_goal_result_rate": {"type": "text", "index": 20, "name": "secondary_goal_result_rate", "comment": null}, "clicks": {"type": "integer", "index": 21, "name": "clicks", "comment": null}, "cost_per_1000_reached": {"type": "double precision", "index": 22, "name": "cost_per_1000_reached", "comment": null}, "video_views_p_25": {"type": "integer", "index": 23, "name": "video_views_p_25", "comment": null}, "reach": {"type": "integer", "index": 24, "name": "reach", "comment": null}, "real_time_cost_per_conversion": {"type": "double precision", "index": 25, "name": "real_time_cost_per_conversion", "comment": null}, "profile_visits_rate": {"type": "integer", "index": 26, "name": "profile_visits_rate", "comment": null}, "average_video_play": {"type": "double precision", "index": 27, "name": "average_video_play", "comment": null}, "profile_visits": {"type": "integer", "index": 28, "name": "profile_visits", "comment": null}, "cpm": {"type": "double precision", "index": 29, "name": "cpm", "comment": null}, "ctr": {"type": "double precision", "index": 30, "name": "ctr", "comment": null}, "video_watched_2_s": {"type": "integer", "index": 31, "name": "video_watched_2_s", "comment": null}, "follows": {"type": "integer", "index": 32, "name": "follows", "comment": null}, "result_rate": {"type": "double precision", "index": 33, "name": "result_rate", "comment": null}, "video_watched_6_s": {"type": "integer", "index": 34, "name": "video_watched_6_s", "comment": null}, "secondary_goal_result": {"type": "text", "index": 35, "name": "secondary_goal_result", "comment": null}, "cost_per_result": {"type": "double precision", "index": 36, "name": "cost_per_result", "comment": null}, "average_video_play_per_user": {"type": "double precision", "index": 37, "name": "average_video_play_per_user", "comment": null}, "real_time_result_rate": {"type": "double precision", "index": 38, "name": "real_time_result_rate", "comment": null}, "spend": {"type": "double precision", "index": 39, "name": "spend", "comment": null}, "likes": {"type": "integer", "index": 40, "name": "likes", "comment": null}, "_fivetran_synced": {"type": "text", "index": 41, "name": "_fivetran_synced", "comment": null}}, "stats": {"has_stats": {"id": "has_stats", "label": "Has Stats?", "value": false, "include": false, "description": "Indicates whether there are statistics for this table"}}, "unique_id": "source.tiktok_ads_source.tiktok_ads.adgroup_report_hourly"}, "source.tiktok_ads_source.tiktok_ads.advertiser": {"metadata": {"type": "BASE TABLE", "schema": "tiktok_ads_source_integration_tests_1", "name": "tiktok_advertiser_data", "database": "postgres", "comment": null, "owner": "pguser"}, "columns": {"id": {"type": "integer", "index": 1, "name": "id", "comment": null}, "name": {"type": "text", "index": 2, "name": "name", "comment": null}, "address": {"type": "text", "index": 3, "name": "address", "comment": null}, "company": {"type": "text", "index": 4, "name": "company", "comment": null}, "contacter": {"type": "integer", "index": 5, "name": "contacter", "comment": null}, "country": {"type": "text", "index": 6, "name": "country", "comment": null}, "currency": {"type": "text", "index": 7, "name": "currency", "comment": null}, "description": {"type": "text", "index": 8, "name": "description", "comment": null}, "email": {"type": "text", "index": 9, "name": "email", "comment": null}, "industry": {"type": "integer", "index": 10, "name": "industry", "comment": null}, "license_no": {"type": "integer", "index": 11, "name": "license_no", "comment": null}, "license_url": {"type": "integer", "index": 12, "name": "license_url", "comment": null}, "promotion_area": {"type": "integer", "index": 13, "name": "promotion_area", "comment": null}, "reason": {"type": "integer", "index": 14, "name": "reason", "comment": null}, "role": {"type": "text", "index": 15, "name": "role", "comment": null}, "status": {"type": "text", "index": 16, "name": "status", "comment": null}, "telephone": {"type": "integer", "index": 17, "name": "telephone", "comment": null}, "timezone": {"type": "text", "index": 18, "name": "timezone", "comment": null}, "balance": {"type": "double precision", "index": 19, "name": "balance", "comment": null}, "create_time": {"type": "text", "index": 20, "name": "create_time", "comment": null}, "language": {"type": "text", "index": 21, "name": "language", "comment": null}, "phone_number": {"type": "text", "index": 22, "name": "phone_number", "comment": null}, "_fivetran_synced": {"type": "text", "index": 23, "name": "_fivetran_synced", "comment": null}}, "stats": {"has_stats": {"id": "has_stats", "label": "Has Stats?", "value": false, "include": false, "description": "Indicates whether there are statistics for this table"}}, "unique_id": "source.tiktok_ads_source.tiktok_ads.advertiser"}, "source.tiktok_ads_source.tiktok_ads.campaign_history": {"metadata": {"type": "BASE TABLE", "schema": "tiktok_ads_source_integration_tests_1", "name": "tiktok_campaign_history_data", "database": "postgres", "comment": null, "owner": "pguser"}, "columns": {"campaign_id": {"type": "integer", "index": 1, "name": "campaign_id", "comment": null}, "updated_at": {"type": "text", "index": 2, "name": "updated_at", "comment": null}, "advertiser_id": {"type": "integer", "index": 3, "name": "advertiser_id", "comment": null}, "campaign_name": {"type": "text", "index": 4, "name": "campaign_name", "comment": null}, "campaign_type": {"type": "text", "index": 5, "name": "campaign_type", "comment": null}, "budget": {"type": "integer", "index": 6, "name": "budget", "comment": null}, "budget_mode": {"type": "text", "index": 7, "name": "budget_mode", "comment": null}, "opt_status": {"type": "text", "index": 8, "name": "opt_status", "comment": null}, "objective_type": {"type": "text", "index": 9, "name": "objective_type", "comment": null}, "is_new_structure": {"type": "boolean", "index": 10, "name": "is_new_structure", "comment": null}, "split_test_variable": {"type": "integer", "index": 11, "name": "split_test_variable", "comment": null}, "create_time": {"type": "text", "index": 12, "name": "create_time", "comment": null}, "_fivetran_synced": {"type": "text", "index": 13, "name": "_fivetran_synced", "comment": null}}, "stats": {"has_stats": {"id": "has_stats", "label": "Has Stats?", "value": false, "include": false, "description": "Indicates whether there are statistics for this table"}}, "unique_id": "source.tiktok_ads_source.tiktok_ads.campaign_history"}, "source.tiktok_ads_source.tiktok_ads.campaign_report_hourly": {"metadata": {"type": "BASE TABLE", "schema": "tiktok_ads_source_integration_tests_1", "name": "tiktok_campaign_report_hourly_data", "database": "postgres", "comment": null, "owner": "pguser"}, "columns": {"campaign_id": {"type": "integer", "index": 1, "name": "campaign_id", "comment": null}, "stat_time_hour": {"type": "timestamp without time zone", "index": 2, "name": "stat_time_hour", "comment": null}, "cost_per_conversion": {"type": "double precision", "index": 3, "name": "cost_per_conversion", "comment": null}, "real_time_conversion": {"type": "integer", "index": 4, "name": "real_time_conversion", "comment": null}, "cpc": {"type": "double precision", "index": 5, "name": "cpc", "comment": null}, "video_play_actions": {"type": "integer", "index": 6, "name": "video_play_actions", "comment": null}, "conversion_rate": {"type": "integer", "index": 7, "name": "conversion_rate", "comment": null}, "video_views_p_75": {"type": "integer", "index": 8, "name": "video_views_p_75", "comment": null}, "result": {"type": "integer", "index": 9, "name": "result", "comment": null}, "video_views_p_50": {"type": "integer", "index": 10, "name": "video_views_p_50", "comment": null}, "impressions": {"type": "integer", "index": 11, "name": "impressions", "comment": null}, "comments": {"type": "integer", "index": 12, "name": "comments", "comment": null}, "real_time_cost_per_result": {"type": "double precision", "index": 13, "name": "real_time_cost_per_result", "comment": null}, "conversion": {"type": "integer", "index": 14, "name": "conversion", "comment": null}, "real_time_result": {"type": "integer", "index": 15, "name": "real_time_result", "comment": null}, "video_views_p_100": {"type": "integer", "index": 16, "name": "video_views_p_100", "comment": null}, "shares": {"type": "integer", "index": 17, "name": "shares", "comment": null}, "real_time_conversion_rate": {"type": "double precision", "index": 18, "name": "real_time_conversion_rate", "comment": null}, "cost_per_secondary_goal_result": {"type": "text", "index": 19, "name": "cost_per_secondary_goal_result", "comment": null}, "secondary_goal_result_rate": {"type": "text", "index": 20, "name": "secondary_goal_result_rate", "comment": null}, "clicks": {"type": "integer", "index": 21, "name": "clicks", "comment": null}, "cost_per_1000_reached": {"type": "double precision", "index": 22, "name": "cost_per_1000_reached", "comment": null}, "video_views_p_25": {"type": "integer", "index": 23, "name": "video_views_p_25", "comment": null}, "reach": {"type": "integer", "index": 24, "name": "reach", "comment": null}, "real_time_cost_per_conversion": {"type": "double precision", "index": 25, "name": "real_time_cost_per_conversion", "comment": null}, "profile_visits_rate": {"type": "integer", "index": 26, "name": "profile_visits_rate", "comment": null}, "average_video_play": {"type": "double precision", "index": 27, "name": "average_video_play", "comment": null}, "profile_visits": {"type": "integer", "index": 28, "name": "profile_visits", "comment": null}, "cpm": {"type": "double precision", "index": 29, "name": "cpm", "comment": null}, "ctr": {"type": "double precision", "index": 30, "name": "ctr", "comment": null}, "video_watched_2_s": {"type": "integer", "index": 31, "name": "video_watched_2_s", "comment": null}, "follows": {"type": "integer", "index": 32, "name": "follows", "comment": null}, "result_rate": {"type": "double precision", "index": 33, "name": "result_rate", "comment": null}, "video_watched_6_s": {"type": "integer", "index": 34, "name": "video_watched_6_s", "comment": null}, "secondary_goal_result": {"type": "text", "index": 35, "name": "secondary_goal_result", "comment": null}, "cost_per_result": {"type": "double precision", "index": 36, "name": "cost_per_result", "comment": null}, "average_video_play_per_user": {"type": "double precision", "index": 37, "name": "average_video_play_per_user", "comment": null}, "real_time_result_rate": {"type": "double precision", "index": 38, "name": "real_time_result_rate", "comment": null}, "spend": {"type": "double precision", "index": 39, "name": "spend", "comment": null}, "likes": {"type": "integer", "index": 40, "name": "likes", "comment": null}, "_fivetran_synced": {"type": "text", "index": 41, "name": "_fivetran_synced", "comment": null}}, "stats": {"has_stats": {"id": "has_stats", "label": "Has Stats?", "value": false, "include": false, "description": "Indicates whether there are statistics for this table"}}, "unique_id": "source.tiktok_ads_source.tiktok_ads.campaign_report_hourly"}}, "errors": null} \ No newline at end of file diff --git a/docs/index.html b/docs/index.html index fa8b08b..0c4d0ec 100644 --- a/docs/index.html +++ b/docs/index.html @@ -70,7 +70,7 @@ * (c) 2010-2020 Google LLC. http://angularjs.org * License: MIT */ -!function(e){"use strict";var t={objectMaxDepth:5,urlErrorParamsEnabled:!0};function n(e){if(!L(e))return t;z(e.objectMaxDepth)&&(t.objectMaxDepth=r(e.objectMaxDepth)?e.objectMaxDepth:NaN),z(e.urlErrorParamsEnabled)&&Z(e.urlErrorParamsEnabled)&&(t.urlErrorParamsEnabled=e.urlErrorParamsEnabled)}function r(e){return q(e)&&e>0}function i(e,n){n=n||Error;var r="https://errors.angularjs.org/1.8.2/",i=r.replace(".","\\.")+"[\\s\\S]*",o=new RegExp(i,"g");return function(){var i,a,s=arguments[0],l=arguments[1],c="["+(e?e+":":"")+s+"] ",u=de(arguments,2).map((function(e){return Ve(e,t.objectMaxDepth)}));if(c+=l.replace(/\{\d+\}/g,(function(e){var t=+e.slice(1,-1);return t<u.length?u[t].replace(o,""):e})),c+="\n"+r+(e?e+"/":"")+s,t.urlErrorParamsEnabled)for(a=0,i="?";a<u.length;a++,i="&")c+=i+"p"+a+"="+encodeURIComponent(u[a]);return new n(c)}}var o,a,s,l,c=/^\/(.+)\/([a-z]*)$/,u=Object.prototype.hasOwnProperty,d=function(e){return F(e)?e.toLowerCase():e},f=function(e){return F(e)?e.toUpperCase():e},p=[].slice,h=[].splice,g=[].push,v=Object.prototype.toString,m=Object.getPrototypeOf,b=i("ng"),y=e.angular||(e.angular={}),x=0;function w(e){if(null==e||Y(e))return!1;if(U(e)||F(e)||a&&e instanceof a)return!0;var t="length"in Object(e)&&e.length;return q(t)&&(t>=0&&t-1 in e||"function"==typeof e.item)}function k(e,t,n){var r,i;if(e)if(G(e))for(r in e)"prototype"!==r&&"length"!==r&&"name"!==r&&e.hasOwnProperty(r)&&t.call(n,e[r],r,e);else if(U(e)||w(e)){var o="object"!=typeof e;for(r=0,i=e.length;r<i;r++)(o||r in e)&&t.call(n,e[r],r,e)}else if(e.forEach&&e.forEach!==k)e.forEach(t,n,e);else if(B(e))for(r in e)t.call(n,e[r],r,e);else if("function"==typeof e.hasOwnProperty)for(r in e)e.hasOwnProperty(r)&&t.call(n,e[r],r,e);else for(r in e)u.call(e,r)&&t.call(n,e[r],r,e);return e}function A(e,t,n){for(var r=Object.keys(e).sort(),i=0;i<r.length;i++)t.call(n,e[r[i]],r[i]);return r}function E(e){return function(t,n){e(n,t)}}function S(){return++x}function C(e,t){t?e.$$hashKey=t:delete e.$$hashKey}function $(e,t,n){for(var r=e.$$hashKey,i=0,o=t.length;i<o;++i){var a=t[i];if(L(a)||G(a))for(var s=Object.keys(a),l=0,c=s.length;l<c;l++){var u=s[l],d=a[u];n&&L(d)?V(d)?e[u]=new Date(d.valueOf()):W(d)?e[u]=new RegExp(d):d.nodeName?e[u]=d.cloneNode(!0):te(d)?e[u]=d.clone():"__proto__"!==u&&(L(e[u])||(e[u]=U(d)?[]:{}),$(e[u],[d],!0)):e[u]=d}}return C(e,r),e}function O(e){return $(e,p.call(arguments,1),!1)}function _(e){return $(e,p.call(arguments,1),!0)}function T(e){return parseInt(e,10)}o=e.document.documentMode;var j=Number.isNaN||function(e){return e!=e};function P(e,t){return O(Object.create(e),t)}function D(){}function R(e){return e}function I(e){return function(){return e}}function N(e){return G(e.toString)&&e.toString!==v}function M(e){return void 0===e}function z(e){return void 0!==e}function L(e){return null!==e&&"object"==typeof e}function B(e){return null!==e&&"object"==typeof e&&!m(e)}function F(e){return"string"==typeof e}function q(e){return"number"==typeof e}function V(e){return"[object Date]"===v.call(e)}function U(e){return Array.isArray(e)||e instanceof Array}function H(e){switch(v.call(e)){case"[object Error]":case"[object Exception]":case"[object DOMException]":return!0;default:return e instanceof Error}}function G(e){return"function"==typeof e}function W(e){return"[object RegExp]"===v.call(e)}function Y(e){return e&&e.window===e}function X(e){return e&&e.$evalAsync&&e.$watch}function Z(e){return"boolean"==typeof e}function Q(e){return e&&G(e.then)}D.$inject=[],R.$inject=[];var J=/^\[object (?:Uint8|Uint8Clamped|Uint16|Uint32|Int8|Int16|Int32|Float32|Float64)Array]$/;var K=function(e){return F(e)?e.trim():e},ee=function(e){return e.replace(/([-()[\]{}+?*.$^|,:#<!\\])/g,"\\$1").replace(/\x08/g,"\\x08")};function te(e){return!(!e||!(e.nodeName||e.prop&&e.attr&&e.find))}function ne(e){return d(e.nodeName||e[0]&&e[0].nodeName)}function re(e,t){return-1!==Array.prototype.indexOf.call(e,t)}function ie(e,t){var n=e.indexOf(t);return n>=0&&e.splice(n,1),n}function oe(e,t,n){var i,o,a=[],s=[];if(n=r(n)?n:NaN,t){if((o=t)&&q(o.length)&&J.test(v.call(o))||(i=t,"[object ArrayBuffer]"===v.call(i)))throw b("cpta","Can't copy! TypedArray destination cannot be mutated.");if(e===t)throw b("cpi","Can't copy! Source and destination are identical.");return U(t)?t.length=0:k(t,(function(e,n){"$$hashKey"!==n&&delete t[n]})),a.push(e),s.push(t),l(e,t,n)}return c(e,n);function l(e,t,n){if(--n<0)return"...";var r,i=t.$$hashKey;if(U(e))for(var o=0,a=e.length;o<a;o++)t.push(c(e[o],n));else if(B(e))for(r in e)t[r]=c(e[r],n);else if(e&&"function"==typeof e.hasOwnProperty)for(r in e)e.hasOwnProperty(r)&&(t[r]=c(e[r],n));else for(r in e)u.call(e,r)&&(t[r]=c(e[r],n));return C(t,i),t}function c(e,t){if(!L(e))return e;var n=a.indexOf(e);if(-1!==n)return s[n];if(Y(e)||X(e))throw b("cpws","Can't copy! Making copies of Window or Scope instances is not supported.");var r=!1,i=function(e){switch(v.call(e)){case"[object Int8Array]":case"[object Int16Array]":case"[object Int32Array]":case"[object Float32Array]":case"[object Float64Array]":case"[object Uint8Array]":case"[object Uint8ClampedArray]":case"[object Uint16Array]":case"[object Uint32Array]":return new e.constructor(c(e.buffer),e.byteOffset,e.length);case"[object ArrayBuffer]":if(!e.slice){var t=new ArrayBuffer(e.byteLength);return new Uint8Array(t).set(new Uint8Array(e)),t}return e.slice(0);case"[object Boolean]":case"[object Number]":case"[object String]":case"[object Date]":return new e.constructor(e.valueOf());case"[object RegExp]":var n=new RegExp(e.source,e.toString().match(/[^/]*$/)[0]);return n.lastIndex=e.lastIndex,n;case"[object Blob]":return new e.constructor([e],{type:e.type})}if(G(e.cloneNode))return e.cloneNode(!0)}(e);return void 0===i&&(i=U(e)?[]:Object.create(m(e)),r=!0),a.push(e),s.push(i),r?l(e,i,t):i}}function ae(e,t){return e===t||e!=e&&t!=t}function se(e,t){if(e===t)return!0;if(null===e||null===t)return!1;if(e!=e&&t!=t)return!0;var n,r,i,o=typeof e;if(o===typeof t&&"object"===o){if(!U(e)){if(V(e))return!!V(t)&&ae(e.getTime(),t.getTime());if(W(e))return!!W(t)&&e.toString()===t.toString();if(X(e)||X(t)||Y(e)||Y(t)||U(t)||V(t)||W(t))return!1;for(r in i=Le(),e)if("$"!==r.charAt(0)&&!G(e[r])){if(!se(e[r],t[r]))return!1;i[r]=!0}for(r in t)if(!(r in i)&&"$"!==r.charAt(0)&&z(t[r])&&!G(t[r]))return!1;return!0}if(!U(t))return!1;if((n=e.length)===t.length){for(r=0;r<n;r++)if(!se(e[r],t[r]))return!1;return!0}}return!1}var le=function(){if(!z(le.rules)){var t=e.document.querySelector("[ng-csp]")||e.document.querySelector("[data-ng-csp]");if(t){var n=t.getAttribute("ng-csp")||t.getAttribute("data-ng-csp");le.rules={noUnsafeEval:!n||-1!==n.indexOf("no-unsafe-eval"),noInlineStyle:!n||-1!==n.indexOf("no-inline-style")}}else le.rules={noUnsafeEval:function(){try{return new Function(""),!1}catch(e){return!0}}(),noInlineStyle:!1}}return le.rules},ce=function(){if(z(ce.name_))return ce.name_;var t,n,r,i,o=Se.length;for(n=0;n<o;++n)if(r=Se[n],t=e.document.querySelector("["+r.replace(":","\\:")+"jq]")){i=t.getAttribute(r+"jq");break}return ce.name_=i};function ue(e,t,n){return e.concat(p.call(t,n))}function de(e,t){return p.call(e,t||0)}function fe(e,t){var n=arguments.length>2?de(arguments,2):[];return!G(t)||t instanceof RegExp?t:n.length?function(){return arguments.length?t.apply(e,ue(n,arguments,0)):t.apply(e,n)}:function(){return arguments.length?t.apply(e,arguments):t.call(e)}}function pe(t,n){var r=n;return"string"==typeof t&&"$"===t.charAt(0)&&"$"===t.charAt(1)?r=void 0:Y(n)?r="$WINDOW":n&&e.document===n?r="$DOCUMENT":X(n)&&(r="$SCOPE"),r}function he(e,t){if(!M(e))return q(t)||(t=t?2:null),JSON.stringify(e,pe,t)}function ge(e){return F(e)?JSON.parse(e):e}var ve=/:/g;function me(e,t){e=e.replace(ve,"");var n=Date.parse("Jan 01, 1970 00:00:00 "+e)/6e4;return j(n)?t:n}function be(e,t){return(e=new Date(e.getTime())).setMinutes(e.getMinutes()+t),e}function ye(e,t,n){n=n?-1:1;var r=e.getTimezoneOffset();return be(e,n*(me(t,r)-r))}function xe(e){e=a(e).clone().empty();var t=a("<div></div>").append(e).html();try{return e[0].nodeType===Fe?d(t):t.match(/^(<[^>]+>)/)[1].replace(/^<([\w-]+)/,(function(e,t){return"<"+d(t)}))}catch(e){return d(t)}}function we(e){try{return decodeURIComponent(e)}catch(e){}}function ke(e){var t={};return k((e||"").split("&"),(function(e){var n,r,i;e&&(r=e=e.replace(/\+/g,"%20"),-1!==(n=e.indexOf("="))&&(r=e.substring(0,n),i=e.substring(n+1)),z(r=we(r))&&(i=!z(i)||we(i),u.call(t,r)?U(t[r])?t[r].push(i):t[r]=[t[r],i]:t[r]=i))})),t}function Ae(e){return Ee(e,!0).replace(/%26/gi,"&").replace(/%3D/gi,"=").replace(/%2B/gi,"+")}function Ee(e,t){return encodeURIComponent(e).replace(/%40/gi,"@").replace(/%3A/gi,":").replace(/%24/g,"$").replace(/%2C/gi,",").replace(/%3B/gi,";").replace(/%20/g,t?"%20":"+")}var Se=["ng-","data-ng-","ng:","x-ng-"];var Ce=function(t){var n=t.currentScript;if(!n)return!0;if(!(n instanceof e.HTMLScriptElement||n instanceof e.SVGScriptElement))return!1;var r=n.attributes;return[r.getNamedItem("src"),r.getNamedItem("href"),r.getNamedItem("xlink:href")].every((function(e){if(!e)return!0;if(!e.value)return!1;var n=t.createElement("a");if(n.href=e.value,t.location.origin===n.origin)return!0;switch(n.protocol){case"http:":case"https:":case"ftp:":case"blob:":case"file:":case"data:":return!0;default:return!1}}))}(e.document);function $e(t,n){var r,i,o={};if(k(Se,(function(e){var n=e+"app";!r&&t.hasAttribute&&t.hasAttribute(n)&&(r=t,i=t.getAttribute(n))})),k(Se,(function(e){var n,o=e+"app";!r&&(n=t.querySelector("["+o.replace(":","\\:")+"]"))&&(r=n,i=n.getAttribute(o))})),r){if(!Ce)return void e.console.error("AngularJS: disabling automatic bootstrap. <script> protocol indicates an extension, document.location.href does not match.");o.strictDi=null!==function(e,t){var n,r,i=Se.length;for(r=0;r<i;++r)if(n=Se[r]+t,F(n=e.getAttribute(n)))return n;return null}(r,"strict-di"),n(r,i?[i]:[],o)}}function Oe(t,n,r){L(r)||(r={});r=O({strictDi:!1},r);var i=function(){if((t=a(t)).injector()){var i=t[0]===e.document?"document":xe(t);throw b("btstrpd","App already bootstrapped with this element '{0}'",i.replace(/</,"<").replace(/>/,">"))}(n=n||[]).unshift(["$provide",function(e){e.value("$rootElement",t)}]),r.debugInfoEnabled&&n.push(["$compileProvider",function(e){e.debugInfoEnabled(!0)}]),n.unshift("ng");var o=Qt(n,r.strictDi);return o.invoke(["$rootScope","$rootElement","$compile","$injector",function(e,t,n,r){e.$apply((function(){t.data("$injector",r),n(t)(e)}))}]),o},o=/^NG_ENABLE_DEBUG_INFO!/,s=/^NG_DEFER_BOOTSTRAP!/;if(e&&o.test(e.name)&&(r.debugInfoEnabled=!0,e.name=e.name.replace(o,"")),e&&!s.test(e.name))return i();e.name=e.name.replace(s,""),y.resumeBootstrap=function(e){return k(e,(function(e){n.push(e)})),i()},G(y.resumeDeferredBootstrap)&&y.resumeDeferredBootstrap()}function _e(){e.name="NG_ENABLE_DEBUG_INFO!"+e.name,e.location.reload()}function Te(e){var t=y.element(e).injector();if(!t)throw b("test","no injector found for element argument to getTestability");return t.get("$$testability")}var je=/[A-Z]/g;function Pe(e,t){return t=t||"_",e.replace(je,(function(e,n){return(n?t:"")+e.toLowerCase()}))}var De=!1;function Re(){ft.legacyXHTMLReplacement=!0}function Ie(e,t,n){if(!e)throw b("areq","Argument '{0}' is {1}",t||"?",n||"required");return e}function Ne(e,t,n){return n&&U(e)&&(e=e[e.length-1]),Ie(G(e),t,"not a function, got "+(e&&"object"==typeof e?e.constructor.name||"Object":typeof e)),e}function Me(e,t){if("hasOwnProperty"===e)throw b("badname","hasOwnProperty is not a valid {0} name",t)}function ze(e){for(var t,n=e[0],r=e[e.length-1],i=1;n!==r&&(n=n.nextSibling);i++)(t||e[i]!==n)&&(t||(t=a(p.call(e,0,i))),t.push(n));return t||e}function Le(){return Object.create(null)}function Be(e){if(null==e)return"";switch(typeof e){case"string":break;case"number":e=""+e;break;default:e=!N(e)||U(e)||V(e)?he(e):e.toString()}return e}var Fe=3;function qe(e,t){if(U(e)){t=t||[];for(var n=0,r=e.length;n<r;n++)t[n]=e[n]}else if(L(e))for(var i in t=t||{},e)"$"===i.charAt(0)&&"$"===i.charAt(1)||(t[i]=e[i]);return t||e}function Ve(e,t){return"function"==typeof e?e.toString().replace(/ \{[\s\S]*$/,""):M(e)?"undefined":"string"!=typeof e?function(e,t){var n=[];return r(t)&&(e=y.copy(e,null,t)),JSON.stringify(e,(function(e,t){if(L(t=pe(e,t))){if(n.indexOf(t)>=0)return"...";n.push(t)}return t}))}(e,t):e}var Ue={full:"1.8.2",major:1,minor:8,dot:2,codeName:"meteoric-mining"};ft.expando="ng339";var He=ft.cache={},Ge=1;ft._data=function(e){return this.cache[e[this.expando]]||{}};var We=/-([a-z])/g,Ye=/^-ms-/,Xe={mouseleave:"mouseout",mouseenter:"mouseover"},Ze=i("jqLite");function Qe(e,t){return t.toUpperCase()}function Je(e){return e.replace(We,Qe)}var Ke=/^<([\w-]+)\s*\/?>(?:<\/\1>|)$/,et=/<|&#?\w+;/,tt=/<([\w:-]+)/,nt=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:-]+)[^>]*)\/>/gi,rt={thead:["table"],col:["colgroup","table"],tr:["tbody","table"],td:["tr","tbody","table"]};rt.tbody=rt.tfoot=rt.colgroup=rt.caption=rt.thead,rt.th=rt.td;var it={option:[1,'<select multiple="multiple">',"</select>"],_default:[0,"",""]};for(var ot in rt){var at=rt[ot],st=at.slice().reverse();it[ot]=[st.length,"<"+st.join("><")+">","</"+at.join("></")+">"]}function lt(e){return!et.test(e)}function ct(e){var t=e.nodeType;return 1===t||!t||9===t}function ut(t,n){var r,i,a,s,l,c=n.createDocumentFragment(),u=[];if(lt(t))u.push(n.createTextNode(t));else{if(r=c.appendChild(n.createElement("div")),i=(tt.exec(t)||["",""])[1].toLowerCase(),s=ft.legacyXHTMLReplacement?t.replace(nt,"<$1></$2>"):t,o<10)for(a=it[i]||it._default,r.innerHTML=a[1]+s+a[2],l=a[0];l--;)r=r.firstChild;else{for(l=(a=rt[i]||[]).length;--l>-1;)r.appendChild(e.document.createElement(a[l])),r=r.firstChild;r.innerHTML=s}u=ue(u,r.childNodes),(r=c.firstChild).textContent=""}return c.textContent="",c.innerHTML="",k(u,(function(e){c.appendChild(e)})),c}it.optgroup=it.option;var dt=e.Node.prototype.contains||function(e){return!!(16&this.compareDocumentPosition(e))};function ft(t){if(t instanceof ft)return t;var n,r,i,o;if(F(t)&&(t=K(t),n=!0),!(this instanceof ft)){if(n&&"<"!==t.charAt(0))throw Ze("nosel","Looking up elements via selectors is not supported by jqLite! See: http://docs.angularjs.org/api/angular.element");return new ft(t)}n?Et(this,(r=t,i=i||e.document,(o=Ke.exec(r))?[i.createElement(o[1])]:(o=ut(r,i))?o.childNodes:[])):G(t)?_t(t):Et(this,t)}function pt(e){return e.cloneNode(!0)}function ht(e,t){!t&&ct(e)&&a.cleanData([e]),e.querySelectorAll&&a.cleanData(e.querySelectorAll("*"))}function gt(e){var t;for(t in e)return!1;return!0}function vt(e){var t=e.ng339,n=t&&He[t],r=n&&n.events,i=n&&n.data;i&&!gt(i)||r&&!gt(r)||(delete He[t],e.ng339=void 0)}function mt(e,t,n,r){if(z(r))throw Ze("offargs","jqLite#off() does not support the `selector` argument");var i=yt(e),o=i&&i.events,a=i&&i.handle;if(a){if(t){var s=function(t){var r=o[t];z(n)&&ie(r||[],n),z(n)&&r&&r.length>0||(e.removeEventListener(t,a),delete o[t])};k(t.split(" "),(function(e){s(e),Xe[e]&&s(Xe[e])}))}else for(t in o)"$destroy"!==t&&e.removeEventListener(t,a),delete o[t];vt(e)}}function bt(e,t){var n=e.ng339,r=n&&He[n];r&&(t?delete r.data[t]:r.data={},vt(e))}function yt(e,t){var n=e.ng339,r=n&&He[n];return t&&!r&&(e.ng339=n=++Ge,r=He[n]={events:{},data:{},handle:void 0}),r}function xt(e,t,n){if(ct(e)){var r,i=z(n),o=!i&&t&&!L(t),a=!t,s=yt(e,!o),l=s&&s.data;if(i)l[Je(t)]=n;else{if(a)return l;if(o)return l&&l[Je(t)];for(r in t)l[Je(r)]=t[r]}}}function wt(e,t){return!!e.getAttribute&&(" "+(e.getAttribute("class")||"")+" ").replace(/[\n\t]/g," ").indexOf(" "+t+" ")>-1}function kt(e,t){if(t&&e.setAttribute){var n=(" "+(e.getAttribute("class")||"")+" ").replace(/[\n\t]/g," "),r=n;k(t.split(" "),(function(e){e=K(e),r=r.replace(" "+e+" "," ")})),r!==n&&e.setAttribute("class",K(r))}}function At(e,t){if(t&&e.setAttribute){var n=(" "+(e.getAttribute("class")||"")+" ").replace(/[\n\t]/g," "),r=n;k(t.split(" "),(function(e){e=K(e),-1===r.indexOf(" "+e+" ")&&(r+=e+" ")})),r!==n&&e.setAttribute("class",K(r))}}function Et(e,t){if(t)if(t.nodeType)e[e.length++]=t;else{var n=t.length;if("number"==typeof n&&t.window!==t){if(n)for(var r=0;r<n;r++)e[e.length++]=t[r]}else e[e.length++]=t}}function St(e,t){return Ct(e,"$"+(t||"ngController")+"Controller")}function Ct(e,t,n){9===e.nodeType&&(e=e.documentElement);for(var r=U(t)?t:[t];e;){for(var i=0,o=r.length;i<o;i++)if(z(n=a.data(e,r[i])))return n;e=e.parentNode||11===e.nodeType&&e.host}}function $t(e){for(ht(e,!0);e.firstChild;)e.removeChild(e.firstChild)}function Ot(e,t){t||ht(e);var n=e.parentNode;n&&n.removeChild(e)}function _t(t){function n(){e.document.removeEventListener("DOMContentLoaded",n),e.removeEventListener("load",n),t()}"complete"===e.document.readyState?e.setTimeout(t):(e.document.addEventListener("DOMContentLoaded",n),e.addEventListener("load",n))}var Tt=ft.prototype={ready:_t,toString:function(){var e=[];return k(this,(function(t){e.push(""+t)})),"["+e.join(", ")+"]"},eq:function(e){return a(e>=0?this[e]:this[this.length+e])},length:0,push:g,sort:[].sort,splice:[].splice},jt={};k("multiple,selected,checked,disabled,readOnly,required,open".split(","),(function(e){jt[d(e)]=e}));var Pt={};k("input,select,option,textarea,button,form,details".split(","),(function(e){Pt[e]=!0}));var Dt={ngMinlength:"minlength",ngMaxlength:"maxlength",ngMin:"min",ngMax:"max",ngPattern:"pattern",ngStep:"step"};function Rt(e,t){var n=jt[t.toLowerCase()];return n&&Pt[ne(e)]&&n}function It(e,t,n){n.call(e,t)}function Nt(e,t,n){var r=t.relatedTarget;r&&(r===e||dt.call(e,r))||n.call(e,t)}function Mt(){this.$get=function(){return O(ft,{hasClass:function(e,t){return e.attr&&(e=e[0]),wt(e,t)},addClass:function(e,t){return e.attr&&(e=e[0]),At(e,t)},removeClass:function(e,t){return e.attr&&(e=e[0]),kt(e,t)}})}}function zt(e,t){var n=e&&e.$$hashKey;if(n)return"function"==typeof n&&(n=e.$$hashKey()),n;var r=typeof e;return n="function"===r||"object"===r&&null!==e?e.$$hashKey=r+":"+(t||S)():r+":"+e}k({data:xt,removeData:bt,hasData:function(e){for(var t in He[e.ng339])return!0;return!1},cleanData:function(e){for(var t=0,n=e.length;t<n;t++)bt(e[t]),mt(e[t])}},(function(e,t){ft[t]=e})),k({data:xt,inheritedData:Ct,scope:function(e){return a.data(e,"$scope")||Ct(e.parentNode||e,["$isolateScope","$scope"])},isolateScope:function(e){return a.data(e,"$isolateScope")||a.data(e,"$isolateScopeNoTemplate")},controller:St,injector:function(e){return Ct(e,"$injector")},removeAttr:function(e,t){e.removeAttribute(t)},hasClass:wt,css:function(e,t,n){if(t=function(e){return Je(e.replace(Ye,"ms-"))}(t),!z(n))return e.style[t];e.style[t]=n},attr:function(e,t,n){var r,i=e.nodeType;if(i!==Fe&&2!==i&&8!==i&&e.getAttribute){var o=d(t),a=jt[o];if(!z(n))return r=e.getAttribute(t),a&&null!==r&&(r=o),null===r?void 0:r;null===n||!1===n&&a?e.removeAttribute(t):e.setAttribute(t,a?o:n)}},prop:function(e,t,n){if(!z(n))return e[t];e[t]=n},text:function(){return e.$dv="",e;function e(e,t){if(M(t)){var n=e.nodeType;return 1===n||n===Fe?e.textContent:""}e.textContent=t}}(),val:function(e,t){if(M(t)){if(e.multiple&&"select"===ne(e)){var n=[];return k(e.options,(function(e){e.selected&&n.push(e.value||e.text)})),n}return e.value}e.value=t},html:function(e,t){if(M(t))return e.innerHTML;ht(e,!0),e.innerHTML=t},empty:$t},(function(e,t){ft.prototype[t]=function(t,n){var r,i,o=this.length;if(e!==$t&&M(2===e.length&&e!==wt&&e!==St?t:n)){if(L(t)){for(r=0;r<o;r++)if(e===xt)e(this[r],t);else for(i in t)e(this[r],i,t[i]);return this}for(var a=e.$dv,s=M(a)?Math.min(o,1):o,l=0;l<s;l++){var c=e(this[l],t,n);a=a?a+c:c}return a}for(r=0;r<o;r++)e(this[r],t,n);return this}})),k({removeData:bt,on:function(e,t,n,r){if(z(r))throw Ze("onargs","jqLite#on() does not support the `selector` or `eventData` parameters");if(ct(e)){var i=yt(e,!0),o=i.events,a=i.handle;a||(a=i.handle=function(e,t){var n=function(n,r){n.isDefaultPrevented=function(){return n.defaultPrevented};var i=t[r||n.type],o=i?i.length:0;if(o){if(M(n.immediatePropagationStopped)){var a=n.stopImmediatePropagation;n.stopImmediatePropagation=function(){n.immediatePropagationStopped=!0,n.stopPropagation&&n.stopPropagation(),a&&a.call(n)}}n.isImmediatePropagationStopped=function(){return!0===n.immediatePropagationStopped};var s=i.specialHandlerWrapper||It;o>1&&(i=qe(i));for(var l=0;l<o;l++)n.isImmediatePropagationStopped()||s(e,n,i[l])}};return n.elem=e,n}(e,o));for(var s=t.indexOf(" ")>=0?t.split(" "):[t],l=s.length,c=function(t,r,i){var s=o[t];s||((s=o[t]=[]).specialHandlerWrapper=r,"$destroy"===t||i||e.addEventListener(t,a)),s.push(n)};l--;)t=s[l],Xe[t]?(c(Xe[t],Nt),c(t,void 0,!0)):c(t)}},off:mt,one:function(e,t,n){(e=a(e)).on(t,(function r(){e.off(t,n),e.off(t,r)})),e.on(t,n)},replaceWith:function(e,t){var n,r=e.parentNode;ht(e),k(new ft(t),(function(t){n?r.insertBefore(t,n.nextSibling):r.replaceChild(t,e),n=t}))},children:function(e){var t=[];return k(e.childNodes,(function(e){1===e.nodeType&&t.push(e)})),t},contents:function(e){return e.contentDocument||e.childNodes||[]},append:function(e,t){var n=e.nodeType;if(1===n||11===n)for(var r=0,i=(t=new ft(t)).length;r<i;r++){var o=t[r];e.appendChild(o)}},prepend:function(e,t){if(1===e.nodeType){var n=e.firstChild;k(new ft(t),(function(t){e.insertBefore(t,n)}))}},wrap:function(e,t){var n,r,i;n=e,r=a(t).eq(0).clone()[0],(i=n.parentNode)&&i.replaceChild(r,n),r.appendChild(n)},remove:Ot,detach:function(e){Ot(e,!0)},after:function(e,t){var n=e,r=e.parentNode;if(r)for(var i=0,o=(t=new ft(t)).length;i<o;i++){var a=t[i];r.insertBefore(a,n.nextSibling),n=a}},addClass:At,removeClass:kt,toggleClass:function(e,t,n){t&&k(t.split(" "),(function(t){var r=n;M(r)&&(r=!wt(e,t)),(r?At:kt)(e,t)}))},parent:function(e){var t=e.parentNode;return t&&11!==t.nodeType?t:null},next:function(e){return e.nextElementSibling},find:function(e,t){return e.getElementsByTagName?e.getElementsByTagName(t):[]},clone:pt,triggerHandler:function(e,t,n){var r,i,o,a=t.type||t,s=yt(e),l=s&&s.events,c=l&&l[a];c&&(r={preventDefault:function(){this.defaultPrevented=!0},isDefaultPrevented:function(){return!0===this.defaultPrevented},stopImmediatePropagation:function(){this.immediatePropagationStopped=!0},isImmediatePropagationStopped:function(){return!0===this.immediatePropagationStopped},stopPropagation:D,type:a,target:e},t.type&&(r=O(r,t)),i=qe(c),o=n?[r].concat(n):[r],k(i,(function(t){r.isImmediatePropagationStopped()||t.apply(e,o)})))}},(function(e,t){ft.prototype[t]=function(t,n,r){for(var i,o=0,s=this.length;o<s;o++)M(i)?z(i=e(this[o],t,n,r))&&(i=a(i)):Et(i,e(this[o],t,n,r));return z(i)?i:this}})),ft.prototype.bind=ft.prototype.on,ft.prototype.unbind=ft.prototype.off;var Lt=Object.create(null);function Bt(){this._keys=[],this._values=[],this._lastKey=NaN,this._lastIndex=-1}Bt.prototype={_idx:function(e){return e!==this._lastKey&&(this._lastKey=e,this._lastIndex=this._keys.indexOf(e)),this._lastIndex},_transformKey:function(e){return j(e)?Lt:e},get:function(e){e=this._transformKey(e);var t=this._idx(e);if(-1!==t)return this._values[t]},has:function(e){return e=this._transformKey(e),-1!==this._idx(e)},set:function(e,t){e=this._transformKey(e);var n=this._idx(e);-1===n&&(n=this._lastIndex=this._keys.length),this._keys[n]=e,this._values[n]=t},delete:function(e){e=this._transformKey(e);var t=this._idx(e);return-1!==t&&(this._keys.splice(t,1),this._values.splice(t,1),this._lastKey=NaN,this._lastIndex=-1,!0)}};var Ft=Bt,qt=[function(){this.$get=[function(){return Ft}]}],Vt=/^([^(]+?)=>/,Ut=/^[^(]*\(\s*([^)]*)\)/m,Ht=/,/,Gt=/^\s*(_?)(\S+?)\1\s*$/,Wt=/((\/\/.*$)|(\/\*[\s\S]*?\*\/))/gm,Yt=i("$injector");function Xt(e){return Function.prototype.toString.call(e)}function Zt(e){var t=Xt(e).replace(Wt,"");return t.match(Vt)||t.match(Ut)}function Qt(e,t){t=!0===t;var n={},r=[],i=new Ft,a={$provide:{provider:p(h),factory:p(v),service:p((function(e,t){return v(e,["$injector",function(e){return e.instantiate(t)}])})),value:p((function(e,t){return v(e,I(t),!1)})),constant:p((function(e,t){Me(e,"constant"),a[e]=t,c[e]=t})),decorator:function(e,t){var n=s.get(e+"Provider"),r=n.$get;n.$get=function(){var e=d.invoke(r,n);return d.invoke(t,null,{$delegate:e})}}}},s=a.$injector=b(a,(function(e,t){throw y.isString(t)&&r.push(t),Yt("unpr","Unknown provider: {0}",r.join(" <- "))})),c={},u=b(c,(function(e,t){var n=s.get(e+"Provider",t);return d.invoke(n.$get,n,void 0,e)})),d=u;a.$injectorProvider={$get:I(u)},d.modules=s.modules=Le();var f=m(e);return(d=u.get("$injector")).strictDi=t,k(f,(function(e){e&&d.invoke(e)})),d.loadNewModules=function(e){k(m(e),(function(e){e&&d.invoke(e)}))},d;function p(e){return function(t,n){if(!L(t))return e(t,n);k(t,E(e))}}function h(e,t){if(Me(e,"service"),(G(t)||U(t))&&(t=s.instantiate(t)),!t.$get)throw Yt("pget","Provider '{0}' must define $get factory method.",e);return a[e+"Provider"]=t}function g(e,t){return function(){var n=d.invoke(t,this);if(M(n))throw Yt("undef","Provider '{0}' must return a value from $get factory method.",e);return n}}function v(e,t,n){return h(e,{$get:!1!==n?g(e,t):t})}function m(e){Ie(M(e)||U(e),"modulesToLoad","not an array");var t,n=[];return k(e,(function(e){if(!i.get(e)){i.set(e,!0);try{F(e)?(t=l(e),d.modules[e]=t,n=n.concat(m(t.requires)).concat(t._runBlocks),r(t._invokeQueue),r(t._configBlocks)):G(e)||U(e)?n.push(s.invoke(e)):Ne(e,"module")}catch(t){throw U(e)&&(e=e[e.length-1]),t.message&&t.stack&&-1===t.stack.indexOf(t.message)&&(t=t.message+"\n"+t.stack),Yt("modulerr","Failed to instantiate module {0} due to:\n{1}",e,t.stack||t.message||t)}}function r(e){var t,n;for(t=0,n=e.length;t<n;t++){var r=e[t],i=s.get(r[0]);i[r[1]].apply(i,r[2])}}})),n}function b(e,i){function s(t,o){if(e.hasOwnProperty(t)){if(e[t]===n)throw Yt("cdep","Circular dependency found: {0}",t+" <- "+r.join(" <- "));return e[t]}try{return r.unshift(t),e[t]=n,e[t]=i(t,o),e[t]}catch(r){throw e[t]===n&&delete e[t],r}finally{r.shift()}}function l(e,n,r){for(var i=[],o=Qt.$$annotate(e,t,r),a=0,l=o.length;a<l;a++){var c=o[a];if("string"!=typeof c)throw Yt("itkn","Incorrect injection token! Expected service name as string, got {0}",c);i.push(n&&n.hasOwnProperty(c)?n[c]:s(c,r))}return i}return{invoke:function(e,t,n,r){"string"==typeof n&&(r=n,n=null);var i=l(e,n,r);return U(e)&&(e=e[e.length-1]),function(e){if(o||"function"!=typeof e)return!1;var t=e.$$ngIsClass;return Z(t)||(t=e.$$ngIsClass=/^class\b/.test(Xt(e))),t}(e)?(i.unshift(null),new(Function.prototype.bind.apply(e,i))):e.apply(t,i)},instantiate:function(e,t,n){var r=U(e)?e[e.length-1]:e,i=l(e,t,n);return i.unshift(null),new(Function.prototype.bind.apply(r,i))},get:s,annotate:Qt.$$annotate,has:function(t){return a.hasOwnProperty(t+"Provider")||e.hasOwnProperty(t)}}}}function Jt(){var t=!0;this.disableAutoScrolling=function(){t=!1},this.$get=["$window","$location","$rootScope",function(n,r,i){var o=n.document;function s(e){if(e){e.scrollIntoView();var t=function(){var e=l.yOffset;if(G(e))e=e();else if(te(e)){var t=e[0];e="fixed"!==n.getComputedStyle(t).position?0:t.getBoundingClientRect().bottom}else q(e)||(e=0);return e}();if(t){var r=e.getBoundingClientRect().top;n.scrollBy(0,r-t)}}else n.scrollTo(0,0)}function l(e){var t,n,i;(e=F(e)?e:q(e)?e.toString():r.hash())?(t=o.getElementById(e))?s(t):(n=o.getElementsByName(e),i=null,Array.prototype.some.call(n,(function(e){if("a"===ne(e))return i=e,!0})),(t=i)?s(t):"top"===e&&s(null)):s(null)}return t&&i.$watch((function(){return r.hash()}),(function(t,n){var r,o;t===n&&""===t||(r=function(){i.$evalAsync(l)},"complete"===(o=o||e).document.readyState?o.setTimeout(r):a(o).on("load",r))})),l}]}Qt.$$annotate=function(e,t,n){var r,i;if("function"==typeof e){if(!(r=e.$inject)){if(r=[],e.length){if(t)throw F(n)&&n||(n=e.name||function(e){var t=Zt(e);return t?"function("+(t[1]||"").replace(/[\s\r\n]+/," ")+")":"fn"}(e)),Yt("strictdi","{0} is not using explicit annotation and cannot be invoked in strict mode",n);k(Zt(e)[1].split(Ht),(function(e){e.replace(Gt,(function(e,t,n){r.push(n)}))}))}e.$inject=r}}else U(e)?(Ne(e[i=e.length-1],"fn"),r=e.slice(0,i)):Ne(e,"fn",!0);return r};var Kt=i("$animate");function en(e,t){return e||t?e?t?(U(e)&&(e=e.join(" ")),U(t)&&(t=t.join(" ")),e+" "+t):e:t:""}function tn(e){return L(e)?e:{}}var nn=function(){this.$get=D},rn=function(){var e=new Ft,t=[];this.$get=["$$AnimateRunner","$rootScope",function(n,r){return{enabled:D,on:D,off:D,pin:D,push:function(a,s,l,c){c&&c(),(l=l||{}).from&&a.css(l.from),l.to&&a.css(l.to),(l.addClass||l.removeClass)&&function(n,a,s){var l=e.get(n)||{},c=i(l,a,!0),u=i(l,s,!1);(c||u)&&(e.set(n,l),t.push(n),1===t.length&&r.$$postDigest(o))}(a,l.addClass,l.removeClass);var u=new n;return u.complete(),u}};function i(e,t,n){var r=!1;return t&&k(t=F(t)?t.split(" "):U(t)?t:[],(function(t){t&&(r=!0,e[t]=n)})),r}function o(){k(t,(function(t){var n=e.get(t);if(n){var r=function(e){F(e)&&(e=e.split(" "));var t=Le();return k(e,(function(e){e.length&&(t[e]=!0)})),t}(t.attr("class")),i="",o="";k(n,(function(e,t){e!==!!r[t]&&(e?i+=(i.length?" ":"")+t:o+=(o.length?" ":"")+t)})),k(t,(function(e){i&&At(e,i),o&&kt(e,o)})),e.delete(t)}})),t.length=0}}]},on=["$provide",function(e){var t=this,n=null,r=null;this.$$registeredAnimations=Object.create(null),this.register=function(n,r){if(n&&"."!==n.charAt(0))throw Kt("notcsel","Expecting class selector starting with '.' got '{0}'.",n);var i=n+"-animation";t.$$registeredAnimations[n.substr(1)]=i,e.factory(i,r)},this.customFilter=function(e){return 1===arguments.length&&(r=G(e)?e:null),r},this.classNameFilter=function(e){if(1===arguments.length&&(n=e instanceof RegExp?e:null)){var t=new RegExp("[(\\s|\\/)]ng-animate[(\\s|\\/)]");if(t.test(n.toString()))throw n=null,Kt("nongcls",'$animateProvider.classNameFilter(regex) prohibits accepting a regex value which matches/contains the "{0}" CSS class.',"ng-animate")}return n},this.$get=["$$animateQueue",function(e){function t(e,t,n){if(n){var r=function(e){for(var t=0;t<e.length;t++){var n=e[t];if(1===n.nodeType)return n}}(n);!r||r.parentNode||r.previousElementSibling||(n=null)}n?n.after(e):t.prepend(e)}return{on:e.on,off:e.off,pin:e.pin,enabled:e.enabled,cancel:function(e){e.cancel&&e.cancel()},enter:function(n,r,i,o){return r=r&&a(r),i=i&&a(i),t(n,r=r||i.parent(),i),e.push(n,"enter",tn(o))},move:function(n,r,i,o){return r=r&&a(r),i=i&&a(i),t(n,r=r||i.parent(),i),e.push(n,"move",tn(o))},leave:function(t,n){return e.push(t,"leave",tn(n),(function(){t.remove()}))},addClass:function(t,n,r){return(r=tn(r)).addClass=en(r.addclass,n),e.push(t,"addClass",r)},removeClass:function(t,n,r){return(r=tn(r)).removeClass=en(r.removeClass,n),e.push(t,"removeClass",r)},setClass:function(t,n,r,i){return(i=tn(i)).addClass=en(i.addClass,n),i.removeClass=en(i.removeClass,r),e.push(t,"setClass",i)},animate:function(t,n,r,i,o){return(o=tn(o)).from=o.from?O(o.from,n):n,o.to=o.to?O(o.to,r):r,i=i||"ng-inline-animate",o.tempClasses=en(o.tempClasses,i),e.push(t,"animate",o)}}}]}],an=function(){this.$get=["$$rAF",function(e){var t=[];function n(n){t.push(n),t.length>1||e((function(){for(var e=0;e<t.length;e++)t[e]();t=[]}))}return function(){var e=!1;return n((function(){e=!0})),function(t){e?t():n(t)}}}]},sn=function(){this.$get=["$q","$sniffer","$$animateAsyncRun","$$isDocumentHidden","$timeout",function(e,t,n,r,i){function o(e){this.setHost(e);var t=n();this._doneCallbacks=[],this._tick=function(e){r()?function(e){i(e,0,!1)}(e):t(e)},this._state=0}return o.chain=function(e,t){var n=0;!function r(){if(n===e.length)return void t(!0);e[n]((function(e){!1!==e?(n++,r()):t(!1)}))}()},o.all=function(e,t){var n=0,r=!0;function i(i){r=r&&i,++n===e.length&&t(r)}k(e,(function(e){e.done(i)}))},o.prototype={setHost:function(e){this.host=e||{}},done:function(e){2===this._state?e():this._doneCallbacks.push(e)},progress:D,getPromise:function(){if(!this.promise){var t=this;this.promise=e((function(e,n){t.done((function(t){!1===t?n():e()}))}))}return this.promise},then:function(e,t){return this.getPromise().then(e,t)},catch:function(e){return this.getPromise().catch(e)},finally:function(e){return this.getPromise().finally(e)},pause:function(){this.host.pause&&this.host.pause()},resume:function(){this.host.resume&&this.host.resume()},end:function(){this.host.end&&this.host.end(),this._resolve(!0)},cancel:function(){this.host.cancel&&this.host.cancel(),this._resolve(!1)},complete:function(e){var t=this;0===t._state&&(t._state=1,t._tick((function(){t._resolve(e)})))},_resolve:function(e){2!==this._state&&(k(this._doneCallbacks,(function(t){t(e)})),this._doneCallbacks.length=0,this._state=2)}},o}]},ln=function(){this.$get=["$$rAF","$q","$$AnimateRunner",function(e,t,n){return function(t,r){var i=r||{};i.$$prepared||(i=oe(i)),i.cleanupStyles&&(i.from=i.to=null),i.from&&(t.css(i.from),i.from=null);var o,a=new n;return{start:s,end:s};function s(){return e((function(){!function(){i.addClass&&(t.addClass(i.addClass),i.addClass=null);i.removeClass&&(t.removeClass(i.removeClass),i.removeClass=null);i.to&&(t.css(i.to),i.to=null)}(),o||a.complete(),o=!0})),a}}}]};function cn(e,t,n,r,i){var o=this,s=e.location,l=e.history,c=e.setTimeout,u=e.clearTimeout,d={},f=i(n);o.isMock=!1,o.$$completeOutstandingRequest=f.completeTask,o.$$incOutstandingRequestCount=f.incTaskCount,o.notifyWhenNoOutstandingRequests=f.notifyWhenNoPendingTasks;var p,h,g=s.href,v=t.find("base"),m=null,b=r.history?function(){try{return l.state}catch(e){}}:D;E(),o.url=function(t,n,i){if(M(i)&&(i=null),s!==e.location&&(s=e.location),l!==e.history&&(l=e.history),t){var a=h===i;if(t=li(t).href,g===t&&(!r.history||a))return o;var c=g&&sr(g)===sr(t);return g=t,h=i,!r.history||c&&a?(c||(m=t),n?s.replace(t):c?s.hash=function(e){var t=e.indexOf("#");return-1===t?"":e.substr(t)}(t):s.href=t,s.href!==t&&(m=t)):(l[n?"replaceState":"pushState"](i,"",t),E()),m&&(m=t),o}return function(e){return e.replace(/#$/,"")}(m||s.href)},o.state=function(){return p};var y=[],x=!1;function w(){m=null,S()}var A=null;function E(){se(p=M(p=b())?null:p,A)&&(p=A),A=p,h=p}function S(){var e=h;E(),g===o.url()&&e===p||(g=o.url(),h=p,k(y,(function(e){e(o.url(),p)})))}o.onUrlChange=function(t){return x||(r.history&&a(e).on("popstate",w),a(e).on("hashchange",w),x=!0),y.push(t),t},o.$$applicationDestroyed=function(){a(e).off("hashchange popstate",w)},o.$$checkUrlChange=S,o.baseHref=function(){var e=v.attr("href");return e?e.replace(/^(https?:)?\/\/[^/]*/,""):""},o.defer=function(e,t,n){var r;return t=t||0,n=n||f.DEFAULT_TASK_TYPE,f.incTaskCount(n),r=c((function(){delete d[r],f.completeTask(e,n)}),t),d[r]=n,r},o.defer.cancel=function(e){if(d.hasOwnProperty(e)){var t=d[e];return delete d[e],u(e),f.completeTask(D,t),!0}return!1}}function un(){this.$get=["$window","$log","$sniffer","$document","$$taskTrackerFactory",function(e,t,n,r,i){return new cn(e,r,t,n,i)}]}function dn(){this.$get=function(){var e={};function t(t,n){if(t in e)throw i("$cacheFactory")("iid","CacheId '{0}' is already taken!",t);var r=0,o=O({},n,{id:t}),a=Le(),s=n&&n.capacity||Number.MAX_VALUE,l=Le(),c=null,u=null;return e[t]={put:function(e,t){if(!M(t)){if(s<Number.MAX_VALUE)d(l[e]||(l[e]={key:e}));return e in a||r++,a[e]=t,r>s&&this.remove(u.key),t}},get:function(e){if(s<Number.MAX_VALUE){var t=l[e];if(!t)return;d(t)}return a[e]},remove:function(e){if(s<Number.MAX_VALUE){var t=l[e];if(!t)return;t===c&&(c=t.p),t===u&&(u=t.n),f(t.n,t.p),delete l[e]}e in a&&(delete a[e],r--)},removeAll:function(){a=Le(),r=0,l=Le(),c=u=null},destroy:function(){a=null,o=null,l=null,delete e[t]},info:function(){return O({},o,{size:r})}};function d(e){e!==c&&(u?u===e&&(u=e.n):u=e,f(e.n,e.p),f(e,c),(c=e).n=null)}function f(e,t){e!==t&&(e&&(e.p=t),t&&(t.n=e))}}return t.info=function(){var t={};return k(e,(function(e,n){t[n]=e.info()})),t},t.get=function(t){return e[t]},t}}function fn(){this.$get=["$cacheFactory",function(e){return e("templates")}]}var pn=i("$compile");var hn=new function(){};function gn(t,n){var r={},i=/^\s*directive:\s*([\w-]+)\s+(.*)$/,s=/(([\w-]+)(?::([^;]+))?;?)/,l=function(e){var t,n={},r=e.split(",");for(t=0;t<r.length;t++)n[r[t]]=!0;return n}("ngSrc,ngSrcset,src,srcset"),c=/^(?:(\^\^?)?(\?)?(\^\^?)?)?/,f=/^(on[a-z]+|formaction)$/,p=Le();function h(e,t,n){var r=/^([@&]|[=<](\*?))(\??)\s*([\w$]*)$/,i=Le();return k(e,(function(e,o){if((e=e.trim())in p)i[o]=p[e];else{var a=e.match(r);if(!a)throw pn("iscp","Invalid {3} for directive '{0}'. Definition: {... {1}: '{2}' ...}",t,o,e,n?"controller bindings definition":"isolate scope definition");i[o]={mode:a[1][0],collection:"*"===a[2],optional:"?"===a[3],attrName:a[4]||o},a[4]&&(p[e]=i[o])}})),i}function g(e,t){var n={isolateScope:null,bindToController:null};if(L(e.scope)&&(!0===e.bindToController?(n.bindToController=h(e.scope,t,!0),n.isolateScope={}):n.isolateScope=h(e.scope,t,!1)),L(e.bindToController)&&(n.bindToController=h(e.bindToController,t,!0)),n.bindToController&&!e.controller)throw pn("noctrl","Cannot bind to controller without directive '{0}'s controller.",t);return n}this.directive=function e(n,i){return Ie(n,"name"),Me(n,"directive"),F(n)?(!function(e){var t=e.charAt(0);if(!t||t!==d(t))throw pn("baddir","Directive/Component name '{0}' is invalid. The first character must be a lowercase letter",e);if(e!==e.trim())throw pn("baddir","Directive/Component name '{0}' is invalid. The name should not contain leading or trailing whitespaces",e)}(n),Ie(i,"directiveFactory"),r.hasOwnProperty(n)||(r[n]=[],t.factory(n+"Directive",["$injector","$exceptionHandler",function(e,t){var i=[];return k(r[n],(function(r,o){try{var a=e.invoke(r);G(a)?a={compile:I(a)}:!a.compile&&a.link&&(a.compile=I(a.link)),a.priority=a.priority||0,a.index=o,a.name=a.name||n,a.require=function(e){var t=e.require||e.controller&&e.name;return!U(t)&&L(t)&&k(t,(function(e,n){var r=e.match(c);e.substring(r[0].length)||(t[n]=r[0]+n)})),t}(a),a.restrict=function(e,t){if(e&&(!F(e)||!/[EACM]/.test(e)))throw pn("badrestrict","Restrict property '{0}' of directive '{1}' is invalid",e,t);return e||"EA"}(a.restrict,n),a.$$moduleName=r.$$moduleName,i.push(a)}catch(e){t(e)}})),i}])),r[n].push(i)):k(n,E(e)),this},this.component=function e(t,n){if(!F(t))return k(t,E(fe(this,e))),this;var r=n.controller||function(){};function i(e){function t(t){return G(t)||U(t)?function(n,r){return e.invoke(t,this,{$element:n,$attrs:r})}:t}var i=n.template||n.templateUrl?n.template:"",o={controller:r,controllerAs:En(n.controller)||n.controllerAs||"$ctrl",template:t(i),templateUrl:t(n.templateUrl),transclude:n.transclude,scope:{},bindToController:n.bindings||{},restrict:"E",require:n.require};return k(n,(function(e,t){"$"===t.charAt(0)&&(o[t]=e)})),o}return k(n,(function(e,t){"$"===t.charAt(0)&&(i[t]=e,G(r)&&(r[t]=e))})),i.$inject=["$injector"],this.directive(t,i)},this.aHrefSanitizationTrustedUrlList=function(e){return z(e)?(n.aHrefSanitizationTrustedUrlList(e),this):n.aHrefSanitizationTrustedUrlList()},Object.defineProperty(this,"aHrefSanitizationWhitelist",{get:function(){return this.aHrefSanitizationTrustedUrlList},set:function(e){this.aHrefSanitizationTrustedUrlList=e}}),this.imgSrcSanitizationTrustedUrlList=function(e){return z(e)?(n.imgSrcSanitizationTrustedUrlList(e),this):n.imgSrcSanitizationTrustedUrlList()},Object.defineProperty(this,"imgSrcSanitizationWhitelist",{get:function(){return this.imgSrcSanitizationTrustedUrlList},set:function(e){this.imgSrcSanitizationTrustedUrlList=e}});var m=!0;this.debugInfoEnabled=function(e){return z(e)?(m=e,this):m};var b=!1;this.strictComponentBindingsEnabled=function(e){return z(e)?(b=e,this):b};var y=10;this.onChangesTtl=function(e){return arguments.length?(y=e,this):y};var x=!0;this.commentDirectivesEnabled=function(e){return arguments.length?(x=e,this):x};var w=!0;this.cssClassDirectivesEnabled=function(e){return arguments.length?(w=e,this):w};var A=Le();this.addPropertySecurityContext=function(e,t,n){var r=e.toLowerCase()+"|"+t.toLowerCase();if(r in A&&A[r]!==n)throw pn("ctxoverride","Property context '{0}.{1}' already set to '{2}', cannot override to '{3}'.",e,t,A[r],n);return A[r]=n,this},function(){function e(e,t){k(t,(function(t){A[t.toLowerCase()]=e}))}e(Ur.HTML,["iframe|srcdoc","*|innerHTML","*|outerHTML"]),e(Ur.CSS,["*|style"]),e(Ur.URL,["area|href","area|ping","a|href","a|ping","blockquote|cite","body|background","del|cite","input|src","ins|cite","q|cite"]),e(Ur.MEDIA_URL,["audio|src","img|src","img|srcset","source|src","source|srcset","track|src","video|src","video|poster"]),e(Ur.RESOURCE_URL,["*|formAction","applet|code","applet|codebase","base|href","embed|src","frame|src","form|action","head|profile","html|manifest","iframe|src","link|href","media|src","object|codebase","object|data","script|src"])}(),this.$get=["$injector","$interpolate","$exceptionHandler","$templateRequest","$parse","$controller","$rootScope","$sce","$animate",function(t,n,p,h,E,S,C,$,_){var T,j=/^\w/,I=e.document.createElement("div"),N=x,z=w,B=y;function q(){try{if(!--B)throw T=void 0,pn("infchng","{0} $onChanges() iterations reached. Aborting!\n",y);C.$apply((function(){for(var e=0,t=T.length;e<t;++e)try{T[e]()}catch(e){p(e)}T=void 0}))}finally{B++}}function V(e,t){if(!e)return e;if(!F(e))throw pn("srcset",'Can\'t pass trusted values to `{0}`: "{1}"',t,e.toString());for(var n="",r=K(e),i=/\s/.test(r)?/(\s+\d+x\s*,|\s+\d+w\s*,|\s+,|,\s+)/:/(,)/,o=r.split(i),a=Math.floor(o.length/2),s=0;s<a;s++){var l=2*s;n+=$.getTrustedMediaUrl(K(o[l])),n+=" "+K(o[l+1])}var c=K(o[2*s]).split(/\s/);return n+=$.getTrustedMediaUrl(K(c[0])),2===c.length&&(n+=" "+K(c[1])),n}function W(e,t){if(t){var n,r,i,o=Object.keys(t);for(n=0,r=o.length;n<r;n++)this[i=o[n]]=t[i]}else this.$attr={};this.$$element=e}function Y(e,t){try{e.addClass(t)}catch(e){}}W.prototype={$normalize:yn,$addClass:function(e){e&&e.length>0&&_.addClass(this.$$element,e)},$removeClass:function(e){e&&e.length>0&&_.removeClass(this.$$element,e)},$updateClass:function(e,t){var n=xn(e,t);n&&n.length&&_.addClass(this.$$element,n);var r=xn(t,e);r&&r.length&&_.removeClass(this.$$element,r)},$set:function(e,t,n,r){var i=Rt(this.$$element[0],e),o=Dt[e],a=e;i?(this.$$element.prop(e,t),r=i):o&&(this[o]=t,a=o),this[e]=t,r?this.$attr[e]=r:(r=this.$attr[e])||(this.$attr[e]=r=Pe(e,"-")),"img"===ne(this.$$element)&&"srcset"===e&&(this[e]=t=V(t,"$set('srcset', value)")),!1!==n&&(null===t||M(t)?this.$$element.removeAttr(r):j.test(r)?i&&!1===t?this.$$element.removeAttr(r):this.$$element.attr(r,t):function(e,t,n){I.innerHTML="<span "+t+">";var r=I.firstChild.attributes,i=r[0];r.removeNamedItem(i.name),i.value=n,e.attributes.setNamedItem(i)}(this.$$element[0],r,t));var s=this.$$observers;s&&k(s[a],(function(e){try{e(t)}catch(e){p(e)}}))},$observe:function(e,t){var n=this,r=n.$$observers||(n.$$observers=Le()),i=r[e]||(r[e]=[]);return i.push(t),C.$evalAsync((function(){i.$$inter||!n.hasOwnProperty(e)||M(n[e])||t(n[e])})),function(){ie(i,t)}}};var Q=n.startSymbol(),J=n.endSymbol(),ee="{{"===Q&&"}}"===J?R:function(e){return e.replace(/\{\{/g,Q).replace(/}}/g,J)},te=/^ng(Attr|Prop|On)([A-Z].*)$/,re=/^(.+)Start$/;return oe.$$addBindingInfo=m?function(e,t){var n=e.data("$binding")||[];U(t)?n=n.concat(t):n.push(t),e.data("$binding",n)}:D,oe.$$addBindingClass=m?function(e){Y(e,"ng-binding")}:D,oe.$$addScopeInfo=m?function(e,t,n,r){var i=n?r?"$isolateScopeNoTemplate":"$isolateScope":"$scope";e.data(i,t)}:D,oe.$$addScopeClass=m?function(e,t){Y(e,t?"ng-isolate-scope":"ng-scope")}:D,oe.$$createComment=function(t,n){var r="";return m&&(r=" "+(t||"")+": ",n&&(r+=n+" ")),e.document.createComment(r)},oe;function oe(e,t,n,r,i){e instanceof a||(e=a(e));var o=le(e,t,e,n,r,i);oe.$$addScopeClass(e);var s=null;return function(t,n,r){if(!e)throw pn("multilink","This element has already been linked.");Ie(t,"scope"),i&&i.needsNewScope&&(t=t.$parent.$new());var l,c,u,d=(r=r||{}).parentBoundTranscludeFn,f=r.transcludeControllers,p=r.futureParentElement;if(d&&d.$$boundTransclude&&(d=d.$$boundTransclude),s||(c=(l=p)&&l[0],s=c&&"foreignobject"!==ne(c)&&v.call(c).match(/SVG/)?"svg":"html"),u="html"!==s?a($e(s,a("<div></div>").append(e).html())):n?Tt.clone.call(e):e,f)for(var h in f)u.data("$"+h+"Controller",f[h].instance);return oe.$$addScopeInfo(u,t),n&&n(u,t),o&&o(t,u,u,d),n||(e=o=null),u}}function le(e,t,n,r,i,s){for(var l,c,u,d,f,p,h,g=[],v=U(e)||e instanceof a,m=0;m<e.length;m++)l=new W,11===o&&ce(e,m,v),(u=(c=pe(e[m],[],l,0===m?r:void 0,i)).length?me(c,e[m],l,t,n,null,[],[],s):null)&&u.scope&&oe.$$addScopeClass(l.$$element),f=u&&u.terminal||!(d=e[m].childNodes)||!d.length?null:le(d,u?(u.transcludeOnThisElement||!u.templateOnThisElement)&&u.transclude:t),(u||f)&&(g.push(m,u,f),p=!0,h=h||u),s=null;return p?function(e,n,r,i){var o,s,l,c,u,d,f,p,v;if(h){var m=n.length;for(v=new Array(m),u=0;u<g.length;u+=3)f=g[u],v[f]=n[f]}else v=n;for(u=0,d=g.length;u<d;)l=v[g[u++]],o=g[u++],s=g[u++],o?(o.scope?(c=e.$new(),oe.$$addScopeInfo(a(l),c)):c=e,p=o.transcludeOnThisElement?ue(e,o.transclude,i):!o.templateOnThisElement&&i?i:!i&&t?ue(e,t):null,o(s,c,l,r,p)):s&&s(e,l.childNodes,void 0,i)}:null}function ce(e,t,n){var r,i=e[t],o=i.parentNode;if(i.nodeType===Fe)for(;(r=o?i.nextSibling:e[t+1])&&r.nodeType===Fe;)i.nodeValue=i.nodeValue+r.nodeValue,r.parentNode&&r.parentNode.removeChild(r),n&&r===e[t+1]&&e.splice(t+1,1)}function ue(e,t,n){function r(r,i,o,a,s){return r||((r=e.$new(!1,s)).$$transcluded=!0),t(r,i,{parentBoundTranscludeFn:n,transcludeControllers:o,futureParentElement:a})}var i=r.$$slots=Le();for(var o in t.$$slots)t.$$slots[o]?i[o]=ue(e,t.$$slots[o],n):i[o]=null;return r}function pe(e,t,r,o,a){var l,c,u,d=e.nodeType,f=r.$attr;switch(d){case 1:we(t,yn(c=ne(e)),"E",o,a);for(var p,h,g,v,m,b=e.attributes,y=0,x=b&&b.length;y<x;y++){var w,k=!1,A=!1,E=!1,S=!1,C=!1;h=(p=b[y]).name,v=p.value,(m=(g=yn(h.toLowerCase())).match(te))?(E="Attr"===m[1],S="Prop"===m[1],C="On"===m[1],h=h.replace(mn,"").toLowerCase().substr(4+m[1].length).replace(/_(.)/g,(function(e,t){return t.toUpperCase()}))):(w=g.match(re))&&ke(w[1])&&(k=h,A=h.substr(0,h.length-5)+"end",h=h.substr(0,h.length-6)),S||C?(r[g]=v,f[g]=p.name,S?_e(e,t,g,h):Te(t,g,h)):(f[g=yn(h.toLowerCase())]=h,!E&&r.hasOwnProperty(g)||(r[g]=v,Rt(e,g)&&(r[g]=!0)),je(e,t,v,g,E),we(t,g,"A",o,a,k,A))}if("input"===c&&"hidden"===e.getAttribute("type")&&e.setAttribute("autocomplete","off"),!z)break;if(L(u=e.className)&&(u=u.animVal),F(u)&&""!==u)for(;l=s.exec(u);)we(t,g=yn(l[2]),"C",o,a)&&(r[g]=K(l[3])),u=u.substr(l.index+l[0].length);break;case Fe:!function(e,t){var r=n(t,!0);r&&e.push({priority:0,compile:function(e){var t=e.parent(),n=!!t.length;return n&&oe.$$addBindingClass(t),function(e,t){var i=t.parent();n||oe.$$addBindingClass(i),oe.$$addBindingInfo(i,r.expressions),e.$watch(r,(function(e){t[0].nodeValue=e}))}}})}(t,e.nodeValue);break;case 8:if(!N)break;!function(e,t,n,r,o){try{var a=i.exec(e.nodeValue);if(a){var s=yn(a[1]);we(t,s,"M",r,o)&&(n[s]=K(a[2]))}}catch(e){}}(e,t,r,o,a)}return t.sort(Se),t}function he(e,t,n){var r=[],i=0;if(t&&e.hasAttribute&&e.hasAttribute(t))do{if(!e)throw pn("uterdir","Unterminated attribute, found '{0}' but no matching '{1}' found.",t,n);1===e.nodeType&&(e.hasAttribute(t)&&i++,e.hasAttribute(n)&&i--),r.push(e),e=e.nextSibling}while(i>0);else r.push(e);return a(r)}function ge(e,t,n){return function(r,i,o,a,s){return i=he(i[0],t,n),e(r,i,o,a,s)}}function ve(e,t,n,r,i,o){var a;return e?oe(t,n,r,i,o):function(){return a||(a=oe(t,n,r,i,o),t=n=o=null),a.apply(this,arguments)}}function me(t,n,r,i,o,s,l,c,u){u=u||{};for(var d,f,h,g,v,m=-Number.MAX_VALUE,b=u.newScopeDirective,y=u.controllerDirectives,x=u.newIsolateScopeDirective,w=u.templateDirective,A=u.nonTlbTranscludeDirective,E=!1,C=!1,$=u.hasElementTranscludeDirective,_=r.$$element=a(n),T=s,j=i,P=!1,D=!1,R=0,I=t.length;R<I;R++){var N=(d=t[R]).$$start,z=d.$$end;if(N&&(_=he(n,N,z)),h=void 0,m>d.priority)break;if((v=d.scope)&&(d.templateUrl||(L(v)?(Ce("new/isolated scope",x||b,d,_),x=d):Ce("new/isolated scope",x,d,_)),b=b||d),f=d.name,!P&&(d.replace&&(d.templateUrl||d.template)||d.transclude&&!d.$$tlb)){for(var B,F=R+1;B=t[F++];)if(B.transclude&&!B.$$tlb||B.replace&&(B.templateUrl||B.template)){D=!0;break}P=!0}if(!d.templateUrl&&d.controller&&(y=y||Le(),Ce("'"+f+"' controller",y[f],d,_),y[f]=d),v=d.transclude)if(E=!0,d.$$tlb||(Ce("transclusion",A,d,_),A=d),"element"===v)$=!0,m=d.priority,h=_,_=r.$$element=a(oe.$$createComment(f,r[f])),n=_[0],De(o,de(h),n),j=ve(D,h,i,m,T&&T.name,{nonTlbTranscludeDirective:A});else{var q=Le();if(L(v)){h=e.document.createDocumentFragment();var V=Le(),H=Le();for(var Y in k(v,(function(e,t){var n="?"===e.charAt(0);e=n?e.substring(1):e,V[e]=t,q[t]=null,H[t]=n})),k(_.contents(),(function(t){var n=V[yn(ne(t))];n?(H[n]=!0,q[n]=q[n]||e.document.createDocumentFragment(),q[n].appendChild(t)):h.appendChild(t)})),k(H,(function(e,t){if(!e)throw pn("reqslot","Required transclusion slot `{0}` was not filled.",t)})),q)if(q[Y]){var Z=a(q[Y].childNodes);q[Y]=ve(D,Z,i)}h=a(h.childNodes)}else h=a(pt(n)).contents();_.empty(),(j=ve(D,h,i,void 0,void 0,{needsNewScope:d.$$isolateScope||d.$$newScope})).$$slots=q}if(d.template)if(C=!0,Ce("template",w,d,_),w=d,v=G(d.template)?d.template(_,r):d.template,v=ee(v),d.replace){if(T=d,h=lt(v)?[]:wn($e(d.templateNamespace,K(v))),n=h[0],1!==h.length||1!==n.nodeType)throw pn("tplrt","Template for directive '{0}' must have exactly one root element. {1}",f,"");De(o,_,n);var Q={$attr:{}},J=pe(n,[],Q),te=t.splice(R+1,t.length-(R+1));(x||b)&&ye(J,x,b),t=t.concat(J).concat(te),Ae(r,Q),I=t.length}else _.html(v);if(d.templateUrl)C=!0,Ce("template",w,d,_),w=d,d.replace&&(T=d),ae=Ee(t.splice(R,t.length-R),_,r,o,E&&j,l,c,{controllerDirectives:y,newScopeDirective:b!==d&&b,newIsolateScopeDirective:x,templateDirective:w,nonTlbTranscludeDirective:A}),I=t.length;else if(d.compile)try{g=d.compile(_,r,j);var re=d.$$originalDirective||d;G(g)?ie(null,fe(re,g),N,z):g&&ie(fe(re,g.pre),fe(re,g.post),N,z)}catch(e){p(e,xe(_))}d.terminal&&(ae.terminal=!0,m=Math.max(m,d.priority))}return ae.scope=b&&!0===b.scope,ae.transcludeOnThisElement=E,ae.templateOnThisElement=C,ae.transclude=j,u.hasElementTranscludeDirective=$,ae;function ie(e,t,n,r){e&&(n&&(e=ge(e,n,r)),e.require=d.require,e.directiveName=f,(x===d||d.$$isolateScope)&&(e=Re(e,{isolateScope:!0})),l.push(e)),t&&(n&&(t=ge(t,n,r)),t.require=d.require,t.directiveName=f,(x===d||d.$$isolateScope)&&(t=Re(t,{isolateScope:!0})),c.push(t))}function ae(e,t,i,o,s){var u,d,f,h,g,v,m,A,E,C;for(var _ in n===i?(E=r,A=r.$$element):E=new W(A=a(i),r),g=t,x?h=t.$new(!0):b&&(g=t.$parent),s&&((m=function(e,t,n,r){var i;X(e)||(r=n,n=t,t=e,e=void 0);$&&(i=v);n||(n=$?A.parent():A);if(!r)return s(e,t,i,n,D);var o=s.$$slots[r];if(o)return o(e,t,i,n,D);if(M(o))throw pn("noslot",'No parent directive that requires a transclusion with slot name "{0}". Element: {1}',r,xe(A))}).$$boundTransclude=s,m.isSlotFilled=function(e){return!!s.$$slots[e]}),y&&(v=function(e,t,n,r,i,o,a){var s=Le();for(var l in r){var c=r[l],u={$scope:c===a||c.$$isolateScope?i:o,$element:e,$attrs:t,$transclude:n},d=c.controller;"@"===d&&(d=t[c.name]);var f=S(d,u,!0,c.controllerAs);s[c.name]=f,e.data("$"+c.name+"Controller",f.instance)}return s}(A,E,m,y,h,t,x)),x&&(oe.$$addScopeInfo(A,h,!0,!(w&&(w===x||w===x.$$originalDirective))),oe.$$addScopeClass(A,!0),h.$$isolateBindings=x.$$isolateBindings,(C=ze(t,E,h,h.$$isolateBindings,x)).removeWatches&&h.$on("$destroy",C.removeWatches)),v){var T=y[_],j=v[_],P=T.$$bindings.bindToController;j.instance=j(),A.data("$"+T.name+"Controller",j.instance),j.bindingInfo=ze(g,E,j.instance,P,T)}for(k(y,(function(e,t){var n=e.require;e.bindToController&&!U(n)&&L(n)&&O(v[t].instance,be(t,n,A,v))})),k(v,(function(e){var t=e.instance;if(G(t.$onChanges))try{t.$onChanges(e.bindingInfo.initialChanges)}catch(e){p(e)}if(G(t.$onInit))try{t.$onInit()}catch(e){p(e)}G(t.$doCheck)&&(g.$watch((function(){t.$doCheck()})),t.$doCheck()),G(t.$onDestroy)&&g.$on("$destroy",(function(){t.$onDestroy()}))})),u=0,d=l.length;u<d;u++)Ne(f=l[u],f.isolateScope?h:t,A,E,f.require&&be(f.directiveName,f.require,A,v),m);var D=t;for(x&&(x.template||null===x.templateUrl)&&(D=h),e&&e(D,i.childNodes,void 0,s),u=c.length-1;u>=0;u--)Ne(f=c[u],f.isolateScope?h:t,A,E,f.require&&be(f.directiveName,f.require,A,v),m);k(v,(function(e){var t=e.instance;G(t.$postLink)&&t.$postLink()}))}}function be(e,t,n,r){var i;if(F(t)){var o=t.match(c),a=t.substring(o[0].length),s=o[1]||o[3],l="?"===o[2];if("^^"===s?n=n.parent():i=(i=r&&r[a])&&i.instance,!i){var u="$"+a+"Controller";i="^^"===s&&n[0]&&9===n[0].nodeType?null:s?n.inheritedData(u):n.data(u)}if(!i&&!l)throw pn("ctreq","Controller '{0}', required by directive '{1}', can't be found!",a,e)}else if(U(t)){i=[];for(var d=0,f=t.length;d<f;d++)i[d]=be(e,t[d],n,r)}else L(t)&&(i={},k(t,(function(t,o){i[o]=be(e,t,n,r)})));return i||null}function ye(e,t,n){for(var r=0,i=e.length;r<i;r++)e[r]=P(e[r],{$$isolateScope:t,$$newScope:n})}function we(e,n,i,o,a,s,l){if(n===a)return null;var c=null;if(r.hasOwnProperty(n))for(var u,d=t.get(n+"Directive"),f=0,p=d.length;f<p;f++)if(u=d[f],(M(o)||o>u.priority)&&-1!==u.restrict.indexOf(i)){if(s&&(u=P(u,{$$start:s,$$end:l})),!u.$$bindings){var h=u.$$bindings=g(u,u.name);L(h.isolateScope)&&(u.$$isolateBindings=h.isolateScope)}e.push(u),c=u}return c}function ke(e){if(r.hasOwnProperty(e))for(var n=t.get(e+"Directive"),i=0,o=n.length;i<o;i++)if(n[i].multiElement)return!0;return!1}function Ae(e,t){var n=t.$attr,r=e.$attr;k(e,(function(r,i){"$"!==i.charAt(0)&&(t[i]&&t[i]!==r&&(r.length?r+=("style"===i?";":" ")+t[i]:r=t[i]),e.$set(i,r,!0,n[i]))})),k(t,(function(t,i){e.hasOwnProperty(i)||"$"===i.charAt(0)||(e[i]=t,"class"!==i&&"style"!==i&&(r[i]=n[i]))}))}function Ee(e,t,n,r,i,o,s,l){var c,u,d=[],f=t[0],g=e.shift(),v=P(g,{templateUrl:null,transclude:null,replace:null,$$originalDirective:g}),m=G(g.templateUrl)?g.templateUrl(t,n):g.templateUrl,b=g.templateNamespace;return t.empty(),h(m).then((function(p){var h,y,x,w;if(p=ee(p),g.replace){if(x=lt(p)?[]:wn($e(b,K(p))),h=x[0],1!==x.length||1!==h.nodeType)throw pn("tplrt","Template for directive '{0}' must have exactly one root element. {1}",g.name,m);y={$attr:{}},De(r,t,h);var A=pe(h,[],y);L(g.scope)&&ye(A,!0),e=A.concat(e),Ae(n,y)}else h=f,t.html(p);for(e.unshift(v),c=me(e,h,n,i,t,g,o,s,l),k(r,(function(e,n){e===h&&(r[n]=t[0])})),u=le(t[0].childNodes,i);d.length;){var E=d.shift(),S=d.shift(),C=d.shift(),$=d.shift(),O=t[0];if(!E.$$destroyed){if(S!==f){var _=S.className;l.hasElementTranscludeDirective&&g.replace||(O=pt(h)),De(C,a(S),O),Y(a(O),_)}w=c.transcludeOnThisElement?ue(E,c.transclude,$):$,c(u,E,O,r,w)}}d=null})).catch((function(e){H(e)&&p(e)})),function(e,t,n,r,i){var o=i;t.$$destroyed||(d?d.push(t,n,r,o):(c.transcludeOnThisElement&&(o=ue(t,c.transclude,i)),c(u,t,n,r,o)))}}function Se(e,t){var n=t.priority-e.priority;return 0!==n?n:e.name!==t.name?e.name<t.name?-1:1:e.index-t.index}function Ce(e,t,n,r){function i(e){return e?" (module: "+e+")":""}if(t)throw pn("multidir","Multiple directives [{0}{1}, {2}{3}] asking for {4} on: {5}",t.name,i(t.$$moduleName),n.name,i(n.$$moduleName),e,xe(r))}function $e(t,n){switch(t=d(t||"html")){case"svg":case"math":var r=e.document.createElement("div");return r.innerHTML="<"+t+">"+n+"</"+t+">",r.childNodes[0].childNodes;default:return n}}function Oe(e){return V($.valueOf(e),"ng-prop-srcset")}function _e(e,t,n,r){if(f.test(r))throw pn("nodomevents","Property bindings for HTML DOM event properties are disallowed");var i=ne(e),o=function(e,t){var n=t.toLowerCase();return A[e+"|"+n]||A["*|"+n]}(i,r),a=R;"srcset"!==r||"img"!==i&&"source"!==i?o&&(a=$.getTrusted.bind($,o)):a=Oe,t.push({priority:100,compile:function(e,t){var i=E(t[n]),o=E(t[n],(function(e){return $.valueOf(e)}));return{pre:function(e,t){function n(){var n=i(e);t[0][r]=a(n)}n(),e.$watch(o,n)}}}})}function Te(e,t,n){e.push(Po(E,C,p,t,n,!1))}function je(e,t,r,i,o){var a=ne(e),s=function(e,t){return"srcdoc"===t?$.HTML:"src"===t||"ngSrc"===t?-1===["img","video","audio","source","track"].indexOf(e)?$.RESOURCE_URL:$.MEDIA_URL:"xlinkHref"===t?"image"===e?$.MEDIA_URL:"a"===e?$.URL:$.RESOURCE_URL:"form"===e&&"action"===t||"base"===e&&"href"===t||"link"===e&&"href"===t?$.RESOURCE_URL:"a"!==e||"href"!==t&&"ngHref"!==t?void 0:$.URL}(a,i),c=!o,u=l[i]||o,d=n(r,c,s,u);if(d){if("multiple"===i&&"select"===a)throw pn("selmulti","Binding to the 'multiple' attribute is not supported. Element: {0}",xe(e));if(f.test(i))throw pn("nodomevents","Interpolations for HTML DOM event attributes are disallowed");t.push({priority:100,compile:function(){return{pre:function(e,t,o){var a=o.$$observers||(o.$$observers=Le()),l=o[i];l!==r&&(d=l&&n(l,!0,s,u),r=l),d&&(o[i]=d(e),(a[i]||(a[i]=[])).$$inter=!0,(o.$$observers&&o.$$observers[i].$$scope||e).$watch(d,(function(e,t){"class"===i&&e!==t?o.$updateClass(e,t):o.$set(i,e)})))}}}})}}function De(t,n,r){var i,o,s=n[0],l=n.length,c=s.parentNode;if(t)for(i=0,o=t.length;i<o;i++)if(t[i]===s){t[i++]=r;for(var u=i,d=u+l-1,f=t.length;u<f;u++,d++)d<f?t[u]=t[d]:delete t[u];t.length-=l-1,t.context===s&&(t.context=r);break}c&&c.replaceChild(r,s);var p=e.document.createDocumentFragment();for(i=0;i<l;i++)p.appendChild(n[i]);for(a.hasData(s)&&(a.data(r,a.data(s)),a(s).off("$destroy")),a.cleanData(p.querySelectorAll("*")),i=1;i<l;i++)delete n[i];n[0]=r,n.length=1}function Re(e,t){return O((function(){return e.apply(null,arguments)}),e,t)}function Ne(e,t,n,r,i,o){try{e(t,n,r,i,o)}catch(e){p(e,xe(n))}}function Me(e,t){if(b)throw pn("missingattr","Attribute '{0}' of '{1}' is non-optional and must be set!",e,t)}function ze(e,t,r,i,o){var a,s=[],l={};function c(t,n,i){G(r.$onChanges)&&!ae(n,i)&&(T||(e.$$postDigest(q),T=[]),a||(a={},T.push(d)),a[t]&&(i=a[t].previousValue),a[t]=new vn(i,n))}function d(){r.$onChanges(a),a=void 0}return k(i,(function(i,a){var d,f,p,h,g,v=i.attrName,m=i.optional;switch(i.mode){case"@":m||u.call(t,v)||(Me(v,o.name),r[a]=t[v]=void 0),g=t.$observe(v,(function(e){if(F(e)||Z(e)){var t=r[a];c(a,e,t),r[a]=e}})),t.$$observers[v].$$scope=e,F(d=t[v])?r[a]=n(d)(e):Z(d)&&(r[a]=d),l[a]=new vn(hn,r[a]),s.push(g);break;case"=":if(!u.call(t,v)){if(m)break;Me(v,o.name),t[v]=void 0}if(m&&!t[v])break;f=E(t[v]),h=f.literal?se:ae,p=f.assign||function(){throw d=r[a]=f(e),pn("nonassign","Expression '{0}' in attribute '{1}' used with directive '{2}' is non-assignable!",t[v],v,o.name)},d=r[a]=f(e);var b=function(t){return h(t,r[a])||(h(t,d)?p(e,t=r[a]):r[a]=t),d=t};b.$stateful=!0,g=i.collection?e.$watchCollection(t[v],b):e.$watch(E(t[v],b),null,f.literal),s.push(g);break;case"<":if(!u.call(t,v)){if(m)break;Me(v,o.name),t[v]=void 0}if(m&&!t[v])break;var y=(f=E(t[v])).literal,x=r[a]=f(e);l[a]=new vn(hn,r[a]),g=e[i.collection?"$watchCollection":"$watch"](f,(function(e,t){if(t===e){if(t===x||y&&se(t,x))return;t=x}c(a,e,t),r[a]=e})),s.push(g);break;case"&":if(m||u.call(t,v)||Me(v,o.name),(f=t.hasOwnProperty(v)?E(t[v]):D)===D&&m)break;r[a]=function(t){return f(e,t)}}})),{initialChanges:l,removeWatches:s.length&&function(){for(var e=0,t=s.length;e<t;++e)s[e]()}}}}]}function vn(e,t){this.previousValue=e,this.currentValue=t}gn.$inject=["$provide","$$sanitizeUriProvider"],vn.prototype.isFirstChange=function(){return this.previousValue===hn};var mn=/^((?:x|data)[:\-_])/i,bn=/[:\-_]+(.)/g;function yn(e){return e.replace(mn,"").replace(bn,(function(e,t,n){return n?t.toUpperCase():t}))}function xn(e,t){var n="",r=e.split(/\s+/),i=t.split(/\s+/);e:for(var o=0;o<r.length;o++){for(var a=r[o],s=0;s<i.length;s++)if(a===i[s])continue e;n+=(n.length>0?" ":"")+a}return n}function wn(e){var t=(e=a(e)).length;if(t<=1)return e;for(;t--;){var n=e[t];(8===n.nodeType||n.nodeType===Fe&&""===n.nodeValue.trim())&&h.call(e,t,1)}return e}var kn=i("$controller"),An=/^(\S+)(\s+as\s+([\w$]+))?$/;function En(e,t){if(t&&F(t))return t;if(F(e)){var n=An.exec(e);if(n)return n[3]}}function Sn(){var e={};this.has=function(t){return e.hasOwnProperty(t)},this.register=function(t,n){Me(t,"controller"),L(t)?O(e,t):e[t]=n},this.$get=["$injector",function(t){return function(r,i,o,a){var s,l,c,u;if(o=!0===o,a&&F(a)&&(u=a),F(r)){if(!(l=r.match(An)))throw kn("ctrlfmt","Badly formed controller string '{0}'. Must match `__name__ as __id__` or `__name__`.",r);if(c=l[1],u=u||l[3],!(r=e.hasOwnProperty(c)?e[c]:function(e,t,n){if(!t)return e;for(var r,i=t.split("."),o=e,a=i.length,s=0;s<a;s++)r=i[s],e&&(e=(o=e)[r]);return!n&&G(e)?fe(o,e):e}(i.$scope,c,!0)))throw kn("ctrlreg","The controller with the name '{0}' is not registered.",c);Ne(r,c,!0)}if(o){var d=(U(r)?r[r.length-1]:r).prototype;return s=Object.create(d||null),u&&n(i,u,s,c||r.name),O((function(){var e=t.invoke(r,s,i,c);return e!==s&&(L(e)||G(e))&&(s=e,u&&n(i,u,s,c||r.name)),s}),{instance:s,identifier:u})}return s=t.instantiate(r,i,c),u&&n(i,u,s,c||r.name),s};function n(e,t,n,r){if(!e||!L(e.$scope))throw i("$controller")("noscp","Cannot export controller '{0}' as '{1}'! No $scope object provided via `locals`.",r,t);e.$scope[t]=n}}]}function Cn(){this.$get=["$window",function(e){return a(e.document)}]}function $n(){this.$get=["$document","$rootScope",function(e,t){var n=e[0],r=n&&n.hidden;function i(){r=n.hidden}return e.on("visibilitychange",i),t.$on("$destroy",(function(){e.off("visibilitychange",i)})),function(){return r}}]}function On(){this.$get=["$log",function(e){return function(t,n){e.error.apply(e,arguments)}}]}var _n=function(){this.$get=["$document",function(e){return function(t){return t?!t.nodeType&&t instanceof a&&(t=t[0]):t=e[0].body,t.offsetWidth+1}}]},Tn={"Content-Type":"application/json;charset=utf-8"},jn=/^\[|^\{(?!\{)/,Pn={"[":/]$/,"{":/}$/},Dn=/^\)]\}',?\n/,Rn=i("$http");function In(e){return L(e)?V(e)?e.toISOString():he(e):e}function Nn(){this.$get=function(){return function(e){if(!e)return"";var t=[];return A(e,(function(e,n){null===e||M(e)||G(e)||(U(e)?k(e,(function(e){t.push(Ee(n)+"="+Ee(In(e)))})):t.push(Ee(n)+"="+Ee(In(e))))})),t.join("&")}}}function Mn(){this.$get=function(){return function(e){if(!e)return"";var t=[];return function e(n,r,i){U(n)?k(n,(function(t,n){e(t,r+"["+(L(t)?n:"")+"]")})):L(n)&&!V(n)?A(n,(function(t,n){e(t,r+(i?"":"[")+n+(i?"":"]"))})):(G(n)&&(n=n()),t.push(Ee(r)+"="+(null==n?"":Ee(In(n)))))}(e,"",!0),t.join("&")}}}function zn(e,t){if(F(e)){var n=e.replace(Dn,"").trim();if(n){var r=t("Content-Type"),i=r&&0===r.indexOf("application/json");if(i||(a=(o=n).match(jn))&&Pn[a[0]].test(o))try{e=ge(n)}catch(t){if(!i)return e;throw Rn("baddata",'Data must be a valid JSON object. Received: "{0}". Parse error: "{1}"',e,t)}}}var o,a;return e}function Ln(e){var t,n=Le();function r(e,t){e&&(n[e]=n[e]?n[e]+", "+t:t)}return F(e)?k(e.split("\n"),(function(e){t=e.indexOf(":"),r(d(K(e.substr(0,t))),K(e.substr(t+1)))})):L(e)&&k(e,(function(e,t){r(d(t),K(e))})),n}function Bn(e){var t;return function(n){if(t||(t=Ln(e)),n){var r=t[d(n)];return void 0===r&&(r=null),r}return t}}function Fn(e,t,n,r){return G(r)?r(e,t,n):(k(r,(function(r){e=r(e,t,n)})),e)}function qn(e){return 200<=e&&e<300}function Vn(){var e=this.defaults={transformResponse:[zn],transformRequest:[function(e){return!L(e)||(t=e,"[object File]"===v.call(t))||function(e){return"[object Blob]"===v.call(e)}(e)||function(e){return"[object FormData]"===v.call(e)}(e)?e:he(e);var t}],headers:{common:{Accept:"application/json, text/plain, */*"},post:qe(Tn),put:qe(Tn),patch:qe(Tn)},xsrfCookieName:"XSRF-TOKEN",xsrfHeaderName:"X-XSRF-TOKEN",paramSerializer:"$httpParamSerializer",jsonpCallbackParam:"callback"},t=!1;this.useApplyAsync=function(e){return z(e)?(t=!!e,this):t};var n=this.interceptors=[],r=this.xsrfTrustedOrigins=[];Object.defineProperty(this,"xsrfWhitelistedOrigins",{get:function(){return this.xsrfTrustedOrigins},set:function(e){this.xsrfTrustedOrigins=e}}),this.$get=["$browser","$httpBackend","$$cookieReader","$cacheFactory","$rootScope","$q","$injector","$sce",function(o,a,s,l,c,u,p,h){var g=l("$http");e.paramSerializer=F(e.paramSerializer)?p.get(e.paramSerializer):e.paramSerializer;var v=[];k(n,(function(e){v.unshift(F(e)?p.get(e):p.invoke(e))}));var m,b=(m=[ai].concat(r.map(li)),function(e){var t=li(e);return m.some(ci.bind(null,t))});function y(n){if(!L(n))throw i("$http")("badreq","Http request configuration must be an object. Received: {0}",n);if(!F(h.valueOf(n.url)))throw i("$http")("badreq","Http request configuration url must be a string or a $sce trusted object. Received: {0}",n.url);var r=O({method:"get",transformRequest:e.transformRequest,transformResponse:e.transformResponse,paramSerializer:e.paramSerializer,jsonpCallbackParam:e.jsonpCallbackParam},n);r.headers=function(t){var n,r,i,o=e.headers,a=O({},t.headers);o=O({},o.common,o[d(t.method)]);e:for(n in o){for(i in r=d(n),a)if(d(i)===r)continue e;a[n]=o[n]}return function(e,t){var n,r={};return k(e,(function(e,i){G(e)?null!=(n=e(t))&&(r[i]=n):r[i]=e})),r}(a,qe(t))}(n),r.method=f(r.method),r.paramSerializer=F(r.paramSerializer)?p.get(r.paramSerializer):r.paramSerializer,o.$$incOutstandingRequestCount("$http");var l=[],m=[],x=u.resolve(r);return k(v,(function(e){(e.request||e.requestError)&&l.unshift(e.request,e.requestError),(e.response||e.responseError)&&m.push(e.response,e.responseError)})),x=w(x,l),x=(x=w(x=x.then((function(n){var r=n.headers,i=Fn(n.data,Bn(r),void 0,n.transformRequest);M(i)&&k(r,(function(e,t){"content-type"===d(t)&&delete r[t]}));M(n.withCredentials)&&!M(e.withCredentials)&&(n.withCredentials=e.withCredentials);return function(n,r){var i,o,l=u.defer(),f=l.promise,p=n.headers,v="jsonp"===d(n.method),m=n.url;v?m=h.getTrustedResourceUrl(m):F(m)||(m=h.valueOf(m));m=function(e,t){t.length>0&&(e+=(-1===e.indexOf("?")?"?":"&")+t);return e}(m,n.paramSerializer(n.params)),v&&(m=function(e,t){var n=e.split("?");if(n.length>2)throw Rn("badjsonp",'Illegal use more than one "?", in url, "{1}"',e);return k(ke(n[1]),(function(n,r){if("JSON_CALLBACK"===n)throw Rn("badjsonp",'Illegal use of JSON_CALLBACK in url, "{0}"',e);if(r===t)throw Rn("badjsonp",'Illegal use of callback param, "{0}", in url, "{1}"',t,e)})),e+=(-1===e.indexOf("?")?"?":"&")+t+"=JSON_CALLBACK"}(m,n.jsonpCallbackParam));y.pendingRequests.push(n),f.then(S,S),!n.cache&&!e.cache||!1===n.cache||"GET"!==n.method&&"JSONP"!==n.method||(i=L(n.cache)?n.cache:L(e.cache)?e.cache:g);i&&(z(o=i.get(m))?Q(o)?o.then(E,E):U(o)?A(o[1],o[0],qe(o[2]),o[3],o[4]):A(o,200,{},"OK","complete"):i.put(m,f));if(M(o)){var x=b(n.url)?s()[n.xsrfCookieName||e.xsrfCookieName]:void 0;x&&(p[n.xsrfHeaderName||e.xsrfHeaderName]=x),a(n.method,m,r,(function(e,n,r,o,a){i&&(qn(e)?i.put(m,[e,n,Ln(r),o,a]):i.remove(m));function s(){A(n,e,r,o,a)}t?c.$applyAsync(s):(s(),c.$$phase||c.$apply())}),p,n.timeout,n.withCredentials,n.responseType,w(n.eventHandlers),w(n.uploadEventHandlers))}return f;function w(e){if(e){var n={};return k(e,(function(e,r){n[r]=function(n){function r(){e(n)}t?c.$applyAsync(r):c.$$phase?r():c.$apply(r)}})),n}}function A(e,t,r,i,o){(qn(t=t>=-1?t:0)?l.resolve:l.reject)({data:e,status:t,headers:Bn(r),config:n,statusText:i,xhrStatus:o})}function E(e){A(e.data,e.status,qe(e.headers()),e.statusText,e.xhrStatus)}function S(){var e=y.pendingRequests.indexOf(n);-1!==e&&y.pendingRequests.splice(e,1)}}(n,i).then(A,A)})),m)).finally((function(){o.$$completeOutstandingRequest(D,"$http")}));function w(e,t){for(var n=0,r=t.length;n<r;){var i=t[n++],o=t[n++];e=e.then(i,o)}return t.length=0,e}function A(e){var t=O({},e);return t.data=Fn(e.data,e.headers,e.status,r.transformResponse),qn(e.status)?t:u.reject(t)}}return y.pendingRequests=[],function(e){k(arguments,(function(e){y[e]=function(t,n){return y(O({},n||{},{method:e,url:t}))}}))}("get","delete","head","jsonp"),function(e){k(arguments,(function(e){y[e]=function(t,n,r){return y(O({},r||{},{method:e,url:t,data:n}))}}))}("post","put","patch"),y.defaults=e,y}]}function Un(){this.$get=function(){return function(){return new e.XMLHttpRequest}}}function Hn(){this.$get=["$browser","$jsonpCallbacks","$document","$xhrFactory",function(e,t,n,r){return function(e,t,n,r,i){return function(o,a,s,l,c,u,f,p,h,g){if(a=a||e.url(),"jsonp"===d(o))var v=r.createCallback(a),m=function(e,t,n){e=e.replace("JSON_CALLBACK",t);var o=i.createElement("script"),a=null;return o.type="text/javascript",o.src=e,o.async=!0,a=function(e){o.removeEventListener("load",a),o.removeEventListener("error",a),i.body.removeChild(o),o=null;var s=-1,l="unknown";e&&("load"!==e.type||r.wasCalled(t)||(e={type:"error"}),l=e.type,s="error"===e.type?404:200),n&&n(s,l)},o.addEventListener("load",a),o.addEventListener("error",a),i.body.appendChild(o),a}(a,v,(function(e,t){var n=200===e&&r.getResponse(v);A(l,e,n,"",t,"complete"),r.removeCallback(v)}));else{var b=t(o,a),y=!1;b.open(o,a,!0),k(c,(function(e,t){z(e)&&b.setRequestHeader(t,e)})),b.onload=function(){var e=b.statusText||"",t="response"in b?b.response:b.responseText,n=1223===b.status?204:b.status;0===n&&(n=t?200:"file"===li(a).protocol?404:0),A(l,n,t,b.getAllResponseHeaders(),e,"complete")};if(b.onerror=function(){A(l,-1,null,null,"","error")},b.ontimeout=function(){A(l,-1,null,null,"","timeout")},b.onabort=function(){A(l,-1,null,null,"",y?"timeout":"abort")},k(h,(function(e,t){b.addEventListener(t,e)})),k(g,(function(e,t){b.upload.addEventListener(t,e)})),f&&(b.withCredentials=!0),p)try{b.responseType=p}catch(e){if("json"!==p)throw e}b.send(M(s)?null:s)}if(u>0)var x=n((function(){w("timeout")}),u);else Q(u)&&u.then((function(){w(z(u.$$timeoutId)?"timeout":"abort")}));function w(e){y="timeout"===e,m&&m(),b&&b.abort()}function A(e,t,r,i,o,a){z(x)&&n.cancel(x),m=b=null,e(t,r,i,o,a)}}}(e,r,e.defer,t,n[0])}]}var Gn=y.$interpolateMinErr=i("$interpolate");function Wn(){var e="{{",t="}}";this.startSymbol=function(t){return t?(e=t,this):e},this.endSymbol=function(e){return e?(t=e,this):t},this.$get=["$parse","$exceptionHandler","$sce",function(n,r,i){var o=e.length,a=t.length,s=new RegExp(e.replace(/./g,c),"g"),l=new RegExp(t.replace(/./g,c),"g");function c(e){return"\\\\\\"+e}function u(n){return n.replace(s,e).replace(l,t)}function d(e,t,n,r){var i=e.$watch((function(e){return i(),r(e)}),t,n);return i}function f(s,l,c,f){var p=c===i.URL||c===i.MEDIA_URL;if(!s.length||-1===s.indexOf(e)){if(l)return;var h=u(s);p&&(h=i.getTrusted(c,h));var g=I(h);return g.exp=s,g.expressions=[],g.$$watchDelegate=d,g}f=!!f;for(var v,m,b,y,x,w=0,k=[],A=s.length,E=[],S=[];w<A;){if(-1===(v=s.indexOf(e,w))||-1===(m=s.indexOf(t,v+o))){w!==A&&E.push(u(s.substring(w)));break}w!==v&&E.push(u(s.substring(w,v))),y=s.substring(v+o,m),k.push(y),w=m+a,S.push(E.length),E.push("")}x=1===E.length&&1===S.length;var C=p&&x?void 0:function(e){try{return e=c&&!p?i.getTrusted(c,e):i.valueOf(e),f&&!z(e)?e:Be(e)}catch(e){r(Gn.interr(s,e))}};if(b=k.map((function(e){return n(e,C)})),!l||k.length){var $=function(e){for(var t=0,n=k.length;t<n;t++){if(f&&M(e[t]))return;E[S[t]]=e[t]}return p?i.getTrusted(c,x?E[0]:E.join("")):(c&&E.length>1&&Gn.throwNoconcat(s),E.join(""))};return O((function(e){var t=0,n=k.length,i=new Array(n);try{for(;t<n;t++)i[t]=b[t](e);return $(i)}catch(e){r(Gn.interr(s,e))}}),{exp:s,expressions:k,$$watchDelegate:function(e,t){var n;return e.$watchGroup(b,(function(r,i){var o=$(r);t.call(this,o,r!==i?n:o,e),n=o}))}})}}return f.startSymbol=function(){return e},f.endSymbol=function(){return t},f}]}Gn.throwNoconcat=function(e){throw Gn("noconcat","Error while interpolating: {0}\nStrict Contextual Escaping disallows interpolations that concatenate multiple expressions when a trusted value is required. See http://docs.angularjs.org/api/ng.$sce",e)},Gn.interr=function(e,t){return Gn("interr","Can't interpolate: {0}\n{1}",e,t.toString())};var Yn=i("$interval");function Xn(){this.$get=["$$intervalFactory","$window",function(e,t){var n={},r=function(e){t.clearInterval(e),delete n[e]},i=e((function(e,r,i){var o=t.setInterval(e,r);return n[o]=i,o}),r);return i.cancel=function(e){if(!e)return!1;if(!e.hasOwnProperty("$$intervalId"))throw Yn("badprom","`$interval.cancel()` called with a promise that was not generated by `$interval()`.");if(!n.hasOwnProperty(e.$$intervalId))return!1;var t=e.$$intervalId,i=n[t];return Lr(i.promise),i.reject("canceled"),r(t),!0},i}]}function Zn(){this.$get=["$browser","$q","$$q","$rootScope",function(e,t,n,r){return function(i,o){return function(a,s,l,c){var u=arguments.length>4,d=u?de(arguments,4):[],f=0,p=z(c)&&!c,h=(p?n:t).defer(),g=h.promise;function v(){u?a.apply(null,d):a(f)}function m(){p?e.defer(v):r.$evalAsync(v),h.notify(f++),l>0&&f>=l&&(h.resolve(f),o(g.$$intervalId)),p||r.$apply()}return l=z(l)?l:0,g.$$intervalId=i(m,s,h,p),g}}}]}var Qn=function(){this.$get=function(){var e=y.callbacks,t={};return{createCallback:function(n){var r="_"+(e.$$counter++).toString(36),i="angular.callbacks."+r,o=function(e){var t=function(e){t.data=e,t.called=!0};return t.id=e,t}(r);return t[i]=e[r]=o,i},wasCalled:function(e){return t[e].called},getResponse:function(e){return t[e].data},removeCallback:function(n){var r=t[n];delete e[r.id],delete t[n]}}}},Jn=/^([^?#]*)(\?([^#]*))?(#(.*))?$/,Kn={http:80,https:443,ftp:21},er=i("$location");function tr(e,t,n){var r,i=(r=[],k(t,(function(e,t){U(e)?k(e,(function(e){r.push(Ee(t,!0)+(!0===e?"":"="+Ee(e,!0)))})):r.push(Ee(t,!0)+(!0===e?"":"="+Ee(e,!0)))})),r.length?r.join("&"):""),o=n?"#"+Ae(n):"";return function(e){for(var t=e.split("/"),n=t.length;n--;)t[n]=Ae(t[n].replace(/%2F/g,"/"));return t.join("/")}(e)+(i?"?"+i:"")+o}function nr(e,t){var n=li(e);t.$$protocol=n.protocol,t.$$host=n.hostname,t.$$port=T(n.port)||Kn[n.protocol]||null}var rr=/^\s*[\\/]{2,}/;function ir(e,t,n){if(rr.test(e))throw er("badpath",'Invalid url "{0}".',e);var r="/"!==e.charAt(0);r&&(e="/"+e);var i=li(e),o=r&&"/"===i.pathname.charAt(0)?i.pathname.substring(1):i.pathname;t.$$path=function(e,t){for(var n=e.split("/"),r=n.length;r--;)n[r]=decodeURIComponent(n[r]),t&&(n[r]=n[r].replace(/\//g,"%2F"));return n.join("/")}(o,n),t.$$search=ke(i.search),t.$$hash=decodeURIComponent(i.hash),t.$$path&&"/"!==t.$$path.charAt(0)&&(t.$$path="/"+t.$$path)}function or(e,t){return e.slice(0,t.length)===t}function ar(e,t){if(or(t,e))return t.substr(e.length)}function sr(e){var t=e.indexOf("#");return-1===t?e:e.substr(0,t)}function lr(e,t,n){this.$$html5=!0,n=n||"",nr(e,this),this.$$parse=function(e){var n=ar(t,e);if(!F(n))throw er("ipthprfx",'Invalid url "{0}", missing path prefix "{1}".',e,t);ir(n,this,!0),this.$$path||(this.$$path="/"),this.$$compose()},this.$$normalizeUrl=function(e){return t+e.substr(1)},this.$$parseLinkUrl=function(r,i){return i&&"#"===i[0]?(this.hash(i.slice(1)),!0):(z(o=ar(e,r))?(a=o,s=n&&z(o=ar(n,o))?t+(ar("/",o)||o):e+a):z(o=ar(t,r))?s=t+o:t===r+"/"&&(s=t),s&&this.$$parse(s),!!s);var o,a,s}}function cr(e,t,n){nr(e,this),this.$$parse=function(r){var i,o=ar(e,r)||ar(t,r);M(o)||"#"!==o.charAt(0)?this.$$html5?i=o:(i="",M(o)&&(e=r,this.replace())):M(i=ar(n,o))&&(i=o),ir(i,this,!1),this.$$path=function(e,t,n){var r,i=/^\/[A-Z]:(\/.*)/;or(t,n)&&(t=t.replace(n,""));if(i.exec(t))return e;return(r=i.exec(e))?r[1]:e}(this.$$path,i,e),this.$$compose()},this.$$normalizeUrl=function(t){return e+(t?n+t:"")},this.$$parseLinkUrl=function(t,n){return sr(e)===sr(t)&&(this.$$parse(t),!0)}}function ur(e,t,n){this.$$html5=!0,cr.apply(this,arguments),this.$$parseLinkUrl=function(r,i){return i&&"#"===i[0]?(this.hash(i.slice(1)),!0):(e===sr(r)?o=r:(a=ar(t,r))?o=e+n+a:t===r+"/"&&(o=t),o&&this.$$parse(o),!!o);var o,a},this.$$normalizeUrl=function(t){return e+n+t}}var dr={$$absUrl:"",$$html5:!1,$$replace:!1,$$compose:function(){this.$$url=tr(this.$$path,this.$$search,this.$$hash),this.$$absUrl=this.$$normalizeUrl(this.$$url),this.$$urlUpdatedByLocation=!0},absUrl:fr("$$absUrl"),url:function(e){if(M(e))return this.$$url;var t=Jn.exec(e);return(t[1]||""===e)&&this.path(decodeURIComponent(t[1])),(t[2]||t[1]||""===e)&&this.search(t[3]||""),this.hash(t[5]||""),this},protocol:fr("$$protocol"),host:fr("$$host"),port:fr("$$port"),path:pr("$$path",(function(e){return"/"===(e=null!==e?e.toString():"").charAt(0)?e:"/"+e})),search:function(e,t){switch(arguments.length){case 0:return this.$$search;case 1:if(F(e)||q(e))e=e.toString(),this.$$search=ke(e);else{if(!L(e))throw er("isrcharg","The first argument of the `$location#search()` call must be a string or an object.");k(e=oe(e,{}),(function(t,n){null==t&&delete e[n]})),this.$$search=e}break;default:M(t)||null===t?delete this.$$search[e]:this.$$search[e]=t}return this.$$compose(),this},hash:pr("$$hash",(function(e){return null!==e?e.toString():""})),replace:function(){return this.$$replace=!0,this}};function fr(e){return function(){return this[e]}}function pr(e,t){return function(n){return M(n)?this[e]:(this[e]=t(n),this.$$compose(),this)}}function hr(){var e="!",t={enabled:!1,requireBase:!0,rewriteLinks:!0};this.hashPrefix=function(t){return z(t)?(e=t,this):e},this.html5Mode=function(e){return Z(e)?(t.enabled=e,this):L(e)?(Z(e.enabled)&&(t.enabled=e.enabled),Z(e.requireBase)&&(t.requireBase=e.requireBase),(Z(e.rewriteLinks)||F(e.rewriteLinks))&&(t.rewriteLinks=e.rewriteLinks),this):t},this.$get=["$rootScope","$browser","$sniffer","$rootElement","$window",function(n,r,i,o,s){var l,c,u,d,f=r.baseHref(),p=r.url();if(t.enabled){if(!f&&t.requireBase)throw er("nobase","$location in HTML5 mode requires a <base> tag to be present!");u=(d=p).substring(0,d.indexOf("/",d.indexOf("//")+2))+(f||"/"),c=i.history?lr:ur}else u=sr(p),c=cr;var h=function(e){return e.substr(0,sr(e).lastIndexOf("/")+1)}(u);(l=new c(u,h,"#"+e)).$$parseLinkUrl(p,p),l.$$state=r.state();var g=/^\s*(javascript|mailto):/i;function v(e,t,n){var i=l.url(),o=l.$$state;try{r.url(e,t,n),l.$$state=r.state()}catch(e){throw l.url(i),l.$$state=o,e}}o.on("click",(function(e){var i=t.rewriteLinks;if(i&&!e.ctrlKey&&!e.metaKey&&!e.shiftKey&&2!==e.which&&2!==e.button){for(var s=a(e.target);"a"!==ne(s[0]);)if(s[0]===o[0]||!(s=s.parent())[0])return;if(!F(i)||!M(s.attr(i))){var c=s.prop("href"),u=s.attr("href")||s.attr("xlink:href");L(c)&&"[object SVGAnimatedString]"===c.toString()&&(c=li(c.animVal).href),g.test(c)||!c||s.attr("target")||e.isDefaultPrevented()||l.$$parseLinkUrl(c,u)&&(e.preventDefault(),l.absUrl()!==r.url()&&n.$apply())}}})),l.absUrl()!==p&&r.url(l.absUrl(),!0);var m=!0;return r.onUrlChange((function(e,t){or(e,h)?(n.$evalAsync((function(){var r,i=l.absUrl(),o=l.$$state;l.$$parse(e),l.$$state=t,r=n.$broadcast("$locationChangeStart",e,i,t,o).defaultPrevented,l.absUrl()===e&&(r?(l.$$parse(i),l.$$state=o,v(i,!1,o)):(m=!1,b(i,o)))})),n.$$phase||n.$digest()):s.location.href=e})),n.$watch((function(){if(m||l.$$urlUpdatedByLocation){l.$$urlUpdatedByLocation=!1;var e=r.url(),t=l.absUrl(),o=r.state(),a=l.$$replace,s=!((c=e)===(u=t)||li(c).href===li(u).href)||l.$$html5&&i.history&&o!==l.$$state;(m||s)&&(m=!1,n.$evalAsync((function(){var t=l.absUrl(),r=n.$broadcast("$locationChangeStart",t,e,l.$$state,o).defaultPrevented;l.absUrl()===t&&(r?(l.$$parse(e),l.$$state=o):(s&&v(t,a,o===l.$$state?null:l.$$state),b(e,o)))})))}var c,u;l.$$replace=!1})),l;function b(e,t){n.$broadcast("$locationChangeSuccess",l.absUrl(),e,l.$$state,t)}}]}function gr(){var e=!0,t=this;this.debugEnabled=function(t){return z(t)?(e=t,this):e},this.$get=["$window",function(n){var r,i=o||/\bEdge\//.test(n.navigator&&n.navigator.userAgent);return{log:s("log"),info:s("info"),warn:s("warn"),error:s("error"),debug:(r=s("debug"),function(){e&&r.apply(t,arguments)})};function a(e){return H(e)&&(e.stack&&i?e=e.message&&-1===e.stack.indexOf(e.message)?"Error: "+e.message+"\n"+e.stack:e.stack:e.sourceURL&&(e=e.message+"\n"+e.sourceURL+":"+e.line)),e}function s(e){var t=n.console||{},r=t[e]||t.log||D;return function(){var e=[];return k(arguments,(function(t){e.push(a(t))})),Function.prototype.apply.call(r,t,e)}}}]}k([ur,cr,lr],(function(e){e.prototype=Object.create(dr),e.prototype.state=function(t){if(!arguments.length)return this.$$state;if(e!==lr||!this.$$html5)throw er("nostate","History API state support is available only in HTML5 mode and only in browsers supporting HTML5 History API");return this.$$state=M(t)?null:t,this.$$urlUpdatedByLocation=!0,this}}));var vr=i("$parse"),mr={}.constructor.prototype.valueOf;function br(e){return e+""}var yr=Le();k("+ - * / % === !== == != < > <= >= && || ! = |".split(" "),(function(e){yr[e]=!0}));var xr={n:"\n",f:"\f",r:"\r",t:"\t",v:"\v","'":"'",'"':'"'},wr=function(e){this.options=e};wr.prototype={constructor:wr,lex:function(e){for(this.text=e,this.index=0,this.tokens=[];this.index<this.text.length;){var t=this.text.charAt(this.index);if('"'===t||"'"===t)this.readString(t);else if(this.isNumber(t)||"."===t&&this.isNumber(this.peek()))this.readNumber();else if(this.isIdentifierStart(this.peekMultichar()))this.readIdent();else if(this.is(t,"(){}[].,;:?"))this.tokens.push({index:this.index,text:t}),this.index++;else if(this.isWhitespace(t))this.index++;else{var n=t+this.peek(),r=n+this.peek(2),i=yr[t],o=yr[n],a=yr[r];if(i||o||a){var s=a?r:o?n:t;this.tokens.push({index:this.index,text:s,operator:!0}),this.index+=s.length}else this.throwError("Unexpected next character ",this.index,this.index+1)}}return this.tokens},is:function(e,t){return-1!==t.indexOf(e)},peek:function(e){var t=e||1;return this.index+t<this.text.length&&this.text.charAt(this.index+t)},isNumber:function(e){return"0"<=e&&e<="9"&&"string"==typeof e},isWhitespace:function(e){return" "===e||"\r"===e||"\t"===e||"\n"===e||"\v"===e||" "===e},isIdentifierStart:function(e){return this.options.isIdentifierStart?this.options.isIdentifierStart(e,this.codePointAt(e)):this.isValidIdentifierStart(e)},isValidIdentifierStart:function(e){return"a"<=e&&e<="z"||"A"<=e&&e<="Z"||"_"===e||"$"===e},isIdentifierContinue:function(e){return this.options.isIdentifierContinue?this.options.isIdentifierContinue(e,this.codePointAt(e)):this.isValidIdentifierContinue(e)},isValidIdentifierContinue:function(e,t){return this.isValidIdentifierStart(e,t)||this.isNumber(e)},codePointAt:function(e){return 1===e.length?e.charCodeAt(0):(e.charCodeAt(0)<<10)+e.charCodeAt(1)-56613888},peekMultichar:function(){var e=this.text.charAt(this.index),t=this.peek();if(!t)return e;var n=e.charCodeAt(0),r=t.charCodeAt(0);return n>=55296&&n<=56319&&r>=56320&&r<=57343?e+t:e},isExpOperator:function(e){return"-"===e||"+"===e||this.isNumber(e)},throwError:function(e,t,n){n=n||this.index;var r=z(t)?"s "+t+"-"+this.index+" ["+this.text.substring(t,n)+"]":" "+n;throw vr("lexerr","Lexer Error: {0} at column{1} in expression [{2}].",e,r,this.text)},readNumber:function(){for(var e="",t=this.index;this.index<this.text.length;){var n=d(this.text.charAt(this.index));if("."===n||this.isNumber(n))e+=n;else{var r=this.peek();if("e"===n&&this.isExpOperator(r))e+=n;else if(this.isExpOperator(n)&&r&&this.isNumber(r)&&"e"===e.charAt(e.length-1))e+=n;else{if(!this.isExpOperator(n)||r&&this.isNumber(r)||"e"!==e.charAt(e.length-1))break;this.throwError("Invalid exponent")}}this.index++}this.tokens.push({index:t,text:e,constant:!0,value:Number(e)})},readIdent:function(){var e=this.index;for(this.index+=this.peekMultichar().length;this.index<this.text.length;){var t=this.peekMultichar();if(!this.isIdentifierContinue(t))break;this.index+=t.length}this.tokens.push({index:e,text:this.text.slice(e,this.index),identifier:!0})},readString:function(e){var t=this.index;this.index++;for(var n="",r=e,i=!1;this.index<this.text.length;){var o=this.text.charAt(this.index);if(r+=o,i){if("u"===o){var a=this.text.substring(this.index+1,this.index+5);a.match(/[\da-f]{4}/i)||this.throwError("Invalid unicode escape [\\u"+a+"]"),this.index+=4,n+=String.fromCharCode(parseInt(a,16))}else{n+=xr[o]||o}i=!1}else if("\\"===o)i=!0;else{if(o===e)return this.index++,void this.tokens.push({index:t,text:r,constant:!0,value:n});n+=o}this.index++}this.throwError("Unterminated quote",t)}};var kr=function(e,t){this.lexer=e,this.options=t};function Ar(e,t){return void 0!==e?e:t}function Er(e,t){return void 0===e?t:void 0===t?e:e+t}kr.Program="Program",kr.ExpressionStatement="ExpressionStatement",kr.AssignmentExpression="AssignmentExpression",kr.ConditionalExpression="ConditionalExpression",kr.LogicalExpression="LogicalExpression",kr.BinaryExpression="BinaryExpression",kr.UnaryExpression="UnaryExpression",kr.CallExpression="CallExpression",kr.MemberExpression="MemberExpression",kr.Identifier="Identifier",kr.Literal="Literal",kr.ArrayExpression="ArrayExpression",kr.Property="Property",kr.ObjectExpression="ObjectExpression",kr.ThisExpression="ThisExpression",kr.LocalsExpression="LocalsExpression",kr.NGValueParameter="NGValueParameter",kr.prototype={ast:function(e){this.text=e,this.tokens=this.lexer.lex(e);var t=this.program();return 0!==this.tokens.length&&this.throwError("is an unexpected token",this.tokens[0]),t},program:function(){for(var e=[];;)if(this.tokens.length>0&&!this.peek("}",")",";","]")&&e.push(this.expressionStatement()),!this.expect(";"))return{type:kr.Program,body:e}},expressionStatement:function(){return{type:kr.ExpressionStatement,expression:this.filterChain()}},filterChain:function(){for(var e=this.expression();this.expect("|");)e=this.filter(e);return e},expression:function(){return this.assignment()},assignment:function(){var e=this.ternary();if(this.expect("=")){if(!$r(e))throw vr("lval","Trying to assign a value to a non l-value");e={type:kr.AssignmentExpression,left:e,right:this.assignment(),operator:"="}}return e},ternary:function(){var e,t,n=this.logicalOR();return this.expect("?")&&(e=this.expression(),this.consume(":"))?(t=this.expression(),{type:kr.ConditionalExpression,test:n,alternate:e,consequent:t}):n},logicalOR:function(){for(var e=this.logicalAND();this.expect("||");)e={type:kr.LogicalExpression,operator:"||",left:e,right:this.logicalAND()};return e},logicalAND:function(){for(var e=this.equality();this.expect("&&");)e={type:kr.LogicalExpression,operator:"&&",left:e,right:this.equality()};return e},equality:function(){for(var e,t=this.relational();e=this.expect("==","!=","===","!==");)t={type:kr.BinaryExpression,operator:e.text,left:t,right:this.relational()};return t},relational:function(){for(var e,t=this.additive();e=this.expect("<",">","<=",">=");)t={type:kr.BinaryExpression,operator:e.text,left:t,right:this.additive()};return t},additive:function(){for(var e,t=this.multiplicative();e=this.expect("+","-");)t={type:kr.BinaryExpression,operator:e.text,left:t,right:this.multiplicative()};return t},multiplicative:function(){for(var e,t=this.unary();e=this.expect("*","/","%");)t={type:kr.BinaryExpression,operator:e.text,left:t,right:this.unary()};return t},unary:function(){var e;return(e=this.expect("+","-","!"))?{type:kr.UnaryExpression,operator:e.text,prefix:!0,argument:this.unary()}:this.primary()},primary:function(){var e,t;for(this.expect("(")?(e=this.filterChain(),this.consume(")")):this.expect("[")?e=this.arrayDeclaration():this.expect("{")?e=this.object():this.selfReferential.hasOwnProperty(this.peek().text)?e=oe(this.selfReferential[this.consume().text]):this.options.literals.hasOwnProperty(this.peek().text)?e={type:kr.Literal,value:this.options.literals[this.consume().text]}:this.peek().identifier?e=this.identifier():this.peek().constant?e=this.constant():this.throwError("not a primary expression",this.peek());t=this.expect("(","[",".");)"("===t.text?(e={type:kr.CallExpression,callee:e,arguments:this.parseArguments()},this.consume(")")):"["===t.text?(e={type:kr.MemberExpression,object:e,property:this.expression(),computed:!0},this.consume("]")):"."===t.text?e={type:kr.MemberExpression,object:e,property:this.identifier(),computed:!1}:this.throwError("IMPOSSIBLE");return e},filter:function(e){for(var t=[e],n={type:kr.CallExpression,callee:this.identifier(),arguments:t,filter:!0};this.expect(":");)t.push(this.expression());return n},parseArguments:function(){var e=[];if(")"!==this.peekToken().text)do{e.push(this.filterChain())}while(this.expect(","));return e},identifier:function(){var e=this.consume();return e.identifier||this.throwError("is not a valid identifier",e),{type:kr.Identifier,name:e.text}},constant:function(){return{type:kr.Literal,value:this.consume().value}},arrayDeclaration:function(){var e=[];if("]"!==this.peekToken().text)do{if(this.peek("]"))break;e.push(this.expression())}while(this.expect(","));return this.consume("]"),{type:kr.ArrayExpression,elements:e}},object:function(){var e,t=[];if("}"!==this.peekToken().text)do{if(this.peek("}"))break;e={type:kr.Property,kind:"init"},this.peek().constant?(e.key=this.constant(),e.computed=!1,this.consume(":"),e.value=this.expression()):this.peek().identifier?(e.key=this.identifier(),e.computed=!1,this.peek(":")?(this.consume(":"),e.value=this.expression()):e.value=e.key):this.peek("[")?(this.consume("["),e.key=this.expression(),this.consume("]"),e.computed=!0,this.consume(":"),e.value=this.expression()):this.throwError("invalid key",this.peek()),t.push(e)}while(this.expect(","));return this.consume("}"),{type:kr.ObjectExpression,properties:t}},throwError:function(e,t){throw vr("syntax","Syntax Error: Token '{0}' {1} at column {2} of the expression [{3}] starting at [{4}].",t.text,e,t.index+1,this.text,this.text.substring(t.index))},consume:function(e){if(0===this.tokens.length)throw vr("ueoe","Unexpected end of expression: {0}",this.text);var t=this.expect(e);return t||this.throwError("is unexpected, expecting ["+e+"]",this.peek()),t},peekToken:function(){if(0===this.tokens.length)throw vr("ueoe","Unexpected end of expression: {0}",this.text);return this.tokens[0]},peek:function(e,t,n,r){return this.peekAhead(0,e,t,n,r)},peekAhead:function(e,t,n,r,i){if(this.tokens.length>e){var o=this.tokens[e],a=o.text;if(a===t||a===n||a===r||a===i||!t&&!n&&!r&&!i)return o}return!1},expect:function(e,t,n,r){var i=this.peek(e,t,n,r);return!!i&&(this.tokens.shift(),i)},selfReferential:{this:{type:kr.ThisExpression},$locals:{type:kr.LocalsExpression}}};function Sr(e,t,n){var r,i,o,a=e.isPure=function(e,t){switch(e.type){case kr.MemberExpression:if(e.computed)return!1;break;case kr.UnaryExpression:return 1;case kr.BinaryExpression:return"+"!==e.operator&&1;case kr.CallExpression:return!1}return void 0===t?2:t}(e,n);switch(e.type){case kr.Program:r=!0,k(e.body,(function(e){Sr(e.expression,t,a),r=r&&e.expression.constant})),e.constant=r;break;case kr.Literal:e.constant=!0,e.toWatch=[];break;case kr.UnaryExpression:Sr(e.argument,t,a),e.constant=e.argument.constant,e.toWatch=e.argument.toWatch;break;case kr.BinaryExpression:Sr(e.left,t,a),Sr(e.right,t,a),e.constant=e.left.constant&&e.right.constant,e.toWatch=e.left.toWatch.concat(e.right.toWatch);break;case kr.LogicalExpression:Sr(e.left,t,a),Sr(e.right,t,a),e.constant=e.left.constant&&e.right.constant,e.toWatch=e.constant?[]:[e];break;case kr.ConditionalExpression:Sr(e.test,t,a),Sr(e.alternate,t,a),Sr(e.consequent,t,a),e.constant=e.test.constant&&e.alternate.constant&&e.consequent.constant,e.toWatch=e.constant?[]:[e];break;case kr.Identifier:e.constant=!1,e.toWatch=[e];break;case kr.MemberExpression:Sr(e.object,t,a),e.computed&&Sr(e.property,t,a),e.constant=e.object.constant&&(!e.computed||e.property.constant),e.toWatch=e.constant?[]:[e];break;case kr.CallExpression:o=!!e.filter&&function(e,t){return!e(t).$stateful}(t,e.callee.name),r=o,i=[],k(e.arguments,(function(e){Sr(e,t,a),r=r&&e.constant,i.push.apply(i,e.toWatch)})),e.constant=r,e.toWatch=o?i:[e];break;case kr.AssignmentExpression:Sr(e.left,t,a),Sr(e.right,t,a),e.constant=e.left.constant&&e.right.constant,e.toWatch=[e];break;case kr.ArrayExpression:r=!0,i=[],k(e.elements,(function(e){Sr(e,t,a),r=r&&e.constant,i.push.apply(i,e.toWatch)})),e.constant=r,e.toWatch=i;break;case kr.ObjectExpression:r=!0,i=[],k(e.properties,(function(e){Sr(e.value,t,a),r=r&&e.value.constant,i.push.apply(i,e.value.toWatch),e.computed&&(Sr(e.key,t,!1),r=r&&e.key.constant,i.push.apply(i,e.key.toWatch))})),e.constant=r,e.toWatch=i;break;case kr.ThisExpression:case kr.LocalsExpression:e.constant=!1,e.toWatch=[]}}function Cr(e){if(1===e.length){var t=e[0].expression,n=t.toWatch;return 1!==n.length||n[0]!==t?n:void 0}}function $r(e){return e.type===kr.Identifier||e.type===kr.MemberExpression}function Or(e){if(1===e.body.length&&$r(e.body[0].expression))return{type:kr.AssignmentExpression,left:e.body[0].expression,right:{type:kr.NGValueParameter},operator:"="}}function _r(e){this.$filter=e}function Tr(e){this.$filter=e}function jr(e,t,n){this.ast=new kr(e,n),this.astCompiler=n.csp?new Tr(t):new _r(t)}function Pr(e){return G(e.valueOf)?e.valueOf():mr.call(e)}function Dr(){var e,t,n=Le(),r={true:!0,false:!1,null:null,undefined:void 0};this.addLiteral=function(e,t){r[e]=t},this.setIdentifierFns=function(n,r){return e=n,t=r,this},this.$get=["$filter",function(i){var o={csp:le().noUnsafeEval,literals:oe(r),isIdentifierStart:G(e)&&e,isIdentifierContinue:G(t)&&t};return a.$$getAst=function(e){return new jr(new wr(o),i,o).getAst(e).ast},a;function a(e,t){var r,a;switch(typeof e){case"string":if(e=e.trim(),!(r=n[a=e]))r=new jr(new wr(o),i,o).parse(e),n[a]=f(r);return p(r,t);case"function":return p(e,t);default:return p(D,t)}}function s(e,t,n){return null==e||null==t?e===t:!("object"==typeof e&&"object"==typeof(e=Pr(e))&&!n)&&(e===t||e!=e&&t!=t)}function l(e,t,n,r,i){var o,a=r.inputs;if(1===a.length){var l=s;return a=a[0],e.$watch((function(e){var t=a(e);return s(t,l,a.isPure)||(o=r(e,void 0,void 0,[t]),l=t&&Pr(t)),o}),t,n,i)}for(var c=[],u=[],d=0,f=a.length;d<f;d++)c[d]=s,u[d]=null;return e.$watch((function(e){for(var t=!1,n=0,i=a.length;n<i;n++){var l=a[n](e);(t||(t=!s(l,c[n],a[n].isPure)))&&(u[n]=l,c[n]=l&&Pr(l))}return t&&(o=r(e,void 0,void 0,u)),o}),t,n,i)}function c(e,t,n,r,i){var o,a,s=r.literal?u:z,l=r.$$intercepted||r,c=r.$$interceptor||R,d=r.inputs&&!l.inputs;return h.literal=r.literal,h.constant=r.constant,h.inputs=r.inputs,f(h),o=e.$watch(h,t,n,i);function p(){s(a)&&o()}function h(e,t,n,r){return a=d&&r?r[0]:l(e,t,n,r),s(a)&&e.$$postDigest(p),c(a)}}function u(e){var t=!0;return k(e,(function(e){z(e)||(t=!1)})),t}function d(e,t,n,r){var i=e.$watch((function(e){return i(),r(e)}),t,n);return i}function f(e){return e.constant?e.$$watchDelegate=d:e.oneTime?e.$$watchDelegate=c:e.inputs&&(e.$$watchDelegate=l),e}function p(e,t){if(!t)return e;e.$$interceptor&&(t=function(e,t){function n(n){return t(e(n))}return n.$stateful=e.$stateful||t.$stateful,n.$$pure=e.$$pure&&t.$$pure,n}(e.$$interceptor,t),e=e.$$intercepted);var n=!1,r=function(r,i,o,a){var s=n&&a?a[0]:e(r,i,o,a);return t(s)};return r.$$intercepted=e,r.$$interceptor=t,r.literal=e.literal,r.oneTime=e.oneTime,r.constant=e.constant,t.$stateful||(n=!e.inputs,r.inputs=e.inputs?e.inputs:[e],t.$$pure||(r.inputs=r.inputs.map((function(e){return 2===e.isPure?function(t){return e(t)}:e})))),f(r)}}]}function Rr(){var e=!0;this.$get=["$rootScope","$exceptionHandler",function(t,n){return Nr((function(e){t.$evalAsync(e)}),n,e)}],this.errorOnUnhandledRejections=function(t){return z(t)?(e=t,this):e}}function Ir(){var e=!0;this.$get=["$browser","$exceptionHandler",function(t,n){return Nr((function(e){t.defer(e)}),n,e)}],this.errorOnUnhandledRejections=function(t){return z(t)?(e=t,this):e}}function Nr(e,t,n){var r=i("$q",TypeError),o=0,a=[];function s(){return new l}function l(){var e=this.promise=new c;this.resolve=function(t){f(e,t)},this.reject=function(t){p(e,t)},this.notify=function(t){g(e,t)}}function c(){this.$$state={status:0}}function u(){for(;!o&&a.length;){var e=a.shift();if(!Mr(e)){zr(e);var n="Possibly unhandled rejection: "+Ve(e.value);H(e.value)?t(e.value,n):t(n)}}}function d(r){!n||r.pending||2!==r.status||Mr(r)||(0===o&&0===a.length&&e(u),a.push(r)),!r.processScheduled&&r.pending&&(r.processScheduled=!0,++o,e((function(){!function(r){var i,a,s;s=r.pending,r.processScheduled=!1,r.pending=void 0;try{for(var l=0,c=s.length;l<c;++l){zr(r),a=s[l][0],i=s[l][r.status];try{G(i)?f(a,i(r.value)):1===r.status?f(a,r.value):p(a,r.value)}catch(e){p(a,e),e&&!0===e.$$passToExceptionHandler&&t(e)}}}finally{--o,n&&0===o&&e(u)}}(r)})))}function f(e,t){e.$$state.status||(t===e?h(e,r("qcycle","Expected promise to be resolved with value other than itself '{0}'",t)):function e(t,n){var r,i=!1;try{(L(n)||G(n))&&(r=n.then),G(r)?(t.$$state.status=-1,r.call(n,o,a,(function(e){g(t,e)}))):(t.$$state.value=n,t.$$state.status=1,d(t.$$state))}catch(e){a(e)}function o(n){i||(i=!0,e(t,n))}function a(e){i||(i=!0,h(t,e))}}(e,t))}function p(e,t){e.$$state.status||h(e,t)}function h(e,t){e.$$state.value=t,e.$$state.status=2,d(e.$$state)}function g(n,r){var i=n.$$state.pending;n.$$state.status<=0&&i&&i.length&&e((function(){for(var e,n,o=0,a=i.length;o<a;o++){n=i[o][0],e=i[o][3];try{g(n,G(e)?e(r):r)}catch(e){t(e)}}}))}function v(e){var t=new c;return p(t,e),t}function m(e,t,n){var r=null;try{G(n)&&(r=n())}catch(e){return v(e)}return Q(r)?r.then((function(){return t(e)}),v):t(e)}function b(e,t,n,r){var i=new c;return f(i,e),i.then(t,n,r)}O(c.prototype,{then:function(e,t,n){if(M(e)&&M(t)&&M(n))return this;var r=new c;return this.$$state.pending=this.$$state.pending||[],this.$$state.pending.push([r,e,t,n]),this.$$state.status>0&&d(this.$$state),r},catch:function(e){return this.then(null,e)},finally:function(e,t){return this.then((function(t){return m(t,y,e)}),(function(t){return m(t,v,e)}),t)}});var y=b;function x(e){if(!G(e))throw r("norslvr","Expected resolverFn, got '{0}'",e);var t=new c;return e((function(e){f(t,e)}),(function(e){p(t,e)})),t}return x.prototype=c.prototype,x.defer=s,x.reject=v,x.when=b,x.resolve=y,x.all=function(e){var t=new c,n=0,r=U(e)?[]:{};return k(e,(function(e,i){n++,b(e).then((function(e){r[i]=e,--n||f(t,r)}),(function(e){p(t,e)}))})),0===n&&f(t,r),t},x.race=function(e){var t=s();return k(e,(function(e){b(e).then(t.resolve,t.reject)})),t.promise},x}function Mr(e){return!!e.pur}function zr(e){e.pur=!0}function Lr(e){e.$$state&&zr(e.$$state)}function Br(){this.$get=["$window","$timeout",function(e,t){var n=e.requestAnimationFrame||e.webkitRequestAnimationFrame,r=e.cancelAnimationFrame||e.webkitCancelAnimationFrame||e.webkitCancelRequestAnimationFrame,i=!!n,o=i?function(e){var t=n(e);return function(){r(t)}}:function(e){var n=t(e,16.66,!1);return function(){t.cancel(n)}};return o.supported=i,o}]}function Fr(){var e=10,t=i("$rootScope"),n=null,r=null;this.digestTtl=function(t){return arguments.length&&(e=t),e},this.$get=["$exceptionHandler","$parse","$browser",function(i,a,s){function l(e){e.currentScope.$$destroyed=!0}function c(){this.$id=S(),this.$$phase=this.$parent=this.$$watchers=this.$$nextSibling=this.$$prevSibling=this.$$childHead=this.$$childTail=null,this.$root=this,this.$$destroyed=!1,this.$$suspended=!1,this.$$listeners={},this.$$listenerCount={},this.$$watchersCount=0,this.$$isolateBindings=null}c.prototype={constructor:c,$new:function(e,t){var n;return t=t||this,e?(n=new c).$root=this.$root:(this.$$ChildScope||(this.$$ChildScope=function(e){function t(){this.$$watchers=this.$$nextSibling=this.$$childHead=this.$$childTail=null,this.$$listeners={},this.$$listenerCount={},this.$$watchersCount=0,this.$id=S(),this.$$ChildScope=null,this.$$suspended=!1}return t.prototype=e,t}(this)),n=new this.$$ChildScope),n.$parent=t,n.$$prevSibling=t.$$childTail,t.$$childHead?(t.$$childTail.$$nextSibling=n,t.$$childTail=n):t.$$childHead=t.$$childTail=n,(e||t!==this)&&n.$on("$destroy",l),n},$watch:function(e,t,r,i){var o=a(e),s=G(t)?t:D;if(o.$$watchDelegate)return o.$$watchDelegate(this,s,r,o,e);var l=this,c=l.$$watchers,u={fn:s,last:x,get:o,exp:i||e,eq:!!r};return n=null,c||((c=l.$$watchers=[]).$$digestWatchIndex=-1),c.unshift(u),c.$$digestWatchIndex++,b(this,1),function(){var e=ie(c,u);e>=0&&(b(l,-1),e<c.$$digestWatchIndex&&c.$$digestWatchIndex--),n=null}},$watchGroup:function(e,t){var n=new Array(e.length),r=new Array(e.length),i=[],o=this,a=!1,s=!0;if(!e.length){var l=!0;return o.$evalAsync((function(){l&&t(r,r,o)})),function(){l=!1}}if(1===e.length)return this.$watch(e[0],(function(e,i,o){r[0]=e,n[0]=i,t(r,e===i?r:n,o)}));function c(){a=!1;try{s?(s=!1,t(r,r,o)):t(r,n,o)}finally{for(var i=0;i<e.length;i++)n[i]=r[i]}}return k(e,(function(e,t){var n=o.$watch(e,(function(e){r[t]=e,a||(a=!0,o.$evalAsync(c))}));i.push(n)})),function(){for(;i.length;)i.shift()()}},$watchCollection:function(e,t){g.$$pure=a(e).literal,g.$stateful=!g.$$pure;var n,r,i,o=this,s=t.length>1,l=0,c=a(e,g),d=[],f={},p=!0,h=0;function g(e){var t,i,o,a;if(!M(n=e)){if(L(n))if(w(n)){r!==d&&(h=(r=d).length=0,l++),t=n.length,h!==t&&(l++,r.length=h=t);for(var s=0;s<t;s++)a=r[s],o=n[s],a!=a&&o!=o||a===o||(l++,r[s]=o)}else{for(i in r!==f&&(r=f={},h=0,l++),t=0,n)u.call(n,i)&&(t++,o=n[i],a=r[i],i in r?a!=a&&o!=o||a===o||(l++,r[i]=o):(h++,r[i]=o,l++));if(h>t)for(i in l++,r)u.call(n,i)||(h--,delete r[i])}else r!==n&&(r=n,l++);return l}}return this.$watch(c,(function(){if(p?(p=!1,t(n,n,o)):t(n,i,o),s)if(L(n))if(w(n)){i=new Array(n.length);for(var e=0;e<n.length;e++)i[e]=n[e]}else for(var r in i={},n)u.call(n,r)&&(i[r]=n[r]);else i=n}))},$digest:function(){var o,a,l,c,u,h,b,y,w,k=e,E=f.length?d:this,S=[];v("$digest"),s.$$checkUrlChange(),this===d&&null!==r&&(s.defer.cancel(r),A()),n=null;do{u=!1,b=E;for(var C=0;C<f.length;C++){try{(0,(w=f[C]).fn)(w.scope,w.locals)}catch(e){i(e)}n=null}f.length=0;e:do{if(c=!b.$$suspended&&b.$$watchers)for(c.$$digestWatchIndex=c.length;c.$$digestWatchIndex--;)try{if(o=c[c.$$digestWatchIndex])if((a=(0,o.get)(b))===(l=o.last)||(o.eq?se(a,l):j(a)&&j(l))){if(o===n){u=!1;break e}}else u=!0,n=o,o.last=o.eq?oe(a,null):a,(0,o.fn)(a,l===x?a:l,b),k<5&&(S[y=4-k]||(S[y]=[]),S[y].push({msg:G(o.exp)?"fn: "+(o.exp.name||o.exp.toString()):o.exp,newVal:a,oldVal:l}))}catch(e){i(e)}if(!(h=!b.$$suspended&&b.$$watchersCount&&b.$$childHead||b!==E&&b.$$nextSibling))for(;b!==E&&!(h=b.$$nextSibling);)b=b.$parent}while(b=h);if((u||f.length)&&!k--)throw m(),t("infdig","{0} $digest() iterations reached. Aborting!\nWatchers fired in the last 5 iterations: {1}",e,S)}while(u||f.length);for(m();g<p.length;)try{p[g++]()}catch(e){i(e)}p.length=g=0,s.$$checkUrlChange()},$suspend:function(){this.$$suspended=!0},$isSuspended:function(){return this.$$suspended},$resume:function(){this.$$suspended=!1},$destroy:function(){if(!this.$$destroyed){var e=this.$parent;for(var t in this.$broadcast("$destroy"),this.$$destroyed=!0,this===d&&s.$$applicationDestroyed(),b(this,-this.$$watchersCount),this.$$listenerCount)y(this,this.$$listenerCount[t],t);e&&e.$$childHead===this&&(e.$$childHead=this.$$nextSibling),e&&e.$$childTail===this&&(e.$$childTail=this.$$prevSibling),this.$$prevSibling&&(this.$$prevSibling.$$nextSibling=this.$$nextSibling),this.$$nextSibling&&(this.$$nextSibling.$$prevSibling=this.$$prevSibling),this.$destroy=this.$digest=this.$apply=this.$evalAsync=this.$applyAsync=D,this.$on=this.$watch=this.$watchGroup=function(){return D},this.$$listeners={},this.$$nextSibling=null,function e(t){9===o&&(t.$$childHead&&e(t.$$childHead),t.$$nextSibling&&e(t.$$nextSibling)),t.$parent=t.$$nextSibling=t.$$prevSibling=t.$$childHead=t.$$childTail=t.$root=t.$$watchers=null}(this)}},$eval:function(e,t){return a(e)(this,t)},$evalAsync:function(e,t){d.$$phase||f.length||s.defer((function(){f.length&&d.$digest()}),null,"$evalAsync"),f.push({scope:this,fn:a(e),locals:t})},$$postDigest:function(e){p.push(e)},$apply:function(e){try{v("$apply");try{return this.$eval(e)}finally{m()}}catch(e){i(e)}finally{try{d.$digest()}catch(e){throw i(e),e}}},$applyAsync:function(e){var t=this;e&&h.push((function(){t.$eval(e)})),e=a(e),null===r&&(r=s.defer((function(){d.$apply(A)}),null,"$applyAsync"))},$on:function(e,t){var n=this.$$listeners[e];n||(this.$$listeners[e]=n=[]),n.push(t);var r=this;do{r.$$listenerCount[e]||(r.$$listenerCount[e]=0),r.$$listenerCount[e]++}while(r=r.$parent);var i=this;return function(){var r=n.indexOf(t);-1!==r&&(delete n[r],y(i,1,e))}},$emit:function(e,t){var n,r,o,a=[],s=this,l=!1,c={name:e,targetScope:s,stopPropagation:function(){l=!0},preventDefault:function(){c.defaultPrevented=!0},defaultPrevented:!1},u=ue([c],arguments,1);do{for(n=s.$$listeners[e]||a,c.currentScope=s,r=0,o=n.length;r<o;r++)if(n[r])try{n[r].apply(null,u)}catch(e){i(e)}else n.splice(r,1),r--,o--;if(l)break;s=s.$parent}while(s);return c.currentScope=null,c},$broadcast:function(e,t){var n=this,r=n,o=n,a={name:e,targetScope:n,preventDefault:function(){a.defaultPrevented=!0},defaultPrevented:!1};if(!n.$$listenerCount[e])return a;for(var s,l,c,u=ue([a],arguments,1);r=o;){for(a.currentScope=r,l=0,c=(s=r.$$listeners[e]||[]).length;l<c;l++)if(s[l])try{s[l].apply(null,u)}catch(e){i(e)}else s.splice(l,1),l--,c--;if(!(o=r.$$listenerCount[e]&&r.$$childHead||r!==n&&r.$$nextSibling))for(;r!==n&&!(o=r.$$nextSibling);)r=r.$parent}return a.currentScope=null,a}};var d=new c,f=d.$$asyncQueue=[],p=d.$$postDigestQueue=[],h=d.$$applyAsyncQueue=[],g=0;return d;function v(e){if(d.$$phase)throw t("inprog","{0} already in progress",d.$$phase);d.$$phase=e}function m(){d.$$phase=null}function b(e,t){do{e.$$watchersCount+=t}while(e=e.$parent)}function y(e,t,n){do{e.$$listenerCount[n]-=t,0===e.$$listenerCount[n]&&delete e.$$listenerCount[n]}while(e=e.$parent)}function x(){}function A(){for(;h.length;)try{h.shift()()}catch(e){i(e)}r=null}}]}function qr(){var e=/^\s*(https?|s?ftp|mailto|tel|file):/,t=/^\s*((https?|ftp|file|blob):|data:image\/)/;this.aHrefSanitizationTrustedUrlList=function(t){return z(t)?(e=t,this):e},this.imgSrcSanitizationTrustedUrlList=function(e){return z(e)?(t=e,this):t},this.$get=function(){return function(n,r){var i=r?t:e,o=li(n&&n.trim()).href;return""===o||o.match(i)?n:"unsafe:"+o}}}_r.prototype={compile:function(e){var t=this;this.state={nextId:0,filters:{},fn:{vars:[],body:[],own:{}},assign:{vars:[],body:[],own:{}},inputs:[]},Sr(e,t.$filter);var n,r="";if(this.stage="assign",n=Or(e)){this.state.computing="assign";var i=this.nextId();this.recurse(n,i),this.return_(i),r="fn.assign="+this.generateFunction("assign","s,v,l")}var o=Cr(e.body);t.stage="inputs",k(o,(function(e,n){var r="fn"+n;t.state[r]={vars:[],body:[],own:{}},t.state.computing=r;var i=t.nextId();t.recurse(e,i),t.return_(i),t.state.inputs.push({name:r,isPure:e.isPure}),e.watchId=n})),this.state.computing="fn",this.stage="main",this.recurse(e);var a='"'+this.USE+" "+this.STRICT+'";\n'+this.filterPrefix()+"var fn="+this.generateFunction("fn","s,l,a,i")+r+this.watchFns()+"return fn;",s=new Function("$filter","getStringValue","ifDefined","plus",a)(this.$filter,br,Ar,Er);return this.state=this.stage=void 0,s},USE:"use",STRICT:"strict",watchFns:function(){var e=[],t=this.state.inputs,n=this;return k(t,(function(t){e.push("var "+t.name+"="+n.generateFunction(t.name,"s")),t.isPure&&e.push(t.name,".isPure="+JSON.stringify(t.isPure)+";")})),t.length&&e.push("fn.inputs=["+t.map((function(e){return e.name})).join(",")+"];"),e.join("")},generateFunction:function(e,t){return"function("+t+"){"+this.varsPrefix(e)+this.body(e)+"};"},filterPrefix:function(){var e=[],t=this;return k(this.state.filters,(function(n,r){e.push(n+"=$filter("+t.escape(r)+")")})),e.length?"var "+e.join(",")+";":""},varsPrefix:function(e){return this.state[e].vars.length?"var "+this.state[e].vars.join(",")+";":""},body:function(e){return this.state[e].body.join("")},recurse:function(e,t,n,r,i,o){var a,s,l,c,u,d=this;if(r=r||D,!o&&z(e.watchId))return t=t||this.nextId(),void this.if_("i",this.lazyAssign(t,this.computedMember("i",e.watchId)),this.lazyRecurse(e,t,n,r,i,!0));switch(e.type){case kr.Program:k(e.body,(function(t,n){d.recurse(t.expression,void 0,void 0,(function(e){s=e})),n!==e.body.length-1?d.current().body.push(s,";"):d.return_(s)}));break;case kr.Literal:c=this.escape(e.value),this.assign(t,c),r(t||c);break;case kr.UnaryExpression:this.recurse(e.argument,void 0,void 0,(function(e){s=e})),c=e.operator+"("+this.ifDefined(s,0)+")",this.assign(t,c),r(c);break;case kr.BinaryExpression:this.recurse(e.left,void 0,void 0,(function(e){a=e})),this.recurse(e.right,void 0,void 0,(function(e){s=e})),c="+"===e.operator?this.plus(a,s):"-"===e.operator?this.ifDefined(a,0)+e.operator+this.ifDefined(s,0):"("+a+")"+e.operator+"("+s+")",this.assign(t,c),r(c);break;case kr.LogicalExpression:t=t||this.nextId(),d.recurse(e.left,t),d.if_("&&"===e.operator?t:d.not(t),d.lazyRecurse(e.right,t)),r(t);break;case kr.ConditionalExpression:t=t||this.nextId(),d.recurse(e.test,t),d.if_(t,d.lazyRecurse(e.alternate,t),d.lazyRecurse(e.consequent,t)),r(t);break;case kr.Identifier:t=t||this.nextId(),n&&(n.context="inputs"===d.stage?"s":this.assign(this.nextId(),this.getHasOwnProperty("l",e.name)+"?l:s"),n.computed=!1,n.name=e.name),d.if_("inputs"===d.stage||d.not(d.getHasOwnProperty("l",e.name)),(function(){d.if_("inputs"===d.stage||"s",(function(){i&&1!==i&&d.if_(d.isNull(d.nonComputedMember("s",e.name)),d.lazyAssign(d.nonComputedMember("s",e.name),"{}")),d.assign(t,d.nonComputedMember("s",e.name))}))}),t&&d.lazyAssign(t,d.nonComputedMember("l",e.name))),r(t);break;case kr.MemberExpression:a=n&&(n.context=this.nextId())||this.nextId(),t=t||this.nextId(),d.recurse(e.object,a,void 0,(function(){d.if_(d.notNull(a),(function(){e.computed?(s=d.nextId(),d.recurse(e.property,s),d.getStringValue(s),i&&1!==i&&d.if_(d.not(d.computedMember(a,s)),d.lazyAssign(d.computedMember(a,s),"{}")),c=d.computedMember(a,s),d.assign(t,c),n&&(n.computed=!0,n.name=s)):(i&&1!==i&&d.if_(d.isNull(d.nonComputedMember(a,e.property.name)),d.lazyAssign(d.nonComputedMember(a,e.property.name),"{}")),c=d.nonComputedMember(a,e.property.name),d.assign(t,c),n&&(n.computed=!1,n.name=e.property.name))}),(function(){d.assign(t,"undefined")})),r(t)}),!!i);break;case kr.CallExpression:t=t||this.nextId(),e.filter?(s=d.filter(e.callee.name),l=[],k(e.arguments,(function(e){var t=d.nextId();d.recurse(e,t),l.push(t)})),c=s+"("+l.join(",")+")",d.assign(t,c),r(t)):(s=d.nextId(),a={},l=[],d.recurse(e.callee,s,a,(function(){d.if_(d.notNull(s),(function(){k(e.arguments,(function(t){d.recurse(t,e.constant?void 0:d.nextId(),void 0,(function(e){l.push(e)}))})),c=a.name?d.member(a.context,a.name,a.computed)+"("+l.join(",")+")":s+"("+l.join(",")+")",d.assign(t,c)}),(function(){d.assign(t,"undefined")})),r(t)})));break;case kr.AssignmentExpression:s=this.nextId(),a={},this.recurse(e.left,void 0,a,(function(){d.if_(d.notNull(a.context),(function(){d.recurse(e.right,s),c=d.member(a.context,a.name,a.computed)+e.operator+s,d.assign(t,c),r(t||c)}))}),1);break;case kr.ArrayExpression:l=[],k(e.elements,(function(t){d.recurse(t,e.constant?void 0:d.nextId(),void 0,(function(e){l.push(e)}))})),c="["+l.join(",")+"]",this.assign(t,c),r(t||c);break;case kr.ObjectExpression:l=[],u=!1,k(e.properties,(function(e){e.computed&&(u=!0)})),u?(t=t||this.nextId(),this.assign(t,"{}"),k(e.properties,(function(e){e.computed?(a=d.nextId(),d.recurse(e.key,a)):a=e.key.type===kr.Identifier?e.key.name:""+e.key.value,s=d.nextId(),d.recurse(e.value,s),d.assign(d.member(t,a,e.computed),s)}))):(k(e.properties,(function(t){d.recurse(t.value,e.constant?void 0:d.nextId(),void 0,(function(e){l.push(d.escape(t.key.type===kr.Identifier?t.key.name:""+t.key.value)+":"+e)}))})),c="{"+l.join(",")+"}",this.assign(t,c)),r(t||c);break;case kr.ThisExpression:this.assign(t,"s"),r(t||"s");break;case kr.LocalsExpression:this.assign(t,"l"),r(t||"l");break;case kr.NGValueParameter:this.assign(t,"v"),r(t||"v")}},getHasOwnProperty:function(e,t){var n=e+"."+t,r=this.current().own;return r.hasOwnProperty(n)||(r[n]=this.nextId(!1,e+"&&("+this.escape(t)+" in "+e+")")),r[n]},assign:function(e,t){if(e)return this.current().body.push(e,"=",t,";"),e},filter:function(e){return this.state.filters.hasOwnProperty(e)||(this.state.filters[e]=this.nextId(!0)),this.state.filters[e]},ifDefined:function(e,t){return"ifDefined("+e+","+this.escape(t)+")"},plus:function(e,t){return"plus("+e+","+t+")"},return_:function(e){this.current().body.push("return ",e,";")},if_:function(e,t,n){if(!0===e)t();else{var r=this.current().body;r.push("if(",e,"){"),t(),r.push("}"),n&&(r.push("else{"),n(),r.push("}"))}},not:function(e){return"!("+e+")"},isNull:function(e){return e+"==null"},notNull:function(e){return e+"!=null"},nonComputedMember:function(e,t){return/^[$_a-zA-Z][$_a-zA-Z0-9]*$/.test(t)?e+"."+t:e+'["'+t.replace(/[^$_a-zA-Z0-9]/g,this.stringEscapeFn)+'"]'},computedMember:function(e,t){return e+"["+t+"]"},member:function(e,t,n){return n?this.computedMember(e,t):this.nonComputedMember(e,t)},getStringValue:function(e){this.assign(e,"getStringValue("+e+")")},lazyRecurse:function(e,t,n,r,i,o){var a=this;return function(){a.recurse(e,t,n,r,i,o)}},lazyAssign:function(e,t){var n=this;return function(){n.assign(e,t)}},stringEscapeRegex:/[^ a-zA-Z0-9]/g,stringEscapeFn:function(e){return"\\u"+("0000"+e.charCodeAt(0).toString(16)).slice(-4)},escape:function(e){if(F(e))return"'"+e.replace(this.stringEscapeRegex,this.stringEscapeFn)+"'";if(q(e))return e.toString();if(!0===e)return"true";if(!1===e)return"false";if(null===e)return"null";if(void 0===e)return"undefined";throw vr("esc","IMPOSSIBLE")},nextId:function(e,t){var n="v"+this.state.nextId++;return e||this.current().vars.push(n+(t?"="+t:"")),n},current:function(){return this.state[this.state.computing]}},Tr.prototype={compile:function(e){var t,n,r=this;Sr(e,r.$filter),(t=Or(e))&&(n=this.recurse(t));var i,o=Cr(e.body);o&&(i=[],k(o,(function(e,t){var n=r.recurse(e);n.isPure=e.isPure,e.input=n,i.push(n),e.watchId=t})));var a=[];k(e.body,(function(e){a.push(r.recurse(e.expression))}));var s=0===e.body.length?D:1===e.body.length?a[0]:function(e,t){var n;return k(a,(function(r){n=r(e,t)})),n};return n&&(s.assign=function(e,t,r){return n(e,r,t)}),i&&(s.inputs=i),s},recurse:function(e,t,n){var r,i,o,a=this;if(e.input)return this.inputs(e.input,e.watchId);switch(e.type){case kr.Literal:return this.value(e.value,t);case kr.UnaryExpression:return i=this.recurse(e.argument),this["unary"+e.operator](i,t);case kr.BinaryExpression:case kr.LogicalExpression:return r=this.recurse(e.left),i=this.recurse(e.right),this["binary"+e.operator](r,i,t);case kr.ConditionalExpression:return this["ternary?:"](this.recurse(e.test),this.recurse(e.alternate),this.recurse(e.consequent),t);case kr.Identifier:return a.identifier(e.name,t,n);case kr.MemberExpression:return r=this.recurse(e.object,!1,!!n),e.computed||(i=e.property.name),e.computed&&(i=this.recurse(e.property)),e.computed?this.computedMember(r,i,t,n):this.nonComputedMember(r,i,t,n);case kr.CallExpression:return o=[],k(e.arguments,(function(e){o.push(a.recurse(e))})),e.filter&&(i=this.$filter(e.callee.name)),e.filter||(i=this.recurse(e.callee,!0)),e.filter?function(e,n,r,a){for(var s=[],l=0;l<o.length;++l)s.push(o[l](e,n,r,a));var c=i.apply(void 0,s,a);return t?{context:void 0,name:void 0,value:c}:c}:function(e,n,r,a){var s,l=i(e,n,r,a);if(null!=l.value){for(var c=[],u=0;u<o.length;++u)c.push(o[u](e,n,r,a));s=l.value.apply(l.context,c)}return t?{value:s}:s};case kr.AssignmentExpression:return r=this.recurse(e.left,!0,1),i=this.recurse(e.right),function(e,n,o,a){var s=r(e,n,o,a),l=i(e,n,o,a);return s.context[s.name]=l,t?{value:l}:l};case kr.ArrayExpression:return o=[],k(e.elements,(function(e){o.push(a.recurse(e))})),function(e,n,r,i){for(var a=[],s=0;s<o.length;++s)a.push(o[s](e,n,r,i));return t?{value:a}:a};case kr.ObjectExpression:return o=[],k(e.properties,(function(e){e.computed?o.push({key:a.recurse(e.key),computed:!0,value:a.recurse(e.value)}):o.push({key:e.key.type===kr.Identifier?e.key.name:""+e.key.value,computed:!1,value:a.recurse(e.value)})})),function(e,n,r,i){for(var a={},s=0;s<o.length;++s)o[s].computed?a[o[s].key(e,n,r,i)]=o[s].value(e,n,r,i):a[o[s].key]=o[s].value(e,n,r,i);return t?{value:a}:a};case kr.ThisExpression:return function(e){return t?{value:e}:e};case kr.LocalsExpression:return function(e,n){return t?{value:n}:n};case kr.NGValueParameter:return function(e,n,r){return t?{value:r}:r}}},"unary+":function(e,t){return function(n,r,i,o){var a=e(n,r,i,o);return a=z(a)?+a:0,t?{value:a}:a}},"unary-":function(e,t){return function(n,r,i,o){var a=e(n,r,i,o);return a=z(a)?-a:-0,t?{value:a}:a}},"unary!":function(e,t){return function(n,r,i,o){var a=!e(n,r,i,o);return t?{value:a}:a}},"binary+":function(e,t,n){return function(r,i,o,a){var s=Er(e(r,i,o,a),t(r,i,o,a));return n?{value:s}:s}},"binary-":function(e,t,n){return function(r,i,o,a){var s=e(r,i,o,a),l=t(r,i,o,a),c=(z(s)?s:0)-(z(l)?l:0);return n?{value:c}:c}},"binary*":function(e,t,n){return function(r,i,o,a){var s=e(r,i,o,a)*t(r,i,o,a);return n?{value:s}:s}},"binary/":function(e,t,n){return function(r,i,o,a){var s=e(r,i,o,a)/t(r,i,o,a);return n?{value:s}:s}},"binary%":function(e,t,n){return function(r,i,o,a){var s=e(r,i,o,a)%t(r,i,o,a);return n?{value:s}:s}},"binary===":function(e,t,n){return function(r,i,o,a){var s=e(r,i,o,a)===t(r,i,o,a);return n?{value:s}:s}},"binary!==":function(e,t,n){return function(r,i,o,a){var s=e(r,i,o,a)!==t(r,i,o,a);return n?{value:s}:s}},"binary==":function(e,t,n){return function(r,i,o,a){var s=e(r,i,o,a)==t(r,i,o,a);return n?{value:s}:s}},"binary!=":function(e,t,n){return function(r,i,o,a){var s=e(r,i,o,a)!=t(r,i,o,a);return n?{value:s}:s}},"binary<":function(e,t,n){return function(r,i,o,a){var s=e(r,i,o,a)<t(r,i,o,a);return n?{value:s}:s}},"binary>":function(e,t,n){return function(r,i,o,a){var s=e(r,i,o,a)>t(r,i,o,a);return n?{value:s}:s}},"binary<=":function(e,t,n){return function(r,i,o,a){var s=e(r,i,o,a)<=t(r,i,o,a);return n?{value:s}:s}},"binary>=":function(e,t,n){return function(r,i,o,a){var s=e(r,i,o,a)>=t(r,i,o,a);return n?{value:s}:s}},"binary&&":function(e,t,n){return function(r,i,o,a){var s=e(r,i,o,a)&&t(r,i,o,a);return n?{value:s}:s}},"binary||":function(e,t,n){return function(r,i,o,a){var s=e(r,i,o,a)||t(r,i,o,a);return n?{value:s}:s}},"ternary?:":function(e,t,n,r){return function(i,o,a,s){var l=e(i,o,a,s)?t(i,o,a,s):n(i,o,a,s);return r?{value:l}:l}},value:function(e,t){return function(){return t?{context:void 0,name:void 0,value:e}:e}},identifier:function(e,t,n){return function(r,i,o,a){var s=i&&e in i?i:r;n&&1!==n&&s&&null==s[e]&&(s[e]={});var l=s?s[e]:void 0;return t?{context:s,name:e,value:l}:l}},computedMember:function(e,t,n,r){return function(i,o,a,s){var l,c,u=e(i,o,a,s);return null!=u&&(l=br(l=t(i,o,a,s)),r&&1!==r&&u&&!u[l]&&(u[l]={}),c=u[l]),n?{context:u,name:l,value:c}:c}},nonComputedMember:function(e,t,n,r){return function(i,o,a,s){var l=e(i,o,a,s);r&&1!==r&&l&&null==l[t]&&(l[t]={});var c=null!=l?l[t]:void 0;return n?{context:l,name:t,value:c}:c}},inputs:function(e,t){return function(n,r,i,o){return o?o[t]:e(n,r,i)}}},jr.prototype={constructor:jr,parse:function(e){var t=this.getAst(e),n=this.astCompiler.compile(t.ast);return n.literal=function(e){return 0===e.body.length||1===e.body.length&&(e.body[0].expression.type===kr.Literal||e.body[0].expression.type===kr.ArrayExpression||e.body[0].expression.type===kr.ObjectExpression)}(t.ast),n.constant=function(e){return e.constant}(t.ast),n.oneTime=t.oneTime,n},getAst:function(e){var t=!1;return":"===(e=e.trim()).charAt(0)&&":"===e.charAt(1)&&(t=!0,e=e.substring(2)),{ast:this.ast.ast(e),oneTime:t}}};var Vr=i("$sce"),Ur={HTML:"html",CSS:"css",MEDIA_URL:"mediaUrl",URL:"url",RESOURCE_URL:"resourceUrl",JS:"js"},Hr=/_([a-z])/g;function Gr(e){return e.replace(Hr,Qe)}function Wr(e){var t=[];return z(e)&&k(e,(function(e){t.push(function(e){if("self"===e)return e;if(F(e)){if(e.indexOf("***")>-1)throw Vr("iwcard","Illegal sequence *** in string matcher. String: {0}",e);return e=ee(e).replace(/\\\*\\\*/g,".*").replace(/\\\*/g,"[^:/.?&;]*"),new RegExp("^"+e+"$")}if(W(e))return new RegExp("^"+e.source+"$");throw Vr("imatcher",'Matchers may only be "self", string patterns or RegExp objects')}(e))})),t}function Yr(){this.SCE_CONTEXTS=Ur;var t=["self"],n=[];this.trustedResourceUrlList=function(e){return arguments.length&&(t=Wr(e)),t},Object.defineProperty(this,"resourceUrlWhitelist",{get:function(){return this.trustedResourceUrlList},set:function(e){this.trustedResourceUrlList=e}}),this.bannedResourceUrlList=function(e){return arguments.length&&(n=Wr(e)),n},Object.defineProperty(this,"resourceUrlBlacklist",{get:function(){return this.bannedResourceUrlList},set:function(e){this.bannedResourceUrlList=e}}),this.$get=["$injector","$$sanitizeUri",function(r,i){var o=function(e){throw Vr("unsafe","Attempting to use an unsafe value in a safe context.")};function a(t,n){return"self"===t?ci(n,ai)||function(t){return ci(t,function(){if(e.document.baseURI)return e.document.baseURI;ii||((ii=e.document.createElement("a")).href=".",ii=ii.cloneNode(!1));return ii.href}())}(n):!!t.exec(n.href)}function s(e){var t=function(e){this.$$unwrapTrustedValue=function(){return e}};return e&&(t.prototype=new e),t.prototype.valueOf=function(){return this.$$unwrapTrustedValue()},t.prototype.toString=function(){return this.$$unwrapTrustedValue().toString()},t}r.has("$sanitize")&&(o=r.get("$sanitize"));var l=s(),c={};return c[Ur.HTML]=s(l),c[Ur.CSS]=s(l),c[Ur.MEDIA_URL]=s(l),c[Ur.URL]=s(c[Ur.MEDIA_URL]),c[Ur.JS]=s(l),c[Ur.RESOURCE_URL]=s(c[Ur.URL]),{trustAs:function(e,t){var n=c.hasOwnProperty(e)?c[e]:null;if(!n)throw Vr("icontext","Attempted to trust a value in invalid context. Context: {0}; Value: {1}",e,t);if(null===t||M(t)||""===t)return t;if("string"!=typeof t)throw Vr("itype","Attempted to trust a non-string value in a content requiring a string: Context: {0}",e);return new n(t)},getTrusted:function(e,r){if(null===r||M(r)||""===r)return r;var s=c.hasOwnProperty(e)?c[e]:null;if(s&&r instanceof s)return r.$$unwrapTrustedValue();if(G(r.$$unwrapTrustedValue)&&(r=r.$$unwrapTrustedValue()),e===Ur.MEDIA_URL||e===Ur.URL)return i(r.toString(),e===Ur.MEDIA_URL);if(e===Ur.RESOURCE_URL){if(function(e){var r,i,o=li(e.toString()),s=!1;for(r=0,i=t.length;r<i;r++)if(a(t[r],o)){s=!0;break}if(s)for(r=0,i=n.length;r<i;r++)if(a(n[r],o)){s=!1;break}return s}(r))return r;throw Vr("insecurl","Blocked loading resource from url not allowed by $sceDelegate policy. URL: {0}",r.toString())}if(e===Ur.HTML)return o(r);throw Vr("unsafe","Attempting to use an unsafe value in a safe context.")},valueOf:function(e){return e instanceof l?e.$$unwrapTrustedValue():e}}}]}function Xr(){var e=!0;this.enabled=function(t){return arguments.length&&(e=!!t),e},this.$get=["$parse","$sceDelegate",function(t,n){if(e&&o<8)throw Vr("iequirks","Strict Contextual Escaping does not support Internet Explorer version < 11 in quirks mode. You can fix this by adding the text <!doctype html> to the top of your HTML document. See http://docs.angularjs.org/api/ng.$sce for more information.");var r=qe(Ur);r.isEnabled=function(){return e},r.trustAs=n.trustAs,r.getTrusted=n.getTrusted,r.valueOf=n.valueOf,e||(r.trustAs=r.getTrusted=function(e,t){return t},r.valueOf=R),r.parseAs=function(e,n){var i=t(n);return i.literal&&i.constant?i:t(n,(function(t){return r.getTrusted(e,t)}))};var i=r.parseAs,a=r.getTrusted,s=r.trustAs;return k(Ur,(function(e,t){var n=d(t);r[Gr("parse_as_"+n)]=function(t){return i(e,t)},r[Gr("get_trusted_"+n)]=function(t){return a(e,t)},r[Gr("trust_as_"+n)]=function(t){return s(e,t)}})),r}]}function Zr(){this.$get=["$window","$document",function(e,t){var n={},r=!(!(e.nw&&e.nw.process)&&e.chrome&&(e.chrome.app&&e.chrome.app.runtime||!e.chrome.app&&e.chrome.runtime&&e.chrome.runtime.id))&&e.history&&e.history.pushState,i=T((/android (\d+)/.exec(d((e.navigator||{}).userAgent))||[])[1]),a=/Boxee/i.test((e.navigator||{}).userAgent),s=t[0]||{},l=s.body&&s.body.style,c=!1,u=!1;return l&&(c=!(!("transition"in l)&&!("webkitTransition"in l)),u=!(!("animation"in l)&&!("webkitAnimation"in l))),{history:!(!r||i<4||a),hasEvent:function(e){if("input"===e&&o)return!1;if(M(n[e])){var t=s.createElement("div");n[e]="on"+e in t}return n[e]},csp:le(),transitions:c,animations:u,android:i}}]}function Qr(){this.$get=I((function(e){return new Jr(e)}))}function Jr(e){var t={},n=[],r=this.ALL_TASKS_TYPE="$$all$$",i=this.DEFAULT_TASK_TYPE="$$default$$";function o(){var e=n.pop();return e&&e.cb}function a(e){for(var t=n.length-1;t>=0;--t){var r=n[t];if(r.type===e)return n.splice(t,1),r.cb}}this.completeTask=function(n,s){s=s||i;try{n()}finally{!function(e){t[e=e||i]&&(t[e]--,t[r]--)}(s);var l=t[s],c=t[r];if(!c||!l)for(var u,d=c?a:o;u=d(s);)try{u()}catch(t){e.error(t)}}},this.incTaskCount=function(e){t[e=e||i]=(t[e]||0)+1,t[r]=(t[r]||0)+1},this.notifyWhenNoPendingTasks=function(e,i){t[i=i||r]?n.push({type:i,cb:e}):e()}}var Kr=i("$templateRequest");function ei(){var e;this.httpOptions=function(t){return t?(e=t,this):e},this.$get=["$exceptionHandler","$templateCache","$http","$q","$sce",function(t,n,r,i,o){function a(s,l){a.totalPendingRequests++,F(s)&&!M(n.get(s))||(s=o.getTrustedResourceUrl(s));var c=r.defaults&&r.defaults.transformResponse;return U(c)?c=c.filter((function(e){return e!==zn})):c===zn&&(c=null),r.get(s,O({cache:n,transformResponse:c},e)).finally((function(){a.totalPendingRequests--})).then((function(e){return n.put(s,e.data)}),(function(e){l||(e=Kr("tpload","Failed to load template: {0} (HTTP status: {1} {2})",s,e.status,e.statusText),t(e));return i.reject(e)}))}return a.totalPendingRequests=0,a}]}function ti(){this.$get=["$rootScope","$browser","$location",function(e,t,n){var r={findBindings:function(e,t,n){var r=e.getElementsByClassName("ng-binding"),i=[];return k(r,(function(e){var r=y.element(e).data("$binding");r&&k(r,(function(r){n?new RegExp("(^|\\s)"+ee(t)+"(\\s|\\||$)").test(r)&&i.push(e):-1!==r.indexOf(t)&&i.push(e)}))})),i},findModels:function(e,t,n){for(var r=["ng-","data-ng-","ng\\:"],i=0;i<r.length;++i){var o="["+r[i]+"model"+(n?"=":"*=")+'"'+t+'"]',a=e.querySelectorAll(o);if(a.length)return a}},getLocation:function(){return n.url()},setLocation:function(t){t!==n.url()&&(n.url(t),e.$digest())},whenStable:function(e){t.notifyWhenNoOutstandingRequests(e)}};return r}]}var ni=i("$timeout");function ri(){this.$get=["$rootScope","$browser","$q","$$q","$exceptionHandler",function(e,t,n,r,i){var o={};function a(a,s,l){G(a)||(l=s,s=a,a=D);var c,u=de(arguments,3),d=z(l)&&!l,f=(d?r:n).defer(),p=f.promise;return c=t.defer((function(){try{f.resolve(a.apply(null,u))}catch(e){f.reject(e),i(e)}finally{delete o[p.$$timeoutId]}d||e.$apply()}),s,"$timeout"),p.$$timeoutId=c,o[c]=f,p}return a.cancel=function(e){if(!e)return!1;if(!e.hasOwnProperty("$$timeoutId"))throw ni("badprom","`$timeout.cancel()` called with a promise that was not generated by `$timeout()`.");if(!o.hasOwnProperty(e.$$timeoutId))return!1;var n=e.$$timeoutId,r=o[n];return Lr(r.promise),r.reject("canceled"),delete o[n],t.defer.cancel(n)},a}]}var ii,oi=e.document.createElement("a"),ai=li(e.location.href);oi.href="http://[::1]";var si="[::1]"===oi.hostname;function li(e){if(!F(e))return e;var t=e;o&&(oi.setAttribute("href",t),t=oi.href),oi.setAttribute("href",t);var n=oi.hostname;return!si&&n.indexOf(":")>-1&&(n="["+n+"]"),{href:oi.href,protocol:oi.protocol?oi.protocol.replace(/:$/,""):"",host:oi.host,search:oi.search?oi.search.replace(/^\?/,""):"",hash:oi.hash?oi.hash.replace(/^#/,""):"",hostname:n,port:oi.port,pathname:"/"===oi.pathname.charAt(0)?oi.pathname:"/"+oi.pathname}}function ci(e,t){return e=li(e),t=li(t),e.protocol===t.protocol&&e.host===t.host}function ui(){this.$get=I(e)}function di(e){var t=e[0]||{},n={},r="";function i(e){try{return decodeURIComponent(e)}catch(t){return e}}return function(){var e,o,a,s,l,c=function(e){try{return e.cookie||""}catch(e){return""}}(t);if(c!==r)for(e=(r=c).split("; "),n={},a=0;a<e.length;a++)(s=(o=e[a]).indexOf("="))>0&&(l=i(o.substring(0,s)),M(n[l])&&(n[l]=i(o.substring(s+1))));return n}}function fi(){this.$get=di}function pi(e){function t(n,r){if(L(n)){var i={};return k(n,(function(e,n){i[n]=t(n,e)})),i}return e.factory(n+"Filter",r)}this.register=t,this.$get=["$injector",function(e){return function(t){return e.get(t+"Filter")}}],t("currency",mi),t("date",_i),t("filter",hi),t("json",Ti),t("limitTo",Di),t("lowercase",ji),t("number",bi),t("orderBy",Ii),t("uppercase",Pi)}function hi(){return function(e,t,n,r){if(!w(e)){if(null==e)return e;throw i("filter")("notarray","Expected array but received: {0}",e)}var o,a;switch(r=r||"$",vi(t)){case"function":o=t;break;case"boolean":case"null":case"number":case"string":a=!0;case"object":o=function(e,t,n,r){var i=L(e)&&n in e;!0===t?t=se:G(t)||(t=function(e,t){return!M(e)&&(null===e||null===t?e===t:!(L(t)||L(e)&&!N(e))&&(e=d(""+e),t=d(""+t),-1!==e.indexOf(t)))});return function(o){return i&&!L(o)?gi(o,e[n],t,n,!1):gi(o,e,t,n,r)}}(t,n,r,a);break;default:return e}return Array.prototype.filter.call(e,o)}}function gi(e,t,n,r,i,o){var a=vi(e),s=vi(t);if("string"===s&&"!"===t.charAt(0))return!gi(e,t.substring(1),n,r,i);if(U(e))return e.some((function(e){return gi(e,t,n,r,i)}));switch(a){case"object":var l;if(i){for(l in e)if(l.charAt&&"$"!==l.charAt(0)&&gi(e[l],t,n,r,!0))return!0;return!o&&gi(e,t,n,r,!1)}if("object"===s){for(l in t){var c=t[l];if(!G(c)&&!M(c)){var u=l===r;if(!gi(u?e:e[l],c,n,r,u,u))return!1}}return!0}return n(e,t);case"function":return!1;default:return n(e,t)}}function vi(e){return null===e?"null":typeof e}di.$inject=["$document"],pi.$inject=["$provide"];function mi(e){var t=e.NUMBER_FORMATS;return function(e,n,r){M(n)&&(n=t.CURRENCY_SYM),M(r)&&(r=t.PATTERNS[1].maxFrac);var i=n?/\u00A4/g:/\s*\u00A4\s*/g;return null==e?e:yi(e,t.PATTERNS[1],t.GROUP_SEP,t.DECIMAL_SEP,r).replace(i,n)}}function bi(e){var t=e.NUMBER_FORMATS;return function(e,n){return null==e?e:yi(e,t.PATTERNS[0],t.GROUP_SEP,t.DECIMAL_SEP,n)}}function yi(e,t,n,r,i){if(!F(e)&&!q(e)||isNaN(e))return"";var o,a=!isFinite(e),s=!1,l=Math.abs(e)+"",c="";if(a)c="∞";else{(function(e,t,n,r){var i=e.d,o=i.length-e.i,a=(t=M(t)?Math.min(Math.max(n,o),r):+t)+e.i,s=i[a];if(a>0){i.splice(Math.max(e.i,a));for(var l=a;l<i.length;l++)i[l]=0}else{o=Math.max(0,o),e.i=1,i.length=Math.max(1,a=t+1),i[0]=0;for(var c=1;c<a;c++)i[c]=0}if(s>=5)if(a-1<0){for(var u=0;u>a;u--)i.unshift(0),e.i++;i.unshift(1),e.i++}else i[a-1]++;for(;o<Math.max(0,t);o++)i.push(0);var d=i.reduceRight((function(e,t,n,r){return t+=e,r[n]=t%10,Math.floor(t/10)}),0);d&&(i.unshift(d),e.i++)})(o=function(e){var t,n,r,i,o,a=0;for((n=e.indexOf("."))>-1&&(e=e.replace(".","")),(r=e.search(/e/i))>0?(n<0&&(n=r),n+=+e.slice(r+1),e=e.substring(0,r)):n<0&&(n=e.length),r=0;"0"===e.charAt(r);r++);if(r===(o=e.length))t=[0],n=1;else{for(o--;"0"===e.charAt(o);)o--;for(n-=r,t=[],i=0;r<=o;r++,i++)t[i]=+e.charAt(r)}return n>22&&(t=t.splice(0,21),a=n-1,n=1),{d:t,e:a,i:n}}(l),i,t.minFrac,t.maxFrac);var u=o.d,d=o.i,f=o.e,p=[];for(s=u.reduce((function(e,t){return e&&!t}),!0);d<0;)u.unshift(0),d++;d>0?p=u.splice(d,u.length):(p=u,u=[0]);var h=[];for(u.length>=t.lgSize&&h.unshift(u.splice(-t.lgSize,u.length).join(""));u.length>t.gSize;)h.unshift(u.splice(-t.gSize,u.length).join(""));u.length&&h.unshift(u.join("")),c=h.join(n),p.length&&(c+=r+p.join("")),f&&(c+="e+"+f)}return e<0&&!s?t.negPre+c+t.negSuf:t.posPre+c+t.posSuf}function xi(e,t,n,r){var i="";for((e<0||r&&e<=0)&&(r?e=1-e:(e=-e,i="-")),e=""+e;e.length<t;)e="0"+e;return n&&(e=e.substr(e.length-t)),i+e}function wi(e,t,n,r,i){return n=n||0,function(o){var a=o["get"+e]();return(n>0||a>-n)&&(a+=n),0===a&&-12===n&&(a=12),xi(a,t,r,i)}}function ki(e,t,n){return function(r,i){var o=r["get"+e]();return i[f((n?"STANDALONE":"")+(t?"SHORT":"")+e)][o]}}function Ai(e){var t=new Date(e,0,1).getDay();return new Date(e,0,(t<=4?5:12)-t)}function Ei(e){return function(t){var n,r=Ai(t.getFullYear()),i=+(n=t,new Date(n.getFullYear(),n.getMonth(),n.getDate()+(4-n.getDay())))-+r;return xi(1+Math.round(i/6048e5),e)}}function Si(e,t){return e.getFullYear()<=0?t.ERAS[0]:t.ERAS[1]}mi.$inject=["$locale"],bi.$inject=["$locale"];var Ci={yyyy:wi("FullYear",4,0,!1,!0),yy:wi("FullYear",2,0,!0,!0),y:wi("FullYear",1,0,!1,!0),MMMM:ki("Month"),MMM:ki("Month",!0),MM:wi("Month",2,1),M:wi("Month",1,1),LLLL:ki("Month",!1,!0),dd:wi("Date",2),d:wi("Date",1),HH:wi("Hours",2),H:wi("Hours",1),hh:wi("Hours",2,-12),h:wi("Hours",1,-12),mm:wi("Minutes",2),m:wi("Minutes",1),ss:wi("Seconds",2),s:wi("Seconds",1),sss:wi("Milliseconds",3),EEEE:ki("Day"),EEE:ki("Day",!0),a:function(e,t){return e.getHours()<12?t.AMPMS[0]:t.AMPMS[1]},Z:function(e,t,n){var r=-1*n,i=r>=0?"+":"";return i+=xi(Math[r>0?"floor":"ceil"](r/60),2)+xi(Math.abs(r%60),2)},ww:Ei(2),w:Ei(1),G:Si,GG:Si,GGG:Si,GGGG:function(e,t){return e.getFullYear()<=0?t.ERANAMES[0]:t.ERANAMES[1]}},$i=/((?:[^yMLdHhmsaZEwG']+)|(?:'(?:[^']|'')*')|(?:E+|y+|M+|L+|d+|H+|h+|m+|s+|a|Z|G+|w+))([\s\S]*)/,Oi=/^-?\d+$/;function _i(e){var t=/^(\d{4})-?(\d\d)-?(\d\d)(?:T(\d\d)(?::?(\d\d)(?::?(\d\d)(?:\.(\d+))?)?)?(Z|([+-])(\d\d):?(\d\d))?)?$/;return function(n,r,i){var o,a,s="",l=[];if(r=r||"mediumDate",r=e.DATETIME_FORMATS[r]||r,F(n)&&(n=Oi.test(n)?T(n):function(e){var n;if(n=e.match(t)){var r=new Date(0),i=0,o=0,a=n[8]?r.setUTCFullYear:r.setFullYear,s=n[8]?r.setUTCHours:r.setHours;n[9]&&(i=T(n[9]+n[10]),o=T(n[9]+n[11])),a.call(r,T(n[1]),T(n[2])-1,T(n[3]));var l=T(n[4]||0)-i,c=T(n[5]||0)-o,u=T(n[6]||0),d=Math.round(1e3*parseFloat("0."+(n[7]||0)));return s.call(r,l,c,u,d),r}return e}(n)),q(n)&&(n=new Date(n)),!V(n)||!isFinite(n.getTime()))return n;for(;r;)(a=$i.exec(r))?r=(l=ue(l,a,1)).pop():(l.push(r),r=null);var c=n.getTimezoneOffset();return i&&(c=me(i,c),n=ye(n,i,!0)),k(l,(function(t){s+=(o=Ci[t])?o(n,e.DATETIME_FORMATS,c):"''"===t?"'":t.replace(/(^'|'$)/g,"").replace(/''/g,"'")})),s}}function Ti(){return function(e,t){return M(t)&&(t=2),he(e,t)}}_i.$inject=["$locale"];var ji=I(d),Pi=I(f);function Di(){return function(e,t,n){return t=Math.abs(Number(t))===1/0?Number(t):T(t),j(t)?e:(q(e)&&(e=e.toString()),w(e)?(n=(n=!n||isNaN(n)?0:T(n))<0?Math.max(0,e.length+n):n,t>=0?Ri(e,n,n+t):0===n?Ri(e,t,e.length):Ri(e,Math.max(0,n+t),n)):e)}}function Ri(e,t,n){return F(e)?e.slice(t,n):p.call(e,t,n)}function Ii(e){return function(r,o,a,s){if(null==r)return r;if(!w(r))throw i("orderBy")("notarray","Expected array but received: {0}",r);U(o)||(o=[o]),0===o.length&&(o=["+"]);var l=o.map((function(t){var n=1,r=R;if(G(t))r=t;else if(F(t)&&("+"!==t.charAt(0)&&"-"!==t.charAt(0)||(n="-"===t.charAt(0)?-1:1,t=t.substring(1)),""!==t&&(r=e(t)).constant)){var i=r();r=function(e){return e[i]}}return{get:r,descending:n}})),c=a?-1:1,u=G(s)?s:n,d=Array.prototype.map.call(r,(function(e,n){return{value:e,tieBreaker:{value:n,type:"number",index:n},predicateValues:l.map((function(r){return function(e,n){var r=typeof e;null===e?r="null":"object"===r&&(e=function(e){if(G(e.valueOf)&&t(e=e.valueOf()))return e;if(N(e)&&t(e=e.toString()))return e;return e}(e));return{value:e,type:r,index:n}}(r.get(e),n)}))}}));return d.sort((function(e,t){for(var r=0,i=l.length;r<i;r++){var o=u(e.predicateValues[r],t.predicateValues[r]);if(o)return o*l[r].descending*c}return(u(e.tieBreaker,t.tieBreaker)||n(e.tieBreaker,t.tieBreaker))*c})),r=d.map((function(e){return e.value}))};function t(e){switch(typeof e){case"number":case"boolean":case"string":return!0;default:return!1}}function n(e,t){var n=0,r=e.type,i=t.type;if(r===i){var o=e.value,a=t.value;"string"===r?(o=o.toLowerCase(),a=a.toLowerCase()):"object"===r&&(L(o)&&(o=e.index),L(a)&&(a=t.index)),o!==a&&(n=o<a?-1:1)}else n="undefined"===r?1:"undefined"===i?-1:"null"===r?1:"null"===i||r<i?-1:1;return n}}function Ni(e){return G(e)&&(e={link:e}),e.restrict=e.restrict||"AC",I(e)}Ii.$inject=["$parse"];var Mi=I({restrict:"E",compile:function(e,t){if(!t.href&&!t.xlinkHref)return function(e,t){if("a"===t[0].nodeName.toLowerCase()){var n="[object SVGAnimatedString]"===v.call(t.prop("href"))?"xlink:href":"href";t.on("click",(function(e){t.attr(n)||e.preventDefault()}))}}}}),zi={};k(jt,(function(e,t){if("multiple"!==e){var n=yn("ng-"+t),r=i;"checked"===e&&(r=function(e,t,r){r.ngModel!==r[n]&&i(e,0,r)}),zi[n]=function(){return{restrict:"A",priority:100,link:r}}}function i(e,r,i){e.$watch(i[n],(function(e){i.$set(t,!!e)}))}})),k(Dt,(function(e,t){zi[t]=function(){return{priority:100,link:function(e,n,r){if("ngPattern"===t&&"/"===r.ngPattern.charAt(0)){var i=r.ngPattern.match(c);if(i)return void r.$set("ngPattern",new RegExp(i[1],i[2]))}e.$watch(r[t],(function(e){r.$set(t,e)}))}}}})),k(["src","srcset","href"],(function(e){var t=yn("ng-"+e);zi[t]=["$sce",function(n){return{priority:99,link:function(r,i,a){var s=e,l=e;"href"===e&&"[object SVGAnimatedString]"===v.call(i.prop("href"))&&(l="xlinkHref",a.$attr[l]="xlink:href",s=null),a.$set(t,n.getTrustedMediaUrl(a[t])),a.$observe(t,(function(t){t?(a.$set(l,t),o&&s&&i.prop(s,a[l])):"href"===e&&a.$set(l,null)}))}}}]}));var Li={$addControl:D,$getControls:I([]),$$renameControl:function(e,t){e.$name=t},$removeControl:D,$setValidity:D,$setDirty:D,$setPristine:D,$setSubmitted:D,$$setSubmitted:D};function Bi(e,t,n,r,i){this.$$controls=[],this.$error={},this.$$success={},this.$pending=void 0,this.$name=i(t.name||t.ngForm||"")(n),this.$dirty=!1,this.$pristine=!0,this.$valid=!0,this.$invalid=!1,this.$submitted=!1,this.$$parentForm=Li,this.$$element=e,this.$$animate=r,Ui(this)}Bi.$inject=["$element","$attrs","$scope","$animate","$interpolate"],Bi.prototype={$rollbackViewValue:function(){k(this.$$controls,(function(e){e.$rollbackViewValue()}))},$commitViewValue:function(){k(this.$$controls,(function(e){e.$commitViewValue()}))},$addControl:function(e){Me(e.$name,"input"),this.$$controls.push(e),e.$name&&(this[e.$name]=e),e.$$parentForm=this},$getControls:function(){return qe(this.$$controls)},$$renameControl:function(e,t){var n=e.$name;this[n]===e&&delete this[n],this[t]=e,e.$name=t},$removeControl:function(e){e.$name&&this[e.$name]===e&&delete this[e.$name],k(this.$pending,(function(t,n){this.$setValidity(n,null,e)}),this),k(this.$error,(function(t,n){this.$setValidity(n,null,e)}),this),k(this.$$success,(function(t,n){this.$setValidity(n,null,e)}),this),ie(this.$$controls,e),e.$$parentForm=Li},$setDirty:function(){this.$$animate.removeClass(this.$$element,Bo),this.$$animate.addClass(this.$$element,Fo),this.$dirty=!0,this.$pristine=!1,this.$$parentForm.$setDirty()},$setPristine:function(){this.$$animate.setClass(this.$$element,Bo,Fo+" ng-submitted"),this.$dirty=!1,this.$pristine=!0,this.$submitted=!1,k(this.$$controls,(function(e){e.$setPristine()}))},$setUntouched:function(){k(this.$$controls,(function(e){e.$setUntouched()}))},$setSubmitted:function(){for(var e=this;e.$$parentForm&&e.$$parentForm!==Li;)e=e.$$parentForm;e.$$setSubmitted()},$$setSubmitted:function(){this.$$animate.addClass(this.$$element,"ng-submitted"),this.$submitted=!0,k(this.$$controls,(function(e){e.$$setSubmitted&&e.$$setSubmitted()}))}},Hi({clazz:Bi,set:function(e,t,n){var r=e[t];r?-1===r.indexOf(n)&&r.push(n):e[t]=[n]},unset:function(e,t,n){var r=e[t];r&&(ie(r,n),0===r.length&&delete e[t])}});var Fi=function(e){return["$timeout","$parse",function(t,n){return{name:"form",restrict:e?"EAC":"E",require:["form","^^?form"],controller:Bi,compile:function(n,i){n.addClass(Bo).addClass(zo);var o=i.name?"name":!(!e||!i.ngForm)&&"ngForm";return{pre:function(e,n,i,a){var s=a[0];if(!("action"in i)){var l=function(t){e.$apply((function(){s.$commitViewValue(),s.$setSubmitted()})),t.preventDefault()};n[0].addEventListener("submit",l),n.on("$destroy",(function(){t((function(){n[0].removeEventListener("submit",l)}),0,!1)}))}(a[1]||s.$$parentForm).$addControl(s);var c=o?r(s.$name):D;o&&(c(e,s),i.$observe(o,(function(t){s.$name!==t&&(c(e,void 0),s.$$parentForm.$$renameControl(s,t),(c=r(s.$name))(e,s))}))),n.on("$destroy",(function(){s.$$parentForm.$removeControl(s),c(e,void 0),O(s,Li)}))}}}};function r(e){return""===e?n('this[""]').assign:n(e).assign||D}}]},qi=Fi(),Vi=Fi(!0);function Ui(e){e.$$classCache={},e.$$classCache[Lo]=!(e.$$classCache[zo]=e.$$element.hasClass(zo))}function Hi(e){var t=e.clazz,n=e.set,r=e.unset;function i(e,t,n){n&&!e.$$classCache[t]?(e.$$animate.addClass(e.$$element,t),e.$$classCache[t]=!0):!n&&e.$$classCache[t]&&(e.$$animate.removeClass(e.$$element,t),e.$$classCache[t]=!1)}function o(e,t,n){t=t?"-"+Pe(t,"-"):"",i(e,zo+t,!0===n),i(e,Lo+t,!1===n)}t.prototype.$setValidity=function(e,t,a){var s;M(t)?function(e,t,r,i){e[t]||(e[t]={});n(e[t],r,i)}(this,"$pending",e,a):function(e,t,n,i){e[t]&&r(e[t],n,i);Gi(e[t])&&(e[t]=void 0)}(this,"$pending",e,a),Z(t)?t?(r(this.$error,e,a),n(this.$$success,e,a)):(n(this.$error,e,a),r(this.$$success,e,a)):(r(this.$error,e,a),r(this.$$success,e,a)),this.$pending?(i(this,"ng-pending",!0),this.$valid=this.$invalid=void 0,o(this,"",null)):(i(this,"ng-pending",!1),this.$valid=Gi(this.$error),this.$invalid=!this.$valid,o(this,"",this.$valid)),o(this,e,s=this.$pending&&this.$pending[e]?void 0:!this.$error[e]&&(!!this.$$success[e]||null)),this.$$parentForm.$setValidity(e,s,this)}}function Gi(e){if(e)for(var t in e)if(e.hasOwnProperty(t))return!1;return!0}var Wi=/^\d{4,}-[01]\d-[0-3]\dT[0-2]\d:[0-5]\d:[0-5]\d\.\d+(?:[+-][0-2]\d:[0-5]\d|Z)$/,Yi=/^[a-z][a-z\d.+-]*:\/*(?:[^:@]+(?::[^@]+)?@)?(?:[^\s:/?#]+|\[[a-f\d:]+])(?::\d+)?(?:\/[^?#]*)?(?:\?[^#]*)?(?:#.*)?$/i,Xi=/^(?=.{1,254}$)(?=.{1,64}@)[-!#$%&'*+/0-9=?A-Z^_`a-z{|}~]+(\.[-!#$%&'*+/0-9=?A-Z^_`a-z{|}~]+)*@[A-Za-z0-9]([A-Za-z0-9-]{0,61}[A-Za-z0-9])?(\.[A-Za-z0-9]([A-Za-z0-9-]{0,61}[A-Za-z0-9])?)*$/,Zi=/^\s*(-|\+)?(\d+|(\d*(\.\d*)))([eE][+-]?\d+)?\s*$/,Qi=/^(\d{4,})-(\d{2})-(\d{2})$/,Ji=/^(\d{4,})-(\d\d)-(\d\d)T(\d\d):(\d\d)(?::(\d\d)(\.\d{1,3})?)?$/,Ki=/^(\d{4,})-W(\d\d)$/,eo=/^(\d{4,})-(\d\d)$/,to=/^(\d\d):(\d\d)(?::(\d\d)(\.\d{1,3})?)?$/,no=Le();k("date,datetime-local,month,time,week".split(","),(function(e){no[e]=!0}));var ro={text:function(e,t,n,r,i,o){oo(e,t,n,r,i,o),io(r)},date:so("date",Qi,ao(Qi,["yyyy","MM","dd"]),"yyyy-MM-dd"),"datetime-local":so("datetimelocal",Ji,ao(Ji,["yyyy","MM","dd","HH","mm","ss","sss"]),"yyyy-MM-ddTHH:mm:ss.sss"),time:so("time",to,ao(to,["HH","mm","ss","sss"]),"HH:mm:ss.sss"),week:so("week",Ki,(function(e,t){if(V(e))return e;if(F(e)){Ki.lastIndex=0;var n=Ki.exec(e);if(n){var r=+n[1],i=+n[2],o=0,a=0,s=0,l=0,c=Ai(r),u=7*(i-1);return t&&(o=t.getHours(),a=t.getMinutes(),s=t.getSeconds(),l=t.getMilliseconds()),new Date(r,0,c.getDate()+u,o,a,s,l)}}return NaN}),"yyyy-Www"),month:so("month",eo,ao(eo,["yyyy","MM"]),"yyyy-MM"),number:function(e,t,n,r,i,o,a,s){var l;if(lo(e,t,n,r,"number"),co(r),oo(e,t,n,r,i,o),z(n.min)||n.ngMin){var c=n.min||s(n.ngMin)(e);l=uo(c),r.$validators.min=function(e,t){return r.$isEmpty(t)||M(l)||t>=l},n.$observe("min",(function(e){e!==c&&(l=uo(e),c=e,r.$validate())}))}if(z(n.max)||n.ngMax){var u=n.max||s(n.ngMax)(e),d=uo(u);r.$validators.max=function(e,t){return r.$isEmpty(t)||M(d)||t<=d},n.$observe("max",(function(e){e!==u&&(d=uo(e),u=e,r.$validate())}))}if(z(n.step)||n.ngStep){var f=n.step||s(n.ngStep)(e),p=uo(f);r.$validators.step=function(e,t){return r.$isEmpty(t)||M(p)||ho(t,l||0,p)},n.$observe("step",(function(e){e!==f&&(p=uo(e),f=e,r.$validate())}))}},url:function(e,t,n,r,i,o){oo(e,t,n,r,i,o),io(r),r.$validators.url=function(e,t){var n=e||t;return r.$isEmpty(n)||Yi.test(n)}},email:function(e,t,n,r,i,o){oo(e,t,n,r,i,o),io(r),r.$validators.email=function(e,t){var n=e||t;return r.$isEmpty(n)||Xi.test(n)}},radio:function(e,t,n,r){var i=!n.ngTrim||"false"!==K(n.ngTrim);M(n.name)&&t.attr("name",S());t.on("change",(function(e){var o;t[0].checked&&(o=n.value,i&&(o=K(o)),r.$setViewValue(o,e&&e.type))})),r.$render=function(){var e=n.value;i&&(e=K(e)),t[0].checked=e===r.$viewValue},n.$observe("value",r.$render)},range:function(e,t,n,r,i,o){lo(e,t,n,r,"range"),co(r),oo(e,t,n,r,i,o);var a=r.$$hasNativeValidators&&"range"===t[0].type,s=a?0:void 0,l=a?100:void 0,c=a?1:void 0,u=t[0].validity,d=z(n.min),f=z(n.max),p=z(n.step),h=r.$render;r.$render=a&&z(u.rangeUnderflow)&&z(u.rangeOverflow)?function(){h(),r.$setViewValue(t.val())}:h,d&&(s=uo(n.min),r.$validators.min=a?function(){return!0}:function(e,t){return r.$isEmpty(t)||M(s)||t>=s},g("min",(function(e){if(s=uo(e),j(r.$modelValue))return;if(a){var n=t.val();s>n&&(n=s,t.val(n)),r.$setViewValue(n)}else r.$validate()})));f&&(l=uo(n.max),r.$validators.max=a?function(){return!0}:function(e,t){return r.$isEmpty(t)||M(l)||t<=l},g("max",(function(e){if(l=uo(e),j(r.$modelValue))return;if(a){var n=t.val();l<n&&(t.val(l),n=l<s?s:l),r.$setViewValue(n)}else r.$validate()})));p&&(c=uo(n.step),r.$validators.step=a?function(){return!u.stepMismatch}:function(e,t){return r.$isEmpty(t)||M(c)||ho(t,s||0,c)},g("step",(function(e){if(c=uo(e),j(r.$modelValue))return;a?r.$viewValue!==t.val()&&r.$setViewValue(t.val()):r.$validate()})));function g(e,r){t.attr(e,n[e]);var i=n[e];n.$observe(e,(function(e){e!==i&&(i=e,r(e))}))}},checkbox:function(e,t,n,r,i,o,a,s){var l=go(s,e,"ngTrueValue",n.ngTrueValue,!0),c=go(s,e,"ngFalseValue",n.ngFalseValue,!1);t.on("change",(function(e){r.$setViewValue(t[0].checked,e&&e.type)})),r.$render=function(){t[0].checked=r.$viewValue},r.$isEmpty=function(e){return!1===e},r.$formatters.push((function(e){return se(e,l)})),r.$parsers.push((function(e){return e?l:c}))},hidden:D,button:D,submit:D,reset:D,file:D};function io(e){e.$formatters.push((function(t){return e.$isEmpty(t)?t:t.toString()}))}function oo(e,t,n,r,i,o){var a,s=d(t[0].type);if(!i.android){var l=!1;t.on("compositionstart",(function(){l=!0})),t.on("compositionupdate",(function(e){(M(e.data)||""===e.data)&&(l=!1)})),t.on("compositionend",(function(){l=!1,c()}))}var c=function(e){if(a&&(o.defer.cancel(a),a=null),!l){var i=t.val(),c=e&&e.type;"password"===s||n.ngTrim&&"false"===n.ngTrim||(i=K(i)),(r.$viewValue!==i||""===i&&r.$$hasNativeValidators)&&r.$setViewValue(i,c)}};if(i.hasEvent("input"))t.on("input",c);else{var u=function(e,t,n){a||(a=o.defer((function(){a=null,t&&t.value===n||c(e)})))};t.on("keydown",(function(e){var t=e.keyCode;91===t||15<t&&t<19||37<=t&&t<=40||u(e,this,this.value)})),i.hasEvent("paste")&&t.on("paste cut drop",u)}t.on("change",c),no[s]&&r.$$hasNativeValidators&&s===n.type&&t.on("keydown wheel mousedown",(function(e){if(!a){var t=this.validity,n=t.badInput,r=t.typeMismatch;a=o.defer((function(){a=null,t.badInput===n&&t.typeMismatch===r||c(e)}))}})),r.$render=function(){var e=r.$isEmpty(r.$viewValue)?"":r.$viewValue;t.val()!==e&&t.val(e)}}function ao(e,t){return function(n,r){var i,o;if(V(n))return n;if(F(n)){if('"'===n.charAt(0)&&'"'===n.charAt(n.length-1)&&(n=n.substring(1,n.length-1)),Wi.test(n))return new Date(n);if(e.lastIndex=0,i=e.exec(n)){i.shift(),o=r?{yyyy:r.getFullYear(),MM:r.getMonth()+1,dd:r.getDate(),HH:r.getHours(),mm:r.getMinutes(),ss:r.getSeconds(),sss:r.getMilliseconds()/1e3}:{yyyy:1970,MM:1,dd:1,HH:0,mm:0,ss:0,sss:0},k(i,(function(e,n){n<t.length&&(o[t[n]]=+e)}));var a=new Date(o.yyyy,o.MM-1,o.dd,o.HH,o.mm,o.ss||0,1e3*o.sss||0);return o.yyyy<100&&a.setFullYear(o.yyyy),a}}return NaN}}function so(e,t,n,r){return function(i,o,a,s,l,c,u,d){lo(i,o,a,s,e),oo(0,o,a,s,l,c);var f,p,h="time"===e||"datetimelocal"===e;if(s.$parsers.push((function(n){return s.$isEmpty(n)?null:t.test(n)?w(n,f):void(s.$$parserName=e)})),s.$formatters.push((function(e){if(e&&!V(e))throw qo("datefmt","Expected `{0}` to be a date",e);if(y(e)){f=e;var t=s.$options.getOption("timezone");return t&&(p=t,f=ye(f,t,!0)),function(e,t){var n=r;h&&F(s.$options.getOption("timeSecondsFormat"))&&(n=r.replace("ss.sss",s.$options.getOption("timeSecondsFormat")).replace(/:$/,""));var i=u("date")(e,n,t);h&&s.$options.getOption("timeStripZeroSeconds")&&(i=i.replace(/(?::00)?(?:\.000)?$/,""));return i}(e,t)}return f=null,p=null,""})),z(a.min)||a.ngMin){var g=a.min||d(a.ngMin)(i),v=x(g);s.$validators.min=function(e){return!y(e)||M(v)||n(e)>=v},a.$observe("min",(function(e){e!==g&&(v=x(e),g=e,s.$validate())}))}if(z(a.max)||a.ngMax){var m=a.max||d(a.ngMax)(i),b=x(m);s.$validators.max=function(e){return!y(e)||M(b)||n(e)<=b},a.$observe("max",(function(e){e!==m&&(b=x(e),m=e,s.$validate())}))}function y(e){return e&&!(e.getTime&&e.getTime()!=e.getTime())}function x(e){return z(e)&&!V(e)?w(e)||void 0:e}function w(e,t){var r=s.$options.getOption("timezone");p&&p!==r&&(t=be(t,me(p)));var i=n(e,t);return!isNaN(i)&&r&&(i=ye(i,r)),i}}}function lo(e,t,n,r,i){var o=t[0];(r.$$hasNativeValidators=L(o.validity))&&r.$parsers.push((function(e){var n=t.prop("validity")||{};if(!n.badInput&&!n.typeMismatch)return e;r.$$parserName=i}))}function co(e){e.$parsers.push((function(t){return e.$isEmpty(t)?null:Zi.test(t)?parseFloat(t):void(e.$$parserName="number")})),e.$formatters.push((function(t){if(!e.$isEmpty(t)){if(!q(t))throw qo("numfmt","Expected `{0}` to be a number",t);t=t.toString()}return t}))}function uo(e){return z(e)&&!q(e)&&(e=parseFloat(e)),j(e)?void 0:e}function fo(e){return(0|e)===e}function po(e){var t=e.toString(),n=t.indexOf(".");if(-1===n){if(-1<e&&e<1){var r=/e-(\d+)$/.exec(t);if(r)return Number(r[1])}return 0}return t.length-n-1}function ho(e,t,n){var r=Number(e),i=!fo(r),o=!fo(t),a=!fo(n);if(i||o||a){var s=i?po(r):0,l=o?po(t):0,c=a?po(n):0,u=Math.max(s,l,c),d=Math.pow(10,u);r*=d,t*=d,n*=d,i&&(r=Math.round(r)),o&&(t=Math.round(t)),a&&(n=Math.round(n))}return(r-t)%n==0}function go(e,t,n,r,i){var o;if(z(r)){if(!(o=e(r)).constant)throw qo("constexpr","Expected constant expression for `{0}`, but saw `{1}`.",n,r);return o(t)}return i}var vo=["$browser","$sniffer","$filter","$parse",function(e,t,n,r){return{restrict:"E",require:["?ngModel"],link:{pre:function(i,o,a,s){s[0]&&(ro[d(a.type)]||ro.text)(i,o,a,s[0],t,e,n,r)}}}}],mo=function(){var e={configurable:!0,enumerable:!1,get:function(){return this.getAttribute("value")||""},set:function(e){this.setAttribute("value",e)}};return{restrict:"E",priority:200,compile:function(t,n){if("hidden"===d(n.type))return{pre:function(t,n,r,i){var o=n[0];o.parentNode&&o.parentNode.insertBefore(o,o.nextSibling),Object.defineProperty&&Object.defineProperty(o,"value",e)}}}}},bo=/^(true|false|\d+)$/,yo=function(){function e(e,t,n){var r=z(n)?n:9===o?"":null;e.prop("value",r),t.$set("value",n)}return{restrict:"A",priority:100,compile:function(t,n){return bo.test(n.ngValue)?function(t,n,r){e(n,r,t.$eval(r.ngValue))}:function(t,n,r){t.$watch(r.ngValue,(function(t){e(n,r,t)}))}}}},xo=["$compile",function(e){return{restrict:"AC",compile:function(t){return e.$$addBindingClass(t),function(t,n,r){e.$$addBindingInfo(n,r.ngBind),n=n[0],t.$watch(r.ngBind,(function(e){n.textContent=Be(e)}))}}}}],wo=["$interpolate","$compile",function(e,t){return{compile:function(n){return t.$$addBindingClass(n),function(n,r,i){var o=e(r.attr(i.$attr.ngBindTemplate));t.$$addBindingInfo(r,o.expressions),r=r[0],i.$observe("ngBindTemplate",(function(e){r.textContent=M(e)?"":e}))}}}}],ko=["$sce","$parse","$compile",function(e,t,n){return{restrict:"A",compile:function(r,i){var o=t(i.ngBindHtml),a=t(i.ngBindHtml,(function(t){return e.valueOf(t)}));return n.$$addBindingClass(r),function(t,r,i){n.$$addBindingInfo(r,i.ngBindHtml),t.$watch(a,(function(){var n=o(t);r.html(e.getTrustedHtml(n)||"")}))}}}}],Ao=I({restrict:"A",require:"ngModel",link:function(e,t,n,r){r.$viewChangeListeners.push((function(){e.$eval(n.ngChange)}))}});function Eo(e,t){var n;return e="ngClass"+e,["$parse",function(a){return{restrict:"AC",link:function(s,l,c){var u,d=l.data("$classCounts"),f=!0;function p(e,t){var n=[];return k(e,(function(e){(t>0||d[e])&&(d[e]=(d[e]||0)+t,d[e]===+(t>0)&&n.push(e))})),n.join(" ")}d||(d=Le(),l.data("$classCounts",d)),"ngClass"!==e&&(n||(n=a("$index",(function(e){return 1&e}))),s.$watch(n,(function(e){e===t?(n=p(i(n=u),1),c.$addClass(n)):function(e){e=p(i(e),-1),c.$removeClass(e)}(u);var n;f=e}))),s.$watch(a(c[e],o),(function(e){f===t&&function(e,t){var n=i(e),o=i(t),a=r(n,o),s=r(o,n),l=p(a,-1),u=p(s,1);c.$addClass(u),c.$removeClass(l)}(u,e);u=e}))}}}];function r(e,t){if(!e||!e.length)return[];if(!t||!t.length)return e;var n=[];e:for(var r=0;r<e.length;r++){for(var i=e[r],o=0;o<t.length;o++)if(i===t[o])continue e;n.push(i)}return n}function i(e){return e&&e.split(" ")}function o(e){if(!e)return e;var t=e;return U(e)?t=e.map(o).join(" "):L(e)?t=Object.keys(e).filter((function(t){return e[t]})).join(" "):F(e)||(t=e+""),t}}var So=Eo("",!0),Co=Eo("Odd",0),$o=Eo("Even",1),Oo=Ni({compile:function(e,t){t.$set("ngCloak",void 0),e.removeClass("ng-cloak")}}),_o=[function(){return{restrict:"A",scope:!0,controller:"@",priority:500}}],To={},jo={blur:!0,focus:!0};function Po(e,t,n,r,i,o){return{restrict:"A",compile:function(a,s){var l=e(s[r]);return function(e,r){r.on(i,(function(r){var i=function(){l(e,{$event:r})};if(t.$$phase)if(o)e.$evalAsync(i);else try{i()}catch(e){n(e)}else e.$apply(i)}))}}}}k("click dblclick mousedown mouseup mouseover mouseout mousemove mouseenter mouseleave keydown keyup keypress submit focus blur copy cut paste".split(" "),(function(e){var t=yn("ng-"+e);To[t]=["$parse","$rootScope","$exceptionHandler",function(n,r,i){return Po(n,r,i,t,e,jo[e])}]}));var Do=["$animate","$compile",function(e,t){return{multiElement:!0,transclude:"element",priority:600,terminal:!0,restrict:"A",$$tlb:!0,link:function(n,r,i,o,a){var s,l,c;n.$watch(i.ngIf,(function(n){n?l||a((function(n,o){l=o,n[n.length++]=t.$$createComment("end ngIf",i.ngIf),s={clone:n},e.enter(n,r.parent(),r)})):(c&&(c.remove(),c=null),l&&(l.$destroy(),l=null),s&&(c=ze(s.clone),e.leave(c).done((function(e){!1!==e&&(c=null)})),s=null))}))}}}],Ro=["$templateRequest","$anchorScroll","$animate",function(e,t,n){return{restrict:"ECA",priority:400,terminal:!0,transclude:"element",controller:y.noop,compile:function(r,i){var o=i.ngInclude||i.src,a=i.onload||"",s=i.autoscroll;return function(r,i,l,c,u){var d,f,p,h=0,g=function(){f&&(f.remove(),f=null),d&&(d.$destroy(),d=null),p&&(n.leave(p).done((function(e){!1!==e&&(f=null)})),f=p,p=null)};r.$watch(o,(function(o){var l=function(e){!1===e||!z(s)||s&&!r.$eval(s)||t()},f=++h;o?(e(o,!0).then((function(e){if(!r.$$destroyed&&f===h){var t=r.$new();c.template=e;var s=u(t,(function(e){g(),n.enter(e,null,i).done(l)}));p=s,(d=t).$emit("$includeContentLoaded",o),r.$eval(a)}}),(function(){r.$$destroyed||f===h&&(g(),r.$emit("$includeContentError",o))})),r.$emit("$includeContentRequested",o)):(g(),c.template=null)}))}}}}],Io=["$compile",function(t){return{restrict:"ECA",priority:-400,require:"ngInclude",link:function(n,r,i,o){if(v.call(r[0]).match(/SVG/))return r.empty(),void t(ut(o.template,e.document).childNodes)(n,(function(e){r.append(e)}),{futureParentElement:r});r.html(o.template),t(r.contents())(n)}}}],No=Ni({priority:450,compile:function(){return{pre:function(e,t,n){e.$eval(n.ngInit)}}}}),Mo=function(){return{restrict:"A",priority:100,require:"ngModel",link:function(e,t,n,r){var i=n.ngList||", ",o="false"!==n.ngTrim,a=o?K(i):i;r.$parsers.push((function(e){if(!M(e)){var t=[];return e&&k(e.split(a),(function(e){e&&t.push(o?K(e):e)})),t}})),r.$formatters.push((function(e){if(U(e))return e.join(i)})),r.$isEmpty=function(e){return!e||!e.length}}}},zo="ng-valid",Lo="ng-invalid",Bo="ng-pristine",Fo="ng-dirty",qo=i("ngModel");function Vo(e,t,n,r,i,o,a,s,l){var c;this.$viewValue=Number.NaN,this.$modelValue=Number.NaN,this.$$rawModelValue=void 0,this.$validators={},this.$asyncValidators={},this.$parsers=[],this.$formatters=[],this.$viewChangeListeners=[],this.$untouched=!0,this.$touched=!1,this.$pristine=!0,this.$dirty=!1,this.$valid=!0,this.$invalid=!1,this.$error={},this.$$success={},this.$pending=void 0,this.$name=l(n.name||"",!1)(e),this.$$parentForm=Li,this.$options=Uo,this.$$updateEvents="",this.$$updateEventHandler=this.$$updateEventHandler.bind(this),this.$$parsedNgModel=i(n.ngModel),this.$$parsedNgModelAssign=this.$$parsedNgModel.assign,this.$$ngModelGet=this.$$parsedNgModel,this.$$ngModelSet=this.$$parsedNgModelAssign,this.$$pendingDebounce=null,this.$$parserValid=void 0,this.$$parserName="parse",this.$$currentValidationRunId=0,this.$$scope=e,this.$$rootScope=e.$root,this.$$attr=n,this.$$element=r,this.$$animate=o,this.$$timeout=a,this.$$parse=i,this.$$q=s,this.$$exceptionHandler=t,Ui(this),(c=this).$$scope.$watch((function(e){var t=c.$$ngModelGet(e);return t===c.$modelValue||c.$modelValue!=c.$modelValue&&t!=t||c.$$setModelValue(t),t}))}Vo.$inject=["$scope","$exceptionHandler","$attrs","$element","$parse","$animate","$timeout","$q","$interpolate"],Vo.prototype={$$initGetterSetters:function(){if(this.$options.getOption("getterSetter")){var e=this.$$parse(this.$$attr.ngModel+"()"),t=this.$$parse(this.$$attr.ngModel+"($$$p)");this.$$ngModelGet=function(t){var n=this.$$parsedNgModel(t);return G(n)&&(n=e(t)),n},this.$$ngModelSet=function(e,n){G(this.$$parsedNgModel(e))?t(e,{$$$p:n}):this.$$parsedNgModelAssign(e,n)}}else if(!this.$$parsedNgModel.assign)throw qo("nonassign","Expression '{0}' is non-assignable. Element: {1}",this.$$attr.ngModel,xe(this.$$element))},$render:D,$isEmpty:function(e){return M(e)||""===e||null===e||e!=e},$$updateEmptyClasses:function(e){this.$isEmpty(e)?(this.$$animate.removeClass(this.$$element,"ng-not-empty"),this.$$animate.addClass(this.$$element,"ng-empty")):(this.$$animate.removeClass(this.$$element,"ng-empty"),this.$$animate.addClass(this.$$element,"ng-not-empty"))},$setPristine:function(){this.$dirty=!1,this.$pristine=!0,this.$$animate.removeClass(this.$$element,Fo),this.$$animate.addClass(this.$$element,Bo)},$setDirty:function(){this.$dirty=!0,this.$pristine=!1,this.$$animate.removeClass(this.$$element,Bo),this.$$animate.addClass(this.$$element,Fo),this.$$parentForm.$setDirty()},$setUntouched:function(){this.$touched=!1,this.$untouched=!0,this.$$animate.setClass(this.$$element,"ng-untouched","ng-touched")},$setTouched:function(){this.$touched=!0,this.$untouched=!1,this.$$animate.setClass(this.$$element,"ng-touched","ng-untouched")},$rollbackViewValue:function(){this.$$timeout.cancel(this.$$pendingDebounce),this.$viewValue=this.$$lastCommittedViewValue,this.$render()},$validate:function(){if(!j(this.$modelValue)){var e=this.$$lastCommittedViewValue,t=this.$$rawModelValue,n=this.$valid,r=this.$modelValue,i=this.$options.getOption("allowInvalid"),o=this;this.$$runValidators(t,e,(function(e){i||n===e||(o.$modelValue=e?t:void 0,o.$modelValue!==r&&o.$$writeModelToScope())}))}},$$runValidators:function(e,t,n){this.$$currentValidationRunId++;var r,i,o=this.$$currentValidationRunId,a=this;(function(){var e=a.$$parserName;if(!M(a.$$parserValid))return a.$$parserValid||(k(a.$validators,(function(e,t){s(t,null)})),k(a.$asyncValidators,(function(e,t){s(t,null)}))),s(e,a.$$parserValid),a.$$parserValid;s(e,null);return!0})()?!function(){var n=!0;if(k(a.$validators,(function(r,i){var o=Boolean(r(e,t));n=n&&o,s(i,o)})),!n)return k(a.$asyncValidators,(function(e,t){s(t,null)})),!1;return!0}()?l(!1):(r=[],i=!0,k(a.$asyncValidators,(function(n,o){var a=n(e,t);if(!Q(a))throw qo("nopromise","Expected asynchronous validator to return a promise but got '{0}' instead.",a);s(o,void 0),r.push(a.then((function(){s(o,!0)}),(function(){i=!1,s(o,!1)})))})),r.length?a.$$q.all(r).then((function(){l(i)}),D):l(!0)):l(!1);function s(e,t){o===a.$$currentValidationRunId&&a.$setValidity(e,t)}function l(e){o===a.$$currentValidationRunId&&n(e)}},$commitViewValue:function(){var e=this.$viewValue;this.$$timeout.cancel(this.$$pendingDebounce),(this.$$lastCommittedViewValue!==e||""===e&&this.$$hasNativeValidators)&&(this.$$updateEmptyClasses(e),this.$$lastCommittedViewValue=e,this.$pristine&&this.$setDirty(),this.$$parseAndValidate())},$$parseAndValidate:function(){var e=this.$$lastCommittedViewValue,t=this;if(this.$$parserValid=!M(e)||void 0,this.$setValidity(this.$$parserName,null),this.$$parserName="parse",this.$$parserValid)for(var n=0;n<this.$parsers.length;n++)if(M(e=this.$parsers[n](e))){this.$$parserValid=!1;break}j(this.$modelValue)&&(this.$modelValue=this.$$ngModelGet(this.$$scope));var r=this.$modelValue,i=this.$options.getOption("allowInvalid");function o(){t.$modelValue!==r&&t.$$writeModelToScope()}this.$$rawModelValue=e,i&&(this.$modelValue=e,o()),this.$$runValidators(e,this.$$lastCommittedViewValue,(function(n){i||(t.$modelValue=n?e:void 0,o())}))},$$writeModelToScope:function(){this.$$ngModelSet(this.$$scope,this.$modelValue),k(this.$viewChangeListeners,(function(e){try{e()}catch(e){this.$$exceptionHandler(e)}}),this)},$setViewValue:function(e,t){this.$viewValue=e,this.$options.getOption("updateOnDefault")&&this.$$debounceViewValueCommit(t)},$$debounceViewValueCommit:function(e){var t=this.$options.getOption("debounce");q(t[e])?t=t[e]:q(t.default)&&-1===this.$options.getOption("updateOn").indexOf(e)?t=t.default:q(t["*"])&&(t=t["*"]),this.$$timeout.cancel(this.$$pendingDebounce);var n=this;t>0?this.$$pendingDebounce=this.$$timeout((function(){n.$commitViewValue()}),t):this.$$rootScope.$$phase?this.$commitViewValue():this.$$scope.$apply((function(){n.$commitViewValue()}))},$overrideModelOptions:function(e){this.$options=this.$options.createChild(e),this.$$setUpdateOnEvents()},$processModelValue:function(){var e=this.$$format();this.$viewValue!==e&&(this.$$updateEmptyClasses(e),this.$viewValue=this.$$lastCommittedViewValue=e,this.$render(),this.$$runValidators(this.$modelValue,this.$viewValue,D))},$$format:function(){for(var e=this.$formatters,t=e.length,n=this.$modelValue;t--;)n=e[t](n);return n},$$setModelValue:function(e){this.$modelValue=this.$$rawModelValue=e,this.$$parserValid=void 0,this.$processModelValue()},$$setUpdateOnEvents:function(){this.$$updateEvents&&this.$$element.off(this.$$updateEvents,this.$$updateEventHandler),this.$$updateEvents=this.$options.getOption("updateOn"),this.$$updateEvents&&this.$$element.on(this.$$updateEvents,this.$$updateEventHandler)},$$updateEventHandler:function(e){this.$$debounceViewValueCommit(e&&e.type)}},Hi({clazz:Vo,set:function(e,t){e[t]=!0},unset:function(e,t){delete e[t]}});var Uo,Ho=["$rootScope",function(e){return{restrict:"A",require:["ngModel","^?form","^?ngModelOptions"],controller:Vo,priority:1,compile:function(t){return t.addClass(Bo).addClass("ng-untouched").addClass(zo),{pre:function(e,t,n,r){var i=r[0],o=r[1]||i.$$parentForm,a=r[2];a&&(i.$options=a.$options),i.$$initGetterSetters(),o.$addControl(i),n.$observe("name",(function(e){i.$name!==e&&i.$$parentForm.$$renameControl(i,e)})),e.$on("$destroy",(function(){i.$$parentForm.$removeControl(i)}))},post:function(t,n,r,i){var o=i[0];function a(){o.$setTouched()}o.$$setUpdateOnEvents(),n.on("blur",(function(){o.$touched||(e.$$phase?t.$evalAsync(a):t.$apply(a))}))}}}}}],Go=/(\s+|^)default(\s+|$)/;function Wo(e){this.$$options=e}Wo.prototype={getOption:function(e){return this.$$options[e]},createChild:function(e){var t=!1;return k(e=O({},e),(function(n,r){"$inherit"===n?"*"===r?t=!0:(e[r]=this.$$options[r],"updateOn"===r&&(e.updateOnDefault=this.$$options.updateOnDefault)):"updateOn"===r&&(e.updateOnDefault=!1,e[r]=K(n.replace(Go,(function(){return e.updateOnDefault=!0," "}))))}),this),t&&(delete e["*"],Xo(e,this.$$options)),Xo(e,Uo.$$options),new Wo(e)}},Uo=new Wo({updateOn:"",updateOnDefault:!0,debounce:0,getterSetter:!1,allowInvalid:!1,timezone:null});var Yo=function(){function e(e,t){this.$$attrs=e,this.$$scope=t}return e.$inject=["$attrs","$scope"],e.prototype={$onInit:function(){var e=this.parentCtrl?this.parentCtrl.$options:Uo,t=this.$$scope.$eval(this.$$attrs.ngModelOptions);this.$options=e.createChild(t)}},{restrict:"A",priority:10,require:{parentCtrl:"?^^ngModelOptions"},bindToController:!0,controller:e}};function Xo(e,t){k(t,(function(t,n){z(e[n])||(e[n]=t)}))}var Zo=Ni({terminal:!0,priority:1e3}),Qo=i("ngOptions"),Jo=/^\s*([\s\S]+?)(?:\s+as\s+([\s\S]+?))?(?:\s+group\s+by\s+([\s\S]+?))?(?:\s+disable\s+when\s+([\s\S]+?))?\s+for\s+(?:([$\w][$\w]*)|(?:\(\s*([$\w][$\w]*)\s*,\s*([$\w][$\w]*)\s*\)))\s+in\s+([\s\S]+?)(?:\s+track\s+by\s+([\s\S]+?))?$/,Ko=["$compile","$document","$parse",function(t,n,r){var i=e.document.createElement("option"),o=e.document.createElement("optgroup");return{restrict:"A",terminal:!0,require:["select","ngModel"],link:{pre:function(e,t,n,r){r[0].registerOption=D},post:function(e,s,l,c){for(var u=c[0],d=c[1],f=l.multiple,p=0,h=s.children(),g=h.length;p<g;p++)if(""===h[p].value){u.hasEmptyOption=!0,u.emptyOption=h.eq(p);break}s.empty();var v,m=!!u.emptyOption;a(i.cloneNode(!1)).val("?");var b=function(e,t,n){var i=e.match(Jo);if(!i)throw Qo("iexp","Expected expression in form of '_select_ (as _label_)? for (_key_,)?_value_ in _collection_' but got '{0}'. Element: {1}",e,xe(t));var o=i[5]||i[7],a=i[6],s=/ as /.test(i[0])&&i[1],l=i[9],c=r(i[2]?i[1]:o),u=s&&r(s)||c,d=l&&r(l),f=l?function(e,t){return d(n,t)}:function(e){return zt(e)},p=function(e,t){return f(e,y(e,t))},h=r(i[2]||i[1]),g=r(i[3]||""),v=r(i[4]||""),m=r(i[8]),b={},y=a?function(e,t){return b[a]=t,b[o]=e,b}:function(e){return b[o]=e,b};function x(e,t,n,r,i){this.selectValue=e,this.viewValue=t,this.label=n,this.group=r,this.disabled=i}function k(e){var t;if(!a&&w(e))t=e;else for(var n in t=[],e)e.hasOwnProperty(n)&&"$"!==n.charAt(0)&&t.push(n);return t}return{trackBy:l,getTrackByValue:p,getWatchables:r(m,(function(e){for(var t=[],r=k(e=e||[]),o=r.length,a=0;a<o;a++){var s=e===r?a:r[a],l=e[s],c=y(l,s),u=f(l,c);if(t.push(u),i[2]||i[1]){var d=h(n,c);t.push(d)}if(i[4]){var p=v(n,c);t.push(p)}}return t})),getOptions:function(){for(var e=[],t={},r=m(n)||[],i=k(r),o=i.length,a=0;a<o;a++){var s=r===i?a:i[a],c=r[s],d=y(c,s),b=u(n,d),w=f(b,d),A=new x(w,b,h(n,d),g(n,d),v(n,d));e.push(A),t[w]=A}return{items:e,selectValueMap:t,getOptionFromViewValue:function(e){return t[p(e)]},getViewValueFromOption:function(e){return l?oe(e.viewValue):e.viewValue}}}}}(l.ngOptions,s,e),y=n[0].createDocumentFragment();function x(e,t){var n=i.cloneNode(!1);t.appendChild(n),function(e,t){e.element=t,t.disabled=e.disabled,e.label!==t.label&&(t.label=e.label,t.textContent=e.label);t.value=e.selectValue}(e,n)}function A(e){var t=v.getOptionFromViewValue(e),n=t&&t.element;return n&&!n.selected&&(n.selected=!0),t}u.generateUnknownOptionValue=function(e){return"?"},f?(u.writeValue=function(e){if(v){var t=e&&e.map(A)||[];v.items.forEach((function(e){e.element.selected&&!re(t,e)&&(e.element.selected=!1)}))}},u.readValue=function(){var e=s.val()||[],t=[];return k(e,(function(e){var n=v.selectValueMap[e];n&&!n.disabled&&t.push(v.getViewValueFromOption(n))})),t},b.trackBy&&e.$watchCollection((function(){if(U(d.$viewValue))return d.$viewValue.map((function(e){return b.getTrackByValue(e)}))}),(function(){d.$render()}))):(u.writeValue=function(e){if(v){var t=s[0].options[s[0].selectedIndex],n=v.getOptionFromViewValue(e);t&&t.removeAttribute("selected"),n?(s[0].value!==n.selectValue&&(u.removeUnknownOption(),s[0].value=n.selectValue,n.element.selected=!0),n.element.setAttribute("selected","selected")):u.selectUnknownOrEmptyOption(e)}},u.readValue=function(){var e=v.selectValueMap[s.val()];return e&&!e.disabled?(u.unselectEmptyOption(),u.removeUnknownOption(),v.getViewValueFromOption(e)):null},b.trackBy&&e.$watch((function(){return b.getTrackByValue(d.$viewValue)}),(function(){d.$render()}))),m&&(t(u.emptyOption)(e),s.prepend(u.emptyOption),8===u.emptyOption[0].nodeType?(u.hasEmptyOption=!1,u.registerOption=function(e,t){""===t.val()&&(u.hasEmptyOption=!0,u.emptyOption=t,u.emptyOption.removeClass("ng-scope"),d.$render(),t.on("$destroy",(function(){var e=u.$isEmptyOptionSelected();u.hasEmptyOption=!1,u.emptyOption=void 0,e&&d.$render()})))}):u.emptyOption.removeClass("ng-scope")),e.$watchCollection(b.getWatchables,(function(){var e=v&&u.readValue();if(v)for(var t=v.items.length-1;t>=0;t--){var n=v.items[t];z(n.group)?Ot(n.element.parentNode):Ot(n.element)}v=b.getOptions();var r={};if(v.items.forEach((function(e){var t;z(e.group)?((t=r[e.group])||(t=o.cloneNode(!1),y.appendChild(t),t.label=null===e.group?"null":e.group,r[e.group]=t),x(e,t)):x(e,y)})),s[0].appendChild(y),d.$render(),!d.$isEmpty(e)){var i=u.readValue();(b.trackBy||f?se(e,i):e===i)||(d.$setViewValue(i),d.$render())}}))}}}}],ea=["$locale","$interpolate","$log",function(e,t,n){var r=/{}/g,i=/^when(Minus)?(.+)$/;return{link:function(o,a,s){var l,c=s.count,u=s.$attr.when&&a.attr(s.$attr.when),f=s.offset||0,p=o.$eval(u)||{},h={},g=t.startSymbol(),v=t.endSymbol(),m=g+c+"-"+f+v,b=y.noop;function x(e){a.text(e||"")}k(s,(function(e,t){var n=i.exec(t);if(n){var r=(n[1]?"-":"")+d(n[2]);p[r]=a.attr(s.$attr[t])}})),k(p,(function(e,n){h[n]=t(e.replace(r,m))})),o.$watch(c,(function(t){var r=parseFloat(t),i=j(r);if(i||r in p||(r=e.pluralCat(r-f)),!(r===l||i&&j(l))){b();var a=h[r];M(a)?(null!=t&&n.debug("ngPluralize: no rule defined for '"+r+"' in "+u),b=D,x()):b=o.$watch(a,x),l=r}}))}}}],ta=i("ngRef"),na=["$parse",function(e){return{priority:-1,restrict:"A",compile:function(t,n){var r=yn(ne(t)),i=e(n.ngRef),o=i.assign||function(){throw ta("nonassign",'Expression in ngRef="{0}" is non-assignable!',n.ngRef)};return function(e,t,a){var s;if(a.hasOwnProperty("ngRefRead")){if("$element"===a.ngRefRead)s=t;else if(!(s=t.data("$"+a.ngRefRead+"Controller")))throw ta("noctrl",'The controller for ngRefRead="{0}" could not be found on ngRef="{1}"',a.ngRefRead,n.ngRef)}else s=t.data("$"+r+"Controller");o(e,s=s||t),t.on("$destroy",(function(){i(e)===s&&o(e,null)}))}}}}],ra=["$parse","$animate","$compile",function(e,t,n){var r=i("ngRepeat"),o=function(e,t,n,r,i,o,a){e[n]=r,i&&(e[i]=o),e.$index=t,e.$first=0===t,e.$last=t===a-1,e.$middle=!(e.$first||e.$last),e.$odd=!(e.$even=0==(1&t))},a=function(e){return e.clone[0]},s=function(e){return e.clone[e.clone.length-1]},l=function(e,t,n){return zt(n)},c=function(e,t){return t};return{restrict:"A",multiElement:!0,transclude:"element",priority:1e3,terminal:!0,$$tlb:!0,compile:function(i,d){var f=d.ngRepeat,p=n.$$createComment("end ngRepeat",f),h=f.match(/^\s*([\s\S]+?)\s+in\s+([\s\S]+?)(?:\s+as\s+([\s\S]+?))?(?:\s+track\s+by\s+([\s\S]+?))?\s*$/);if(!h)throw r("iexp","Expected expression in form of '_item_ in _collection_[ track by _id_]' but got '{0}'.",f);var g=h[1],v=h[2],m=h[3],b=h[4];if(!(h=g.match(/^(?:(\s*[$\w]+)|\(\s*([$\w]+)\s*,\s*([$\w]+)\s*\))$/)))throw r("iidexp","'_item_' in '_item_ in _collection_' should be an identifier or '(_key_, _value_)' expression, but got '{0}'.",g);var y,x=h[3]||h[1],A=h[2];if(m&&(!/^[$a-zA-Z_][$a-zA-Z0-9_]*$/.test(m)||/^(null|undefined|this|\$index|\$first|\$middle|\$last|\$even|\$odd|\$parent|\$root|\$id)$/.test(m)))throw r("badident","alias '{0}' is invalid --- must be a valid JS identifier which is not a reserved name.",m);if(b){var E={$id:zt},S=e(b);y=function(e,t,n,r){return A&&(E[A]=t),E[x]=n,E.$index=r,S(e,E)}}return function(e,n,i,d,h){var g=Le();e.$watchCollection(v,(function(i){var d,v,b,S,C,$,O,_,T,j,P,D,R=n[0],I=Le();if(m&&(e[m]=i),w(i))T=i,_=y||l;else for(var N in _=y||c,T=[],i)u.call(i,N)&&"$"!==N.charAt(0)&&T.push(N);for(S=T.length,P=new Array(S),d=0;d<S;d++)if(C=i===T?d:T[d],$=i[C],O=_(e,C,$,d),g[O])j=g[O],delete g[O],I[O]=j,P[d]=j;else{if(I[O])throw k(P,(function(e){e&&e.scope&&(g[e.id]=e)})),r("dupes","Duplicates in a repeater are not allowed. Use 'track by' expression to specify unique keys. Repeater: {0}, Duplicate key: {1}, Duplicate value: {2}",f,O,$);P[d]={id:O,scope:void 0,clone:void 0},I[O]=!0}for(var M in E&&(E[x]=void 0),g){if(D=ze((j=g[M]).clone),t.leave(D),D[0].parentNode)for(d=0,v=D.length;d<v;d++)D[d].$$NG_REMOVED=!0;j.scope.$destroy()}for(d=0;d<S;d++)if(C=i===T?d:T[d],$=i[C],(j=P[d]).scope){b=R;do{b=b.nextSibling}while(b&&b.$$NG_REMOVED);a(j)!==b&&t.move(ze(j.clone),null,R),R=s(j),o(j.scope,d,x,$,A,C,S)}else h((function(e,n){j.scope=n;var r=p.cloneNode(!1);e[e.length++]=r,t.enter(e,null,R),R=r,j.clone=e,I[j.id]=j,o(j.scope,d,x,$,A,C,S)}));g=I}))}}}}],ia=["$animate",function(e){return{restrict:"A",multiElement:!0,link:function(t,n,r){t.$watch(r.ngShow,(function(t){e[t?"removeClass":"addClass"](n,"ng-hide",{tempClasses:"ng-hide-animate"})}))}}}],oa=["$animate",function(e){return{restrict:"A",multiElement:!0,link:function(t,n,r){t.$watch(r.ngHide,(function(t){e[t?"addClass":"removeClass"](n,"ng-hide",{tempClasses:"ng-hide-animate"})}))}}}],aa=Ni((function(e,t,n){e.$watchCollection(n.ngStyle,(function(e,n){n&&e!==n&&k(n,(function(e,n){t.css(n,"")})),e&&t.css(e)}))})),sa=["$animate","$compile",function(e,t){return{require:"ngSwitch",controller:["$scope",function(){this.cases={}}],link:function(n,r,i,o){var a=i.ngSwitch||i.on,s=[],l=[],c=[],u=[],d=function(e,t){return function(n){!1!==n&&e.splice(t,1)}};n.$watch(a,(function(n){for(var r,i;c.length;)e.cancel(c.pop());for(r=0,i=u.length;r<i;++r){var a=ze(l[r].clone);u[r].$destroy(),(c[r]=e.leave(a)).done(d(c,r))}l.length=0,u.length=0,(s=o.cases["!"+n]||o.cases["?"])&&k(s,(function(n){n.transclude((function(r,i){u.push(i);var o=n.element;r[r.length++]=t.$$createComment("end ngSwitchWhen");var a={clone:r};l.push(a),e.enter(r,o.parent(),o)}))}))}))}}}],la=Ni({transclude:"element",priority:1200,require:"^ngSwitch",multiElement:!0,link:function(e,t,n,r,i){k(n.ngSwitchWhen.split(n.ngSwitchWhenSeparator).sort().filter((function(e,t,n){return n[t-1]!==e})),(function(e){r.cases["!"+e]=r.cases["!"+e]||[],r.cases["!"+e].push({transclude:i,element:t})}))}}),ca=Ni({transclude:"element",priority:1200,require:"^ngSwitch",multiElement:!0,link:function(e,t,n,r,i){r.cases["?"]=r.cases["?"]||[],r.cases["?"].push({transclude:i,element:t})}}),ua=i("ngTransclude"),da=["$compile",function(e){return{restrict:"EAC",compile:function(t){var n=e(t.contents());return t.empty(),function(e,t,r,i,o){if(!o)throw ua("orphan","Illegal use of ngTransclude directive in the template! No parent directive that requires a transclusion found. Element: {0}",xe(t));r.ngTransclude===r.$attr.ngTransclude&&(r.ngTransclude="");var a=r.ngTransclude||r.ngTranscludeSlot;function s(){n(e,(function(e){t.append(e)}))}o((function(e,n){e.length&&function(e){for(var t=0,n=e.length;t<n;t++){var r=e[t];if(r.nodeType!==Fe||r.nodeValue.trim())return!0}}(e)?t.append(e):(s(),n.$destroy())}),null,a),a&&!o.isSlotFilled(a)&&s()}}}}],fa=["$templateCache",function(e){return{restrict:"E",terminal:!0,compile:function(t,n){if("text/ng-template"===n.type){var r=n.id,i=t[0].text;e.put(r,i)}}}}],pa={$setViewValue:D,$render:D};function ha(e,t){e.prop("selected",t),e.attr("selected",t)}var ga=["$element","$scope",function(t,n){var r=this,i=new Ft;r.selectValueMap={},r.ngModelCtrl=pa,r.multiple=!1,r.unknownOption=a(e.document.createElement("option")),r.hasEmptyOption=!1,r.emptyOption=void 0,r.renderUnknownOption=function(e){var n=r.generateUnknownOptionValue(e);r.unknownOption.val(n),t.prepend(r.unknownOption),ha(r.unknownOption,!0),t.val(n)},r.updateUnknownOption=function(e){var n=r.generateUnknownOptionValue(e);r.unknownOption.val(n),ha(r.unknownOption,!0),t.val(n)},r.generateUnknownOptionValue=function(e){return"? "+zt(e)+" ?"},r.removeUnknownOption=function(){r.unknownOption.parent()&&r.unknownOption.remove()},r.selectEmptyOption=function(){r.emptyOption&&(t.val(""),ha(r.emptyOption,!0))},r.unselectEmptyOption=function(){r.hasEmptyOption&&ha(r.emptyOption,!1)},n.$on("$destroy",(function(){r.renderUnknownOption=D})),r.readValue=function(){var e=t.val(),n=e in r.selectValueMap?r.selectValueMap[e]:e;return r.hasOption(n)?n:null},r.writeValue=function(e){var n=t[0].options[t[0].selectedIndex];if(n&&ha(a(n),!1),r.hasOption(e)){r.removeUnknownOption();var i=zt(e);t.val(i in r.selectValueMap?i:e);var o=t[0].options[t[0].selectedIndex];ha(a(o),!0)}else r.selectUnknownOrEmptyOption(e)},r.addOption=function(e,t){if(8!==t[0].nodeType){Me(e,'"option value"'),""===e&&(r.hasEmptyOption=!0,r.emptyOption=t);var n=i.get(e)||0;i.set(e,n+1),s()}},r.removeOption=function(e){var t=i.get(e);t&&(1===t?(i.delete(e),""===e&&(r.hasEmptyOption=!1,r.emptyOption=void 0)):i.set(e,t-1))},r.hasOption=function(e){return!!i.get(e)},r.$hasEmptyOption=function(){return r.hasEmptyOption},r.$isUnknownOptionSelected=function(){return t[0].options[0]===r.unknownOption[0]},r.$isEmptyOptionSelected=function(){return r.hasEmptyOption&&t[0].options[t[0].selectedIndex]===r.emptyOption[0]},r.selectUnknownOrEmptyOption=function(e){null==e&&r.emptyOption?(r.removeUnknownOption(),r.selectEmptyOption()):r.unknownOption.parent().length?r.updateUnknownOption(e):r.renderUnknownOption(e)};var o=!1;function s(){o||(o=!0,n.$$postDigest((function(){o=!1,r.ngModelCtrl.$render()})))}var l=!1;function c(e){l||(l=!0,n.$$postDigest((function(){n.$$destroyed||(l=!1,r.ngModelCtrl.$setViewValue(r.readValue()),e&&r.ngModelCtrl.$render())})))}r.registerOption=function(e,t,n,i,o){var a,l;n.$attr.ngValue?n.$observe("value",(function(e){var n,i=t.prop("selected");z(l)&&(r.removeOption(a),delete r.selectValueMap[l],n=!0),l=zt(e),a=e,r.selectValueMap[l]=e,r.addOption(e,t),t.attr("value",l),n&&i&&c()})):i?n.$observe("value",(function(e){var n;r.readValue();var i=t.prop("selected");z(a)&&(r.removeOption(a),n=!0),a=e,r.addOption(e,t),n&&i&&c()})):o?e.$watch(o,(function(e,i){n.$set("value",e);var o=t.prop("selected");i!==e&&r.removeOption(i),r.addOption(e,t),i&&o&&c()})):r.addOption(n.value,t);n.$observe("disabled",(function(e){("true"===e||e&&t.prop("selected"))&&(r.multiple?c(!0):(r.ngModelCtrl.$setViewValue(null),r.ngModelCtrl.$render()))})),t.on("$destroy",(function(){var e=r.readValue(),t=n.value;r.removeOption(t),s(),(r.multiple&&e&&-1!==e.indexOf(t)||e===t)&&c(!0)}))}}],va=function(){return{restrict:"E",require:["select","?ngModel"],controller:ga,priority:1,link:{pre:function(e,t,n,r){var i=r[0],o=r[1];if(!o)return void(i.registerOption=D);if(i.ngModelCtrl=o,t.on("change",(function(){i.removeUnknownOption(),e.$apply((function(){o.$setViewValue(i.readValue())}))})),n.multiple){i.multiple=!0,i.readValue=function(){var e=[];return k(t.find("option"),(function(t){if(t.selected&&!t.disabled){var n=t.value;e.push(n in i.selectValueMap?i.selectValueMap[n]:n)}})),e},i.writeValue=function(e){k(t.find("option"),(function(t){var n=!!e&&(re(e,t.value)||re(e,i.selectValueMap[t.value]));n!==t.selected&&ha(a(t),n)}))};var s,l=NaN;e.$watch((function(){l!==o.$viewValue||se(s,o.$viewValue)||(s=qe(o.$viewValue),o.$render()),l=o.$viewValue})),o.$isEmpty=function(e){return!e||0===e.length}}},post:function(e,t,n,r){var i=r[1];if(!i)return;var o=r[0];i.$render=function(){o.writeValue(i.$viewValue)}}}}},ma=["$interpolate",function(e){return{restrict:"E",priority:100,compile:function(t,n){var r,i;return z(n.ngValue)||(z(n.value)?r=e(n.value,!0):(i=e(t.text(),!0))||n.$set("value",t.text())),function(e,t,n){var o=t.parent(),a=o.data("$selectController")||o.parent().data("$selectController");a&&a.registerOption(e,t,n,r,i)}}}}],ba=["$parse",function(e){return{restrict:"A",require:"?ngModel",link:function(t,n,r,i){if(i){var o=r.hasOwnProperty("required")||e(r.ngRequired)(t);r.ngRequired||(r.required=!0),i.$validators.required=function(e,t){return!o||!i.$isEmpty(t)},r.$observe("required",(function(e){o!==e&&(o=e,i.$validate())}))}}}}],ya=["$parse",function(e){return{restrict:"A",require:"?ngModel",compile:function(t,n){var r,i;return n.ngPattern&&(r=n.ngPattern,i="/"===n.ngPattern.charAt(0)&&c.test(n.ngPattern)?function(){return n.ngPattern}:e(n.ngPattern)),function(e,t,n,o){if(o){var a=n.pattern;n.ngPattern?a=i(e):r=n.pattern;var s=ka(a,r,t);n.$observe("pattern",(function(e){var n=s;s=ka(e,r,t),(n&&n.toString())!==(s&&s.toString())&&o.$validate()})),o.$validators.pattern=function(e,t){return o.$isEmpty(t)||M(s)||s.test(t)}}}}}}],xa=["$parse",function(e){return{restrict:"A",require:"?ngModel",link:function(t,n,r,i){if(i){var o=r.maxlength||e(r.ngMaxlength)(t),a=Aa(o);r.$observe("maxlength",(function(e){o!==e&&(a=Aa(e),o=e,i.$validate())})),i.$validators.maxlength=function(e,t){return a<0||i.$isEmpty(t)||t.length<=a}}}}}],wa=["$parse",function(e){return{restrict:"A",require:"?ngModel",link:function(t,n,r,i){if(i){var o=r.minlength||e(r.ngMinlength)(t),a=Aa(o)||-1;r.$observe("minlength",(function(e){o!==e&&(a=Aa(e)||-1,o=e,i.$validate())})),i.$validators.minlength=function(e,t){return i.$isEmpty(t)||t.length>=a}}}}}];function ka(e,t,n){if(e){if(F(e)&&(e=new RegExp("^"+e+"$")),!e.test)throw i("ngPattern")("noregexp","Expected {0} to be a RegExp but was {1}. Element: {2}",t,e,xe(n));return e}}function Aa(e){var t=T(e);return j(t)?-1:t}e.angular.bootstrap?e.console&&console.log("WARNING: Tried to load AngularJS more than once."):(!function(){var t;if(!De){var n=ce();(s=M(n)?e.jQuery:n?e[n]:void 0)&&s.fn.on?(a=s,O(s.fn,{scope:Tt.scope,isolateScope:Tt.isolateScope,controller:Tt.controller,injector:Tt.injector,inheritedData:Tt.inheritedData})):a=ft,t=a.cleanData,a.cleanData=function(e){for(var n,r,i=0;null!=(r=e[i]);i++)(n=(a._data(r)||{}).events)&&n.$destroy&&a(r).triggerHandler("$destroy");t(e)},y.element=a,De=!0}}(),function(t){O(t,{errorHandlingConfig:n,bootstrap:Oe,copy:oe,extend:O,merge:_,equals:se,element:a,forEach:k,injector:Qt,noop:D,bind:fe,toJson:he,fromJson:ge,identity:R,isUndefined:M,isDefined:z,isString:F,isFunction:G,isObject:L,isNumber:q,isElement:te,isArray:U,version:Ue,isDate:V,callbacks:{$$counter:0},getTestability:Te,reloadWithDebugInfo:_e,UNSAFE_restoreLegacyJqLiteXHTMLReplacement:Re,$$minErr:i,$$csp:le,$$encodeUriSegment:Ae,$$encodeUriQuery:Ee,$$lowercase:d,$$stringify:Be,$$uppercase:f}),(l=function(e){var t=i("$injector"),n=i("ng");function r(e,t,n){return e[t]||(e[t]=n())}var o=r(e,"angular",Object);return o.$$minErr=o.$$minErr||i,r(o,"module",(function(){var e={};return function(i,o,a){var s={};return function(e,t){if("hasOwnProperty"===e)throw n("badname","hasOwnProperty is not a valid {0} name",t)}(i,"module"),o&&e.hasOwnProperty(i)&&(e[i]=null),r(e,i,(function(){if(!o)throw t("nomod","Module '{0}' is not available! You either misspelled the module name or forgot to load it. If registering a module ensure that you specify the dependencies as the second argument.",i);var e=[],r=[],l=[],c=d("$injector","invoke","push",r),u={_invokeQueue:e,_configBlocks:r,_runBlocks:l,info:function(e){if(z(e)){if(!L(e))throw n("aobj","Argument '{0}' must be an object","value");return s=e,this}return s},requires:o,name:i,provider:f("$provide","provider"),factory:f("$provide","factory"),service:f("$provide","service"),value:d("$provide","value"),constant:d("$provide","constant","unshift"),decorator:f("$provide","decorator",r),animation:f("$animateProvider","register"),filter:f("$filterProvider","register"),controller:f("$controllerProvider","register"),directive:f("$compileProvider","directive"),component:f("$compileProvider","component"),config:c,run:function(e){return l.push(e),this}};return a&&c(a),u;function d(t,n,r,i){return i||(i=e),function(){return i[r||"push"]([t,n,arguments]),u}}function f(t,n,r){return r||(r=e),function(e,o){return o&&G(o)&&(o.$$moduleName=i),r.push([t,n,arguments]),u}}}))}}))}(e))("ng",["ngLocale"],["$provide",function(e){e.provider({$$sanitizeUri:qr}),e.provider("$compile",gn).directive({a:Mi,input:vo,textarea:vo,form:qi,script:fa,select:va,option:ma,ngBind:xo,ngBindHtml:ko,ngBindTemplate:wo,ngClass:So,ngClassEven:$o,ngClassOdd:Co,ngCloak:Oo,ngController:_o,ngForm:Vi,ngHide:oa,ngIf:Do,ngInclude:Ro,ngInit:No,ngNonBindable:Zo,ngPluralize:ea,ngRef:na,ngRepeat:ra,ngShow:ia,ngStyle:aa,ngSwitch:sa,ngSwitchWhen:la,ngSwitchDefault:ca,ngOptions:Ko,ngTransclude:da,ngModel:Ho,ngList:Mo,ngChange:Ao,pattern:ya,ngPattern:ya,required:ba,ngRequired:ba,minlength:wa,ngMinlength:wa,maxlength:xa,ngMaxlength:xa,ngValue:yo,ngModelOptions:Yo}).directive({ngInclude:Io,input:mo}).directive(zi).directive(To),e.provider({$anchorScroll:Jt,$animate:on,$animateCss:ln,$$animateJs:nn,$$animateQueue:rn,$$AnimateRunner:sn,$$animateAsyncRun:an,$browser:un,$cacheFactory:dn,$controller:Sn,$document:Cn,$$isDocumentHidden:$n,$exceptionHandler:On,$filter:pi,$$forceReflow:_n,$interpolate:Wn,$interval:Xn,$$intervalFactory:Zn,$http:Vn,$httpParamSerializer:Nn,$httpParamSerializerJQLike:Mn,$httpBackend:Hn,$xhrFactory:Un,$jsonpCallbacks:Qn,$location:hr,$log:gr,$parse:Dr,$rootScope:Fr,$q:Rr,$$q:Ir,$sce:Xr,$sceDelegate:Yr,$sniffer:Zr,$$taskTrackerFactory:Qr,$templateCache:fn,$templateRequest:ei,$$testability:ti,$timeout:ri,$window:ui,$$rAF:Br,$$jqLite:Mt,$$Map:qt,$$cookieReader:fi})}]).info({angularVersion:"1.8.2"})}(y),y.module("ngLocale",[],["$provide",function(e){var t="one",n="other";e.value("$locale",{DATETIME_FORMATS:{AMPMS:["AM","PM"],DAY:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],ERANAMES:["Before Christ","Anno Domini"],ERAS:["BC","AD"],FIRSTDAYOFWEEK:6,MONTH:["January","February","March","April","May","June","July","August","September","October","November","December"],SHORTDAY:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],SHORTMONTH:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],STANDALONEMONTH:["January","February","March","April","May","June","July","August","September","October","November","December"],WEEKENDRANGE:[5,6],fullDate:"EEEE, MMMM d, y",longDate:"MMMM d, y",medium:"MMM d, y h:mm:ss a",mediumDate:"MMM d, y",mediumTime:"h:mm:ss a",short:"M/d/yy h:mm a",shortDate:"M/d/yy",shortTime:"h:mm a"},NUMBER_FORMATS:{CURRENCY_SYM:"$",DECIMAL_SEP:".",GROUP_SEP:",",PATTERNS:[{gSize:3,lgSize:3,maxFrac:3,minFrac:0,minInt:1,negPre:"-",negSuf:"",posPre:"",posSuf:""},{gSize:3,lgSize:3,maxFrac:2,minFrac:2,minInt:1,negPre:"-¤",negSuf:"",posPre:"¤",posSuf:""}]},id:"en-us",localeID:"en_US",pluralCat:function(e,r){var i=0|e,o=function(e,t){var n=t;void 0===n&&(n=Math.min(function(e){var t=(e+="").indexOf(".");return-1==t?0:e.length-t-1}(e),3));var r=Math.pow(10,n);return{v:n,f:(e*r|0)%r}}(e,r);return 1==i&&0==o.v?t:n}})}]),a((function(){$e(e.document,Oe)})))}(window),!window.angular.$$csp().noInlineStyle&&window.angular.element(document.head).prepend(window.angular.element("<style>").text('@charset "UTF-8";[ng\\:cloak],[ng-cloak],[data-ng-cloak],[x-ng-cloak],.ng-cloak,.x-ng-cloak,.ng-hide:not(.ng-hide-animate){display:none !important;}ng\\:form{display:block;}.ng-animate-shim{visibility:hidden;}.ng-anchor{position:absolute;}'))},function(e,t,n){"use strict";n(210);const r=n(31),i=n(9);window.jQuery=r,n(217),n(218),n(219),n(225),n(227),i.module("dbt",["ngRoute","ui.router","hc.marked"]).config(["markedProvider","$locationProvider",function(e,t){e.setOptions({gfm:!0}),e.setRenderer({table:function(e,t){return"<table class='table'><thead>"+e+"</thead><tbody>"+t+"</tbody></table>"}}),t.html5Mode({enabled:!1}),r(document).tooltip({selector:'[data-toggle="tooltip"]',placement:function(e,t){return r(t).attr("data-placement")?r(t).attr("data-placement"):"auto"},container:"body"}),r(document).ready((function(){r("[data-toggle=popover]").popover({container:"body",html:!0})}))}])},function(e,t,n){var r=n(211);"string"==typeof r&&(r=[[e.i,r,""]]);var i={hmr:!0,transform:void 0,insertInto:void 0};n(40)(r,i);r.locals&&(e.exports=r.locals)},function(e,t,n){var r=n(212);(e.exports=n(39)(!1)).push([e.i,'@media (max-width: 960px){[data-large]{display:none !important}}@media (min-width: 961px){[data-small]{display:none !important}}@media screen{[data-print]{display:none !important}}@media print{[data-screen]{display:none !important}}html.touchevents [data-click]{display:none !important}html.no-touchevents [data-touch]{display:none !important}/*! normalize.css v3.0.3 | MIT License | github.com/necolas/normalize.css */html{font-family:sans-serif;-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%}body{margin:0}article,aside,details,figcaption,figure,footer,header,hgroup,main,menu,nav,section,summary{display:block}audio,canvas,progress,video{display:inline-block;vertical-align:baseline}audio:not([controls]){display:none;height:0}[hidden],template{display:none}a{background-color:transparent}a:active,a:hover{outline:0}abbr[title]{border-bottom:1px dotted}b,strong{font-weight:bold}dfn{font-style:italic}h1{font-size:2em;margin:0.67em 0}mark{background:#ff0;color:#000}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sup{top:-0.5em}sub{bottom:-0.25em}img{border:0}svg:not(:root){overflow:hidden}figure{margin:1em 40px}hr{box-sizing:content-box;height:0}pre{overflow:auto}code,kbd,pre,samp{font-family:monospace, monospace;font-size:1em}button,input,optgroup,select,textarea{color:inherit;font:inherit;margin:0}button{overflow:visible}button,select{text-transform:none}button,html input[type="button"],input[type="reset"],input[type="submit"]{-webkit-appearance:button;cursor:pointer}button[disabled],html input[disabled]{cursor:default}button::-moz-focus-inner,input::-moz-focus-inner{border:0;padding:0}input{line-height:normal}input[type="checkbox"],input[type="radio"]{box-sizing:border-box;padding:0}input[type="number"]::-webkit-inner-spin-button,input[type="number"]::-webkit-outer-spin-button{height:auto}input[type="search"]{-webkit-appearance:textfield;box-sizing:content-box}input[type="search"]::-webkit-search-cancel-button,input[type="search"]::-webkit-search-decoration{-webkit-appearance:none}fieldset{border:1px solid #c0c0c0;margin:0 2px;padding:0.35em 0.625em 0.75em}legend{border:0;padding:0}textarea{overflow:auto}optgroup{font-weight:bold}table{border-collapse:collapse;border-spacing:0}td,th{padding:0}*{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}*:before,*:after{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}html{font-size:10px;-webkit-tap-highlight-color:transparent}body{font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Oxygen,Ubuntu,Cantarell,"Fira Sans","Droid Sans","Helvetica Neue",Helvetica,Arial,sans-serif;font-size:1rem;line-height:1.6;color:#5e666c;background-color:#f9fafb}input,button,select,textarea{font-family:inherit;font-size:inherit;line-height:inherit}a{color:#0bb;text-decoration:none}a:hover,a:focus{color:#009595;text-decoration:none}a:focus{outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}figure{margin:0}img{vertical-align:middle}.img-responsive{display:block;max-width:100%;height:auto}.img-rounded{border-radius:4px}.img-thumbnail{padding:0;line-height:1.6;background-color:#fff;border:1px solid transparent;border-radius:4px;-webkit-transition:all 0.2s ease-in-out;-o-transition:all 0.2s ease-in-out;transition:all 0.2s ease-in-out;display:inline-block;max-width:100%;height:auto}.img-circle{border-radius:50%}hr{margin-top:1.6rem;margin-bottom:1.6rem;border:0;border-top:1px solid rgba(0,30,60,0.075)}.sr-only{position:absolute;width:1px;height:1px;margin:-1px;padding:0;overflow:hidden;clip:rect(0, 0, 0, 0);border:0}.sr-only-focusable:active,.sr-only-focusable:focus{position:static;width:auto;height:auto;margin:0;overflow:visible;clip:auto}[role="button"]{cursor:pointer}h1,h2,h3,h4,h5,h6,.h1,.h2,.h3,.h4,.h5,.h6{font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Oxygen,Ubuntu,Cantarell,"Fira Sans","Droid Sans","Helvetica Neue",Helvetica,Arial,sans-serif;font-weight:normal;line-height:false;color:#313539}h1 small,h1 .small,h2 small,h2 .small,h3 small,h3 .small,h4 small,h4 .small,h5 small,h5 .small,h6 small,h6 .small,.h1 small,.h1 .small,.h2 small,.h2 .small,.h3 small,.h3 .small,.h4 small,.h4 .small,.h5 small,.h5 .small,.h6 small,.h6 .small{font-weight:normal;line-height:1;color:#8b969e}h1,.h1,h2,.h2,h3,.h3{margin-top:1.6rem;margin-bottom:.8rem}h1 small,h1 .small,.h1 small,.h1 .small,h2 small,h2 .small,.h2 small,.h2 .small,h3 small,h3 .small,.h3 small,.h3 .small{font-size:65%}h4,.h4,h5,.h5,h6,.h6{margin-top:.8rem;margin-bottom:.8rem}h4 small,h4 .small,.h4 small,.h4 .small,h5 small,h5 .small,.h5 small,.h5 .small,h6 small,h6 .small,.h6 small,.h6 .small{font-size:75%}h1,.h1{font-size:1.7142857143rem}h2,.h2{font-size:1.7142857143rem}h3,.h3{font-size:1.2857142857rem}h4,.h4{font-size:1.1428571429rem}h5,.h5{font-size:1rem}h6,.h6{font-size:1rem}p{margin:0 0 .8rem}.lead{margin-bottom:1.6rem;font-size:1rem;font-weight:300;line-height:1.4}@media (min-width: 540px){.lead{font-size:1.5rem}}small,.small{font-size:92%}mark,.mark{background-color:#fff6ec;padding:.2em}.text-left{text-align:left}.text-right{text-align:right}.text-center{text-align:center}.text-justify{text-align:justify}.text-nowrap{white-space:nowrap}.text-lowercase{text-transform:lowercase}.text-uppercase,.initialism{text-transform:uppercase}.text-capitalize{text-transform:capitalize}.text-muted{color:#8b969e}.text-primary{color:#0bb}a.text-primary:hover,a.text-primary:focus{color:#088}.text-success{color:#48a71c}a.text-success:hover,a.text-success:focus{color:#357b15}.text-info{color:#0aa}a.text-info:hover,a.text-info:focus{color:#077}.text-warning{color:#ff6316}a.text-warning:hover,a.text-warning:focus{color:#e24b00}.text-danger{color:#ff694b}a.text-danger:hover,a.text-danger:focus{color:#ff3f18}.bg-primary{color:#fff}.bg-primary{background-color:#0bb}a.bg-primary:hover,a.bg-primary:focus{background-color:#088}.bg-success{background-color:#f3faec}a.bg-success:hover,a.bg-success:focus{background-color:#daefc4}.bg-info{background-color:#edfafa}a.bg-info:hover,a.bg-info:focus{background-color:#c5efef}.bg-warning{background-color:#fff6ec}a.bg-warning:hover,a.bg-warning:focus{background-color:#ffdeb9}.bg-danger{background-color:#fff5f4}a.bg-danger:hover,a.bg-danger:focus{background-color:#ffc7c1}.page-header{padding-bottom:-.2rem;margin:3.2rem 0 1.6rem;border-bottom:1px solid #f7f7f8}ul,ol{margin-top:0;margin-bottom:.8rem}ul ul,ul ol,ol ul,ol ol{margin-bottom:0}.list-unstyled{padding-left:0;list-style:none}.list-inline{padding-left:0;list-style:none;margin-left:-5px}.list-inline>li{display:inline-block;padding-left:5px;padding-right:5px}dl{margin-top:0;margin-bottom:1.6rem}dt,dd{line-height:1.6}dt{font-weight:bold}dd{margin-left:0}.dl-horizontal dd:before,.dl-horizontal dd:after{content:" ";display:table}.dl-horizontal dd:after{clear:both}@media (min-width: 260px){.dl-horizontal dt{float:left;width:160px;clear:left;text-align:right;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.dl-horizontal dd{margin-left:180px}}abbr[title],abbr[data-original-title]{cursor:help;border-bottom:1px dotted rgba(0,30,60,0.075)}.initialism{font-size:90%}blockquote{padding:.8rem 1.6rem;margin:0 0 1.6rem;font-size:1rem;border-left:5px solid transparent}blockquote p:last-child,blockquote ul:last-child,blockquote ol:last-child{margin-bottom:0}blockquote footer,blockquote small,blockquote .small{display:block;font-size:80%;line-height:1.6;color:#8b969e}blockquote footer:before,blockquote small:before,blockquote .small:before{content:\'\\2014 \\A0\'}.blockquote-reverse,blockquote.pull-right{padding-right:15px;padding-left:0;border-right:5px solid transparent;border-left:0;text-align:right}.blockquote-reverse footer:before,.blockquote-reverse small:before,.blockquote-reverse .small:before,blockquote.pull-right footer:before,blockquote.pull-right small:before,blockquote.pull-right .small:before{content:\'\'}.blockquote-reverse footer:after,.blockquote-reverse small:after,.blockquote-reverse .small:after,blockquote.pull-right footer:after,blockquote.pull-right small:after,blockquote.pull-right .small:after{content:\'\\A0 \\2014\'}address{margin-bottom:1.6rem;font-style:normal;line-height:1.6}code,kbd,pre,samp{font-family:"Monaco",monospace}code{padding:2px 4px;font-size:90%;color:#313539;background-color:transparent;border-radius:4px}kbd{padding:2px 4px;font-size:90%;color:#313539;background-color:transparent;border-radius:4px;box-shadow:inset 0 -1px 0 rgba(0,0,0,0.25)}kbd kbd{padding:0;font-size:100%;font-weight:bold;box-shadow:none}pre{display:block;padding:.3rem;margin:0 0 .8rem;font-size:0rem;line-height:1.6;word-break:break-all;word-wrap:break-word;color:#fff;background-color:#005e7a;border:1px solid transparent;border-radius:4px}pre code{padding:0;font-size:inherit;color:inherit;white-space:pre-wrap;background-color:transparent;border-radius:0}.pre-scrollable{max-height:340px;overflow-y:scroll}.container{margin-right:auto;margin-left:auto;padding-left:30px;padding-right:30px}.container:before,.container:after{content:" ";display:table}.container:after{clear:both}@media (min-width: 540px){.container{width:780px}}@media (min-width: 768px){.container{width:1000px}}@media (min-width: 960px){.container{width:1200px}}.container-fluid{margin-right:auto;margin-left:auto;padding-left:30px;padding-right:30px}.container-fluid:before,.container-fluid:after{content:" ";display:table}.container-fluid:after{clear:both}.row{margin-left:-30px;margin-right:-30px}.row:before,.row:after{content:" ";display:table}.row:after{clear:both}.col-xs-1,.col-sm-1,.col-md-1,.col-lg-1,.col-xs-2,.col-sm-2,.col-md-2,.col-lg-2,.col-xs-3,.col-sm-3,.col-md-3,.col-lg-3,.col-xs-4,.col-sm-4,.col-md-4,.col-lg-4,.col-xs-5,.col-sm-5,.col-md-5,.col-lg-5,.col-xs-6,.col-sm-6,.col-md-6,.col-lg-6,.col-xs-7,.col-sm-7,.col-md-7,.col-lg-7,.col-xs-8,.col-sm-8,.col-md-8,.col-lg-8,.col-xs-9,.col-sm-9,.col-md-9,.col-lg-9,.col-xs-10,.col-sm-10,.col-md-10,.col-lg-10,.col-xs-11,.col-sm-11,.col-md-11,.col-lg-11,.col-xs-12,.col-sm-12,.col-md-12,.col-lg-12{position:relative;min-height:1px;padding-left:30px;padding-right:30px}.col-xs-1,.col-xs-2,.col-xs-3,.col-xs-4,.col-xs-5,.col-xs-6,.col-xs-7,.col-xs-8,.col-xs-9,.col-xs-10,.col-xs-11,.col-xs-12{float:left}.col-xs-1{width:8.3333333333%}.col-xs-2{width:16.6666666667%}.col-xs-3{width:25%}.col-xs-4{width:33.3333333333%}.col-xs-5{width:41.6666666667%}.col-xs-6{width:50%}.col-xs-7{width:58.3333333333%}.col-xs-8{width:66.6666666667%}.col-xs-9{width:75%}.col-xs-10{width:83.3333333333%}.col-xs-11{width:91.6666666667%}.col-xs-12{width:100%}.col-xs-pull-0{right:auto}.col-xs-pull-1{right:8.3333333333%}.col-xs-pull-2{right:16.6666666667%}.col-xs-pull-3{right:25%}.col-xs-pull-4{right:33.3333333333%}.col-xs-pull-5{right:41.6666666667%}.col-xs-pull-6{right:50%}.col-xs-pull-7{right:58.3333333333%}.col-xs-pull-8{right:66.6666666667%}.col-xs-pull-9{right:75%}.col-xs-pull-10{right:83.3333333333%}.col-xs-pull-11{right:91.6666666667%}.col-xs-pull-12{right:100%}.col-xs-push-0{left:auto}.col-xs-push-1{left:8.3333333333%}.col-xs-push-2{left:16.6666666667%}.col-xs-push-3{left:25%}.col-xs-push-4{left:33.3333333333%}.col-xs-push-5{left:41.6666666667%}.col-xs-push-6{left:50%}.col-xs-push-7{left:58.3333333333%}.col-xs-push-8{left:66.6666666667%}.col-xs-push-9{left:75%}.col-xs-push-10{left:83.3333333333%}.col-xs-push-11{left:91.6666666667%}.col-xs-push-12{left:100%}.col-xs-offset-0{margin-left:0%}.col-xs-offset-1{margin-left:8.3333333333%}.col-xs-offset-2{margin-left:16.6666666667%}.col-xs-offset-3{margin-left:25%}.col-xs-offset-4{margin-left:33.3333333333%}.col-xs-offset-5{margin-left:41.6666666667%}.col-xs-offset-6{margin-left:50%}.col-xs-offset-7{margin-left:58.3333333333%}.col-xs-offset-8{margin-left:66.6666666667%}.col-xs-offset-9{margin-left:75%}.col-xs-offset-10{margin-left:83.3333333333%}.col-xs-offset-11{margin-left:91.6666666667%}.col-xs-offset-12{margin-left:100%}@media (min-width: 540px){.col-sm-1,.col-sm-2,.col-sm-3,.col-sm-4,.col-sm-5,.col-sm-6,.col-sm-7,.col-sm-8,.col-sm-9,.col-sm-10,.col-sm-11,.col-sm-12{float:left}.col-sm-1{width:8.3333333333%}.col-sm-2{width:16.6666666667%}.col-sm-3{width:25%}.col-sm-4{width:33.3333333333%}.col-sm-5{width:41.6666666667%}.col-sm-6{width:50%}.col-sm-7{width:58.3333333333%}.col-sm-8{width:66.6666666667%}.col-sm-9{width:75%}.col-sm-10{width:83.3333333333%}.col-sm-11{width:91.6666666667%}.col-sm-12{width:100%}.col-sm-pull-0{right:auto}.col-sm-pull-1{right:8.3333333333%}.col-sm-pull-2{right:16.6666666667%}.col-sm-pull-3{right:25%}.col-sm-pull-4{right:33.3333333333%}.col-sm-pull-5{right:41.6666666667%}.col-sm-pull-6{right:50%}.col-sm-pull-7{right:58.3333333333%}.col-sm-pull-8{right:66.6666666667%}.col-sm-pull-9{right:75%}.col-sm-pull-10{right:83.3333333333%}.col-sm-pull-11{right:91.6666666667%}.col-sm-pull-12{right:100%}.col-sm-push-0{left:auto}.col-sm-push-1{left:8.3333333333%}.col-sm-push-2{left:16.6666666667%}.col-sm-push-3{left:25%}.col-sm-push-4{left:33.3333333333%}.col-sm-push-5{left:41.6666666667%}.col-sm-push-6{left:50%}.col-sm-push-7{left:58.3333333333%}.col-sm-push-8{left:66.6666666667%}.col-sm-push-9{left:75%}.col-sm-push-10{left:83.3333333333%}.col-sm-push-11{left:91.6666666667%}.col-sm-push-12{left:100%}.col-sm-offset-0{margin-left:0%}.col-sm-offset-1{margin-left:8.3333333333%}.col-sm-offset-2{margin-left:16.6666666667%}.col-sm-offset-3{margin-left:25%}.col-sm-offset-4{margin-left:33.3333333333%}.col-sm-offset-5{margin-left:41.6666666667%}.col-sm-offset-6{margin-left:50%}.col-sm-offset-7{margin-left:58.3333333333%}.col-sm-offset-8{margin-left:66.6666666667%}.col-sm-offset-9{margin-left:75%}.col-sm-offset-10{margin-left:83.3333333333%}.col-sm-offset-11{margin-left:91.6666666667%}.col-sm-offset-12{margin-left:100%}}@media (min-width: 768px){.col-md-1,.col-md-2,.col-md-3,.col-md-4,.col-md-5,.col-md-6,.col-md-7,.col-md-8,.col-md-9,.col-md-10,.col-md-11,.col-md-12{float:left}.col-md-1{width:8.3333333333%}.col-md-2{width:16.6666666667%}.col-md-3{width:25%}.col-md-4{width:33.3333333333%}.col-md-5{width:41.6666666667%}.col-md-6{width:50%}.col-md-7{width:58.3333333333%}.col-md-8{width:66.6666666667%}.col-md-9{width:75%}.col-md-10{width:83.3333333333%}.col-md-11{width:91.6666666667%}.col-md-12{width:100%}.col-md-pull-0{right:auto}.col-md-pull-1{right:8.3333333333%}.col-md-pull-2{right:16.6666666667%}.col-md-pull-3{right:25%}.col-md-pull-4{right:33.3333333333%}.col-md-pull-5{right:41.6666666667%}.col-md-pull-6{right:50%}.col-md-pull-7{right:58.3333333333%}.col-md-pull-8{right:66.6666666667%}.col-md-pull-9{right:75%}.col-md-pull-10{right:83.3333333333%}.col-md-pull-11{right:91.6666666667%}.col-md-pull-12{right:100%}.col-md-push-0{left:auto}.col-md-push-1{left:8.3333333333%}.col-md-push-2{left:16.6666666667%}.col-md-push-3{left:25%}.col-md-push-4{left:33.3333333333%}.col-md-push-5{left:41.6666666667%}.col-md-push-6{left:50%}.col-md-push-7{left:58.3333333333%}.col-md-push-8{left:66.6666666667%}.col-md-push-9{left:75%}.col-md-push-10{left:83.3333333333%}.col-md-push-11{left:91.6666666667%}.col-md-push-12{left:100%}.col-md-offset-0{margin-left:0%}.col-md-offset-1{margin-left:8.3333333333%}.col-md-offset-2{margin-left:16.6666666667%}.col-md-offset-3{margin-left:25%}.col-md-offset-4{margin-left:33.3333333333%}.col-md-offset-5{margin-left:41.6666666667%}.col-md-offset-6{margin-left:50%}.col-md-offset-7{margin-left:58.3333333333%}.col-md-offset-8{margin-left:66.6666666667%}.col-md-offset-9{margin-left:75%}.col-md-offset-10{margin-left:83.3333333333%}.col-md-offset-11{margin-left:91.6666666667%}.col-md-offset-12{margin-left:100%}}@media (min-width: 960px){.col-lg-1,.col-lg-2,.col-lg-3,.col-lg-4,.col-lg-5,.col-lg-6,.col-lg-7,.col-lg-8,.col-lg-9,.col-lg-10,.col-lg-11,.col-lg-12{float:left}.col-lg-1{width:8.3333333333%}.col-lg-2{width:16.6666666667%}.col-lg-3{width:25%}.col-lg-4{width:33.3333333333%}.col-lg-5{width:41.6666666667%}.col-lg-6{width:50%}.col-lg-7{width:58.3333333333%}.col-lg-8{width:66.6666666667%}.col-lg-9{width:75%}.col-lg-10{width:83.3333333333%}.col-lg-11{width:91.6666666667%}.col-lg-12{width:100%}.col-lg-pull-0{right:auto}.col-lg-pull-1{right:8.3333333333%}.col-lg-pull-2{right:16.6666666667%}.col-lg-pull-3{right:25%}.col-lg-pull-4{right:33.3333333333%}.col-lg-pull-5{right:41.6666666667%}.col-lg-pull-6{right:50%}.col-lg-pull-7{right:58.3333333333%}.col-lg-pull-8{right:66.6666666667%}.col-lg-pull-9{right:75%}.col-lg-pull-10{right:83.3333333333%}.col-lg-pull-11{right:91.6666666667%}.col-lg-pull-12{right:100%}.col-lg-push-0{left:auto}.col-lg-push-1{left:8.3333333333%}.col-lg-push-2{left:16.6666666667%}.col-lg-push-3{left:25%}.col-lg-push-4{left:33.3333333333%}.col-lg-push-5{left:41.6666666667%}.col-lg-push-6{left:50%}.col-lg-push-7{left:58.3333333333%}.col-lg-push-8{left:66.6666666667%}.col-lg-push-9{left:75%}.col-lg-push-10{left:83.3333333333%}.col-lg-push-11{left:91.6666666667%}.col-lg-push-12{left:100%}.col-lg-offset-0{margin-left:0%}.col-lg-offset-1{margin-left:8.3333333333%}.col-lg-offset-2{margin-left:16.6666666667%}.col-lg-offset-3{margin-left:25%}.col-lg-offset-4{margin-left:33.3333333333%}.col-lg-offset-5{margin-left:41.6666666667%}.col-lg-offset-6{margin-left:50%}.col-lg-offset-7{margin-left:58.3333333333%}.col-lg-offset-8{margin-left:66.6666666667%}.col-lg-offset-9{margin-left:75%}.col-lg-offset-10{margin-left:83.3333333333%}.col-lg-offset-11{margin-left:91.6666666667%}.col-lg-offset-12{margin-left:100%}}table{background-color:transparent}caption{padding-top:.6785714286rem 1.25rem;padding-bottom:.6785714286rem 1.25rem;color:#8b969e;text-align:left}th{text-align:left}.table{width:100%;max-width:100%;margin-bottom:1.6rem}.table>thead>tr>th,.table>thead>tr>td,.table>tbody>tr>th,.table>tbody>tr>td,.table>tfoot>tr>th,.table>tfoot>tr>td{padding:.6785714286rem 1.25rem;line-height:1.6;vertical-align:top;border-top:1px solid rgba(0,30,60,0.075)}.table>thead>tr>th{vertical-align:bottom;border-bottom:2px solid rgba(0,30,60,0.075)}.table>caption+thead>tr:first-child>th,.table>caption+thead>tr:first-child>td,.table>colgroup+thead>tr:first-child>th,.table>colgroup+thead>tr:first-child>td,.table>thead:first-child>tr:first-child>th,.table>thead:first-child>tr:first-child>td{border-top:0}.table>tbody+tbody{border-top:2px solid rgba(0,30,60,0.075)}.table .table{background-color:#f9fafb}.table-condensed>thead>tr>th,.table-condensed>thead>tr>td,.table-condensed>tbody>tr>th,.table-condensed>tbody>tr>td,.table-condensed>tfoot>tr>th,.table-condensed>tfoot>tr>td{padding:.4464285714rem .875rem}.table-bordered{border:1px solid rgba(0,30,60,0.075)}.table-bordered>thead>tr>th,.table-bordered>thead>tr>td,.table-bordered>tbody>tr>th,.table-bordered>tbody>tr>td,.table-bordered>tfoot>tr>th,.table-bordered>tfoot>tr>td{border:1px solid rgba(0,30,60,0.075)}.table-bordered>thead>tr>th,.table-bordered>thead>tr>td{border-bottom-width:2px}.table-striped>tbody>tr:nth-of-type(odd){background-color:#f9fafb}.table-hover>tbody>tr:hover{background-color:#f9fafb}table col[class*="col-"]{position:static;float:none;display:table-column}table td[class*="col-"],table th[class*="col-"]{position:static;float:none;display:table-cell}.table>thead>tr>td.active,.table>thead>tr>th.active,.table>thead>tr.active>td,.table>thead>tr.active>th,.table>tbody>tr>td.active,.table>tbody>tr>th.active,.table>tbody>tr.active>td,.table>tbody>tr.active>th,.table>tfoot>tr>td.active,.table>tfoot>tr>th.active,.table>tfoot>tr.active>td,.table>tfoot>tr.active>th{background-color:#f9fafb}.table-hover>tbody>tr>td.active:hover,.table-hover>tbody>tr>th.active:hover,.table-hover>tbody>tr.active:hover>td,.table-hover>tbody>tr:hover>.active,.table-hover>tbody>tr.active:hover>th{background-color:#eaedf1}.table>thead>tr>td.success,.table>thead>tr>th.success,.table>thead>tr.success>td,.table>thead>tr.success>th,.table>tbody>tr>td.success,.table>tbody>tr>th.success,.table>tbody>tr.success>td,.table>tbody>tr.success>th,.table>tfoot>tr>td.success,.table>tfoot>tr>th.success,.table>tfoot>tr.success>td,.table>tfoot>tr.success>th{background-color:#f3faec}.table-hover>tbody>tr>td.success:hover,.table-hover>tbody>tr>th.success:hover,.table-hover>tbody>tr.success:hover>td,.table-hover>tbody>tr:hover>.success,.table-hover>tbody>tr.success:hover>th{background-color:#e6f5d8}.table>thead>tr>td.info,.table>thead>tr>th.info,.table>thead>tr.info>td,.table>thead>tr.info>th,.table>tbody>tr>td.info,.table>tbody>tr>th.info,.table>tbody>tr.info>td,.table>tbody>tr.info>th,.table>tfoot>tr>td.info,.table>tfoot>tr>th.info,.table>tfoot>tr.info>td,.table>tfoot>tr.info>th{background-color:#edfafa}.table-hover>tbody>tr>td.info:hover,.table-hover>tbody>tr>th.info:hover,.table-hover>tbody>tr.info:hover>td,.table-hover>tbody>tr:hover>.info,.table-hover>tbody>tr.info:hover>th{background-color:#d9f4f4}.table>thead>tr>td.warning,.table>thead>tr>th.warning,.table>thead>tr.warning>td,.table>thead>tr.warning>th,.table>tbody>tr>td.warning,.table>tbody>tr>th.warning,.table>tbody>tr.warning>td,.table>tbody>tr.warning>th,.table>tfoot>tr>td.warning,.table>tfoot>tr>th.warning,.table>tfoot>tr.warning>td,.table>tfoot>tr.warning>th{background-color:#fff6ec}.table-hover>tbody>tr>td.warning:hover,.table-hover>tbody>tr>th.warning:hover,.table-hover>tbody>tr.warning:hover>td,.table-hover>tbody>tr:hover>.warning,.table-hover>tbody>tr.warning:hover>th{background-color:#ffead3}.table>thead>tr>td.danger,.table>thead>tr>th.danger,.table>thead>tr.danger>td,.table>thead>tr.danger>th,.table>tbody>tr>td.danger,.table>tbody>tr>th.danger,.table>tbody>tr.danger>td,.table>tbody>tr.danger>th,.table>tfoot>tr>td.danger,.table>tfoot>tr>th.danger,.table>tfoot>tr.danger>td,.table>tfoot>tr.danger>th{background-color:#fff5f4}.table-hover>tbody>tr>td.danger:hover,.table-hover>tbody>tr>th.danger:hover,.table-hover>tbody>tr.danger:hover>td,.table-hover>tbody>tr:hover>.danger,.table-hover>tbody>tr.danger:hover>th{background-color:#ffdedb}.table-responsive{overflow-x:auto;min-height:0.01%}@media screen and (max-width: 539px){.table-responsive{width:100%;margin-bottom:1.2rem;overflow-y:hidden;-ms-overflow-style:-ms-autohiding-scrollbar;border:1px solid rgba(0,30,60,0.075)}.table-responsive>.table{margin-bottom:0}.table-responsive>.table>thead>tr>th,.table-responsive>.table>thead>tr>td,.table-responsive>.table>tbody>tr>th,.table-responsive>.table>tbody>tr>td,.table-responsive>.table>tfoot>tr>th,.table-responsive>.table>tfoot>tr>td{white-space:nowrap}.table-responsive>.table-bordered{border:0}.table-responsive>.table-bordered>thead>tr>th:first-child,.table-responsive>.table-bordered>thead>tr>td:first-child,.table-responsive>.table-bordered>tbody>tr>th:first-child,.table-responsive>.table-bordered>tbody>tr>td:first-child,.table-responsive>.table-bordered>tfoot>tr>th:first-child,.table-responsive>.table-bordered>tfoot>tr>td:first-child{border-left:0}.table-responsive>.table-bordered>thead>tr>th:last-child,.table-responsive>.table-bordered>thead>tr>td:last-child,.table-responsive>.table-bordered>tbody>tr>th:last-child,.table-responsive>.table-bordered>tbody>tr>td:last-child,.table-responsive>.table-bordered>tfoot>tr>th:last-child,.table-responsive>.table-bordered>tfoot>tr>td:last-child{border-right:0}.table-responsive>.table-bordered>tbody>tr:last-child>th,.table-responsive>.table-bordered>tbody>tr:last-child>td,.table-responsive>.table-bordered>tfoot>tr:last-child>th,.table-responsive>.table-bordered>tfoot>tr:last-child>td{border-bottom:0}}fieldset{padding:0;margin:0;border:0;min-width:0}legend{display:block;width:100%;padding:0;margin-bottom:1.6rem;font-size:1.5rem;line-height:inherit;color:#8b969e;border:0;border-bottom:1px solid rgba(0,30,60,0.075)}label{display:inline-block;max-width:100%;margin-bottom:5px;font-weight:bold}input[type="search"]{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}input[type="radio"],input[type="checkbox"]{margin:4px 0 0;margin-top:1px \\9;line-height:normal}input[type="file"]{display:block}input[type="range"]{display:block;width:100%}select[multiple],select[size]{height:auto}input[type="file"]:focus,input[type="radio"]:focus,input[type="checkbox"]:focus{outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}output{display:block;padding-top:1.6785714286rem;font-size:1rem;line-height:1.6;color:#484e53}.form-control{display:block;width:100%;height:2.8571428571rem;padding:.6785714286rem 1.25rem;font-size:1rem;line-height:1.6;color:#484e53;background-color:#f0f2f4;background-image:none;border:1px solid transparent;border-radius:4px;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);-webkit-transition:border-color ease-in-out 0.15s,box-shadow ease-in-out 0.15s;-o-transition:border-color ease-in-out 0.15s,box-shadow ease-in-out 0.15s;transition:border-color ease-in-out 0.15s,box-shadow ease-in-out 0.15s}.form-control:focus{border-color:transparent;outline:0;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 8px rgba(0,0,0,0.6);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 8px rgba(0,0,0,0.6)}.form-control::-moz-placeholder{color:#a8b1b7;opacity:1}.form-control:-ms-input-placeholder{color:#a8b1b7}.form-control::-webkit-input-placeholder{color:#a8b1b7}.form-control::-ms-expand{border:0;background-color:transparent}.form-control[disabled],.form-control[readonly],fieldset[disabled] .form-control{background-color:#e4e6eb;opacity:1}.form-control[disabled],fieldset[disabled] .form-control{cursor:not-allowed}textarea.form-control{height:auto}input[type="search"]{-webkit-appearance:none}@media screen and (-webkit-min-device-pixel-ratio: 0){input[type="date"].form-control,input[type="time"].form-control,input[type="datetime-local"].form-control,input[type="month"].form-control{line-height:2.8571428571rem}input[type="date"].input-sm,.input-group-sm>input[type="date"].form-control,.input-group-sm>input[type="date"].input-group-addon,.input-group-sm>.input-group-btn>input[type="date"].btn,.input-group-sm input[type="date"],input[type="time"].input-sm,.input-group-sm>input[type="time"].form-control,.input-group-sm>input[type="time"].input-group-addon,.input-group-sm>.input-group-btn>input[type="time"].btn,.input-group-sm input[type="time"],input[type="datetime-local"].input-sm,.input-group-sm>input[type="datetime-local"].form-control,.input-group-sm>input[type="datetime-local"].input-group-addon,.input-group-sm>.input-group-btn>input[type="datetime-local"].btn,.input-group-sm input[type="datetime-local"],input[type="month"].input-sm,.input-group-sm>input[type="month"].form-control,.input-group-sm>input[type="month"].input-group-addon,.input-group-sm>.input-group-btn>input[type="month"].btn,.input-group-sm input[type="month"]{line-height:2.2857142857rem}input[type="date"].input-lg,.input-group-lg>input[type="date"].form-control,.input-group-lg>input[type="date"].input-group-addon,.input-group-lg>.input-group-btn>input[type="date"].btn,.input-group-lg input[type="date"],input[type="time"].input-lg,.input-group-lg>input[type="time"].form-control,.input-group-lg>input[type="time"].input-group-addon,.input-group-lg>.input-group-btn>input[type="time"].btn,.input-group-lg input[type="time"],input[type="datetime-local"].input-lg,.input-group-lg>input[type="datetime-local"].form-control,.input-group-lg>input[type="datetime-local"].input-group-addon,.input-group-lg>.input-group-btn>input[type="datetime-local"].btn,.input-group-lg input[type="datetime-local"],input[type="month"].input-lg,.input-group-lg>input[type="month"].form-control,.input-group-lg>input[type="month"].input-group-addon,.input-group-lg>.input-group-btn>input[type="month"].btn,.input-group-lg input[type="month"]{line-height:4.2857142857rem}}.form-group{margin-bottom:15px}.radio,.checkbox{position:relative;display:block;margin-top:10px;margin-bottom:10px}.radio label,.checkbox label{min-height:1.6rem;padding-left:20px;margin-bottom:0;font-weight:normal;cursor:pointer}.radio input[type="radio"],.radio-inline input[type="radio"],.checkbox input[type="checkbox"],.checkbox-inline input[type="checkbox"]{position:absolute;margin-left:-20px;margin-top:4px \\9}.radio+.radio,.checkbox+.checkbox{margin-top:-5px}.radio-inline,.checkbox-inline{position:relative;display:inline-block;padding-left:20px;margin-bottom:0;vertical-align:middle;font-weight:normal;cursor:pointer}.radio-inline+.radio-inline,.checkbox-inline+.checkbox-inline{margin-top:0;margin-left:10px}input[type="radio"][disabled],input[type="radio"].disabled,fieldset[disabled] input[type="radio"],input[type="checkbox"][disabled],input[type="checkbox"].disabled,fieldset[disabled] input[type="checkbox"]{cursor:not-allowed}.radio-inline.disabled,fieldset[disabled] .radio-inline,.checkbox-inline.disabled,fieldset[disabled] .checkbox-inline{cursor:not-allowed}.radio.disabled label,fieldset[disabled] .radio label,.checkbox.disabled label,fieldset[disabled] .checkbox label{cursor:not-allowed}.form-control-static,.form-grid .form-row .form-label label{padding-top:1.6785714286rem;padding-bottom:1.6785714286rem;margin-bottom:0;min-height:2.6rem}.form-control-static.input-lg,.input-group-lg>.form-control-static.form-control,.form-grid .form-row .form-label .input-group-lg>label.form-control,.input-group-lg>.form-control-static.input-group-addon,.form-grid .form-row .form-label .input-group-lg>label.input-group-addon,.input-group-lg>.input-group-btn>.form-control-static.btn,.form-grid .form-row .form-label .input-group-lg>.input-group-btn>label.btn,.form-grid .form-row .form-label label.input-lg,.form-control-static.input-sm,.input-group-sm>.form-control-static.form-control,.form-grid .form-row .form-label .input-group-sm>label.form-control,.input-group-sm>.form-control-static.input-group-addon,.form-grid .form-row .form-label .input-group-sm>label.input-group-addon,.input-group-sm>.input-group-btn>.form-control-static.btn,.form-grid .form-row .form-label .input-group-sm>.input-group-btn>label.btn,.form-grid .form-row .form-label label.input-sm{padding-left:0;padding-right:0}.input-sm,.input-group-sm>.form-control,.input-group-sm>.input-group-addon,.input-group-sm>.input-group-btn>.btn{height:2.2857142857rem;padding:.4464285714rem .875rem;font-size:.9285714286rem;line-height:1.6;border-radius:4px}select.input-sm,.input-group-sm>select.form-control,.input-group-sm>select.input-group-addon,.input-group-sm>.input-group-btn>select.btn{height:2.2857142857rem;line-height:2.2857142857rem}textarea.input-sm,.input-group-sm>textarea.form-control,.input-group-sm>textarea.input-group-addon,.input-group-sm>.input-group-btn>textarea.btn,select[multiple].input-sm,.input-group-sm>select[multiple].form-control,.input-group-sm>select[multiple].input-group-addon,.input-group-sm>.input-group-btn>select[multiple].btn{height:auto}.form-group-sm .form-control{height:2.2857142857rem;padding:.4464285714rem .875rem;font-size:.9285714286rem;line-height:1.6;border-radius:4px}.form-group-sm select.form-control{height:2.2857142857rem;line-height:2.2857142857rem}.form-group-sm textarea.form-control,.form-group-sm select[multiple].form-control{height:auto}.form-group-sm .form-control-static,.form-group-sm .form-grid .form-row .form-label label,.form-grid .form-row .form-label .form-group-sm label{height:2.2857142857rem;min-height:2.5285714286rem;padding:1.4464285714rem .875rem;font-size:.9285714286rem;line-height:1.6}.input-lg,.input-group-lg>.form-control,.input-group-lg>.input-group-addon,.input-group-lg>.input-group-btn>.btn{height:4.2857142857rem;padding:1.2857142857rem 1.875rem;font-size:1.1428571429rem;line-height:1.6;border-radius:4px}select.input-lg,.input-group-lg>select.form-control,.input-group-lg>select.input-group-addon,.input-group-lg>.input-group-btn>select.btn{height:4.2857142857rem;line-height:4.2857142857rem}textarea.input-lg,.input-group-lg>textarea.form-control,.input-group-lg>textarea.input-group-addon,.input-group-lg>.input-group-btn>textarea.btn,select[multiple].input-lg,.input-group-lg>select[multiple].form-control,.input-group-lg>select[multiple].input-group-addon,.input-group-lg>.input-group-btn>select[multiple].btn{height:auto}.form-group-lg .form-control{height:4.2857142857rem;padding:1.2857142857rem 1.875rem;font-size:1.1428571429rem;line-height:1.6;border-radius:4px}.form-group-lg select.form-control{height:4.2857142857rem;line-height:4.2857142857rem}.form-group-lg textarea.form-control,.form-group-lg select[multiple].form-control{height:auto}.form-group-lg .form-control-static,.form-group-lg .form-grid .form-row .form-label label,.form-grid .form-row .form-label .form-group-lg label{height:4.2857142857rem;min-height:2.7428571429rem;padding:2.2857142857rem 1.875rem;font-size:1.1428571429rem;line-height:1.6}.has-feedback{position:relative}.has-feedback .form-control{padding-right:3.5714285714rem}.form-control-feedback{position:absolute;top:0;right:0;z-index:2;display:block;width:2.8571428571rem;height:2.8571428571rem;line-height:2.8571428571rem;text-align:center;pointer-events:none}.input-lg+.form-control-feedback,.input-group-lg>.form-control+.form-control-feedback,.input-group-lg>.input-group-addon+.form-control-feedback,.input-group-lg>.input-group-btn>.btn+.form-control-feedback,.input-group-lg+.form-control-feedback,.form-group-lg .form-control+.form-control-feedback{width:4.2857142857rem;height:4.2857142857rem;line-height:4.2857142857rem}.input-sm+.form-control-feedback,.input-group-sm>.form-control+.form-control-feedback,.input-group-sm>.input-group-addon+.form-control-feedback,.input-group-sm>.input-group-btn>.btn+.form-control-feedback,.input-group-sm+.form-control-feedback,.form-group-sm .form-control+.form-control-feedback{width:2.2857142857rem;height:2.2857142857rem;line-height:2.2857142857rem}.has-success .help-block,.has-success .control-label,.has-success .radio,.has-success .checkbox,.has-success .radio-inline,.has-success .checkbox-inline,.has-success.radio label,.has-success.checkbox label,.has-success.radio-inline label,.has-success.checkbox-inline label{color:#48a71c}.has-success .form-control{border-color:#48a71c;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075)}.has-success .form-control:focus{border-color:#357b15;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #79e049;box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #79e049}.has-success .input-group-addon{color:#48a71c;border-color:#48a71c;background-color:#f3faec}.has-success .form-control-feedback{color:#48a71c}.has-warning .help-block,.has-warning .control-label,.has-warning .radio,.has-warning .checkbox,.has-warning .radio-inline,.has-warning .checkbox-inline,.has-warning.radio label,.has-warning.checkbox label,.has-warning.radio-inline label,.has-warning.checkbox-inline label{color:#ff6316}.has-warning .form-control{border-color:#ff6316;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075)}.has-warning .form-control:focus{border-color:#e24b00;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #ffa77c;box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #ffa77c}.has-warning .input-group-addon{color:#ff6316;border-color:#ff6316;background-color:#fff6ec}.has-warning .form-control-feedback{color:#ff6316}.has-error .help-block,.has-error .control-label,.has-error .radio,.has-error .checkbox,.has-error .radio-inline,.has-error .checkbox-inline,.has-error.radio label,.has-error.checkbox label,.has-error.radio-inline label,.has-error.checkbox-inline label{color:#ff694b}.has-error .form-control{border-color:#ff694b;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075)}.has-error .form-control:focus{border-color:#ff3f18;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #ffbeb1;box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #ffbeb1}.has-error .input-group-addon{color:#ff694b;border-color:#ff694b;background-color:#fff5f4}.has-error .form-control-feedback{color:#ff694b}.has-feedback label ~ .form-control-feedback{top:6.6rem}.has-feedback label.sr-only ~ .form-control-feedback{top:0}.help-block{display:block;margin-top:5px;margin-bottom:10px;color:#9ea6ab}@media (min-width: 540px){.form-inline .form-group{display:inline-block;margin-bottom:0;vertical-align:middle}.form-inline .form-control{display:inline-block;width:auto;vertical-align:middle}.form-inline .form-control-static,.form-inline .form-grid .form-row .form-label label,.form-grid .form-row .form-label .form-inline label{display:inline-block}.form-inline .input-group{display:inline-table;vertical-align:middle}.form-inline .input-group .input-group-addon,.form-inline .input-group .input-group-btn,.form-inline .input-group .form-control{width:auto}.form-inline .input-group>.form-control{width:100%}.form-inline .control-label{margin-bottom:0;vertical-align:middle}.form-inline .radio,.form-inline .checkbox{display:inline-block;margin-top:0;margin-bottom:0;vertical-align:middle}.form-inline .radio label,.form-inline .checkbox label{padding-left:0}.form-inline .radio input[type="radio"],.form-inline .checkbox input[type="checkbox"]{position:relative;margin-left:0}.form-inline .has-feedback .form-control-feedback{top:0}}.form-horizontal .radio,.form-horizontal .checkbox,.form-horizontal .radio-inline,.form-horizontal .checkbox-inline{margin-top:0;margin-bottom:0;padding-top:1.6785714286rem}.form-horizontal .radio,.form-horizontal .checkbox{min-height:3.2785714286rem}.form-horizontal .form-group{margin-left:-30px;margin-right:-30px}.form-horizontal .form-group:before,.form-horizontal .form-group:after{content:" ";display:table}.form-horizontal .form-group:after{clear:both}@media (min-width: 540px){.form-horizontal .control-label{text-align:right;margin-bottom:0;padding-top:1.6785714286rem}}.form-horizontal .has-feedback .form-control-feedback{right:30px}@media (min-width: 540px){.form-horizontal .form-group-lg .control-label{padding-top:2.2857142857rem;font-size:1.1428571429rem}}@media (min-width: 540px){.form-horizontal .form-group-sm .control-label{padding-top:1.4464285714rem;font-size:.9285714286rem}}.btn{display:inline-block;margin-bottom:0;font-weight:bold;text-align:center;vertical-align:middle;touch-action:manipulation;cursor:pointer;background-image:none;border:1px solid transparent;white-space:nowrap;padding:.6785714286rem 1.25rem;font-size:1rem;line-height:1.6;border-radius:4px;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.btn:focus,.btn.focus,.btn:active:focus,.btn:active.focus,.btn.active:focus,.btn.active.focus{outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}.btn:hover,.btn:focus,.btn.focus{color:#484e53;text-decoration:none}.btn:active,.btn.active{outline:0;background-image:none;-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,0.125);box-shadow:inset 0 3px 5px rgba(0,0,0,0.125)}.btn.disabled,.btn[disabled],fieldset[disabled] .btn{cursor:not-allowed;opacity:.65;filter:alpha(opacity=65);-webkit-box-shadow:none;box-shadow:none}a.btn.disabled,fieldset[disabled] a.btn{pointer-events:none}.btn-default{color:#484e53;background-color:#f0f2f4;border-color:transparent}.btn-default:focus,.btn-default.focus{color:#484e53;background-color:#e9ebef}.btn-default:hover{color:#484e53;background-color:#e9ebef}.btn-default:active,.btn-default.active,.open>.btn-default.dropdown-toggle{color:#484e53;background-color:#e9ebef}.btn-default:active:hover,.btn-default:active:focus,.btn-default:active.focus,.btn-default.active:hover,.btn-default.active:focus,.btn-default.active.focus,.open>.btn-default.dropdown-toggle:hover,.open>.btn-default.dropdown-toggle:focus,.open>.btn-default.dropdown-toggle.focus{color:#484e53;background-color:#e9ebef}.btn-default:active,.btn-default.active,.open>.btn-default.dropdown-toggle{background-image:none}.btn-default.disabled:hover,.btn-default.disabled:focus,.btn-default.disabled.focus,.btn-default[disabled]:hover,.btn-default[disabled]:focus,.btn-default[disabled].focus,fieldset[disabled] .btn-default:hover,fieldset[disabled] .btn-default:focus,fieldset[disabled] .btn-default.focus{background-color:#f0f2f4;border-color:transparent}.btn-default .badge{color:#f0f2f4;background-color:#484e53}.btn-primary{color:#fff;background-color:#0bb;border-color:transparent}.btn-primary:focus,.btn-primary.focus{color:#fff;background-color:#009595}.btn-primary:hover{color:#fff;background-color:#009595}.btn-primary:active,.btn-primary.active,.open>.btn-primary.dropdown-toggle{color:#fff;background-color:#009595}.btn-primary:active:hover,.btn-primary:active:focus,.btn-primary:active.focus,.btn-primary.active:hover,.btn-primary.active:focus,.btn-primary.active.focus,.open>.btn-primary.dropdown-toggle:hover,.open>.btn-primary.dropdown-toggle:focus,.open>.btn-primary.dropdown-toggle.focus{color:#fff;background-color:#009595}.btn-primary:active,.btn-primary.active,.open>.btn-primary.dropdown-toggle{background-image:none}.btn-primary.disabled:hover,.btn-primary.disabled:focus,.btn-primary.disabled.focus,.btn-primary[disabled]:hover,.btn-primary[disabled]:focus,.btn-primary[disabled].focus,fieldset[disabled] .btn-primary:hover,fieldset[disabled] .btn-primary:focus,fieldset[disabled] .btn-primary.focus{background-color:#0bb;border-color:transparent}.btn-primary .badge{color:#0bb;background-color:#fff}.btn-success{color:#fff;background-color:#7ec631;border-color:transparent}.btn-success:focus,.btn-success.focus{color:#fff;background-color:#48a71c}.btn-success:hover{color:#fff;background-color:#48a71c}.btn-success:active,.btn-success.active,.open>.btn-success.dropdown-toggle{color:#fff;background-color:#48a71c}.btn-success:active:hover,.btn-success:active:focus,.btn-success:active.focus,.btn-success.active:hover,.btn-success.active:focus,.btn-success.active.focus,.open>.btn-success.dropdown-toggle:hover,.open>.btn-success.dropdown-toggle:focus,.open>.btn-success.dropdown-toggle.focus{color:#fff;background-color:#48a71c}.btn-success:active,.btn-success.active,.open>.btn-success.dropdown-toggle{background-image:none}.btn-success.disabled:hover,.btn-success.disabled:focus,.btn-success.disabled.focus,.btn-success[disabled]:hover,.btn-success[disabled]:focus,.btn-success[disabled].focus,fieldset[disabled] .btn-success:hover,fieldset[disabled] .btn-success:focus,fieldset[disabled] .btn-success.focus{background-color:#7ec631;border-color:transparent}.btn-success .badge{color:#7ec631;background-color:#fff}.btn-info{color:#fff;background-color:#0bb;border-color:transparent}.btn-info:focus,.btn-info.focus{color:#fff;background-color:#009595}.btn-info:hover{color:#fff;background-color:#009595}.btn-info:active,.btn-info.active,.open>.btn-info.dropdown-toggle{color:#fff;background-color:#009595}.btn-info:active:hover,.btn-info:active:focus,.btn-info:active.focus,.btn-info.active:hover,.btn-info.active:focus,.btn-info.active.focus,.open>.btn-info.dropdown-toggle:hover,.open>.btn-info.dropdown-toggle:focus,.open>.btn-info.dropdown-toggle.focus{color:#fff;background-color:#009595}.btn-info:active,.btn-info.active,.open>.btn-info.dropdown-toggle{background-image:none}.btn-info.disabled:hover,.btn-info.disabled:focus,.btn-info.disabled.focus,.btn-info[disabled]:hover,.btn-info[disabled]:focus,.btn-info[disabled].focus,fieldset[disabled] .btn-info:hover,fieldset[disabled] .btn-info:focus,fieldset[disabled] .btn-info.focus{background-color:#0bb;border-color:transparent}.btn-info .badge{color:#0bb;background-color:#fff}.btn-warning{color:#fff;background-color:#ff9b26;border-color:transparent}.btn-warning:focus,.btn-warning.focus{color:#fff;background-color:#ff6316}.btn-warning:hover{color:#fff;background-color:#ff6316}.btn-warning:active,.btn-warning.active,.open>.btn-warning.dropdown-toggle{color:#fff;background-color:#ff6316}.btn-warning:active:hover,.btn-warning:active:focus,.btn-warning:active.focus,.btn-warning.active:hover,.btn-warning.active:focus,.btn-warning.active.focus,.open>.btn-warning.dropdown-toggle:hover,.open>.btn-warning.dropdown-toggle:focus,.open>.btn-warning.dropdown-toggle.focus{color:#fff;background-color:#ff6316}.btn-warning:active,.btn-warning.active,.open>.btn-warning.dropdown-toggle{background-image:none}.btn-warning.disabled:hover,.btn-warning.disabled:focus,.btn-warning.disabled.focus,.btn-warning[disabled]:hover,.btn-warning[disabled]:focus,.btn-warning[disabled].focus,fieldset[disabled] .btn-warning:hover,fieldset[disabled] .btn-warning:focus,fieldset[disabled] .btn-warning.focus{background-color:#ff9b26;border-color:transparent}.btn-warning .badge{color:#ff9b26;background-color:#fff}.btn-danger{color:#fff;background-color:#ff694b;border-color:transparent}.btn-danger:focus,.btn-danger.focus{color:#fff;background-color:#ff3c2b}.btn-danger:hover{color:#fff;background-color:#ff3c2b}.btn-danger:active,.btn-danger.active,.open>.btn-danger.dropdown-toggle{color:#fff;background-color:#ff3c2b}.btn-danger:active:hover,.btn-danger:active:focus,.btn-danger:active.focus,.btn-danger.active:hover,.btn-danger.active:focus,.btn-danger.active.focus,.open>.btn-danger.dropdown-toggle:hover,.open>.btn-danger.dropdown-toggle:focus,.open>.btn-danger.dropdown-toggle.focus{color:#fff;background-color:#ff3c2b}.btn-danger:active,.btn-danger.active,.open>.btn-danger.dropdown-toggle{background-image:none}.btn-danger.disabled:hover,.btn-danger.disabled:focus,.btn-danger.disabled.focus,.btn-danger[disabled]:hover,.btn-danger[disabled]:focus,.btn-danger[disabled].focus,fieldset[disabled] .btn-danger:hover,fieldset[disabled] .btn-danger:focus,fieldset[disabled] .btn-danger.focus{background-color:#ff694b;border-color:transparent}.btn-danger .badge{color:#ff694b;background-color:#fff}.btn-link{color:#0bb;font-weight:normal;border-radius:0}.btn-link,.btn-link:active,.btn-link.active,.btn-link[disabled],fieldset[disabled] .btn-link{background-color:transparent;-webkit-box-shadow:none;box-shadow:none}.btn-link,.btn-link:hover,.btn-link:focus,.btn-link:active{border-color:transparent}.btn-link:hover,.btn-link:focus{color:#009595;text-decoration:none;background-color:transparent}.btn-link[disabled]:hover,.btn-link[disabled]:focus,fieldset[disabled] .btn-link:hover,fieldset[disabled] .btn-link:focus{color:#8b969e;text-decoration:none}.btn-lg,.btn-group-lg>.btn{padding:1.2857142857rem 1.875rem;font-size:1.1428571429rem;line-height:1.6;border-radius:4px}.btn-sm,.btn-group-sm>.btn{padding:.4464285714rem .875rem;font-size:.9285714286rem;line-height:1.6;border-radius:4px}.btn-xs,.btn-group-xs>.btn{padding:1px 5px;font-size:.9285714286rem;line-height:1.6;border-radius:4px}.btn-block{display:block;width:100%}.btn-block+.btn-block{margin-top:5px}input[type="submit"].btn-block,input[type="reset"].btn-block,input[type="button"].btn-block{width:100%}.fade{opacity:0;-webkit-transition:opacity 0.15s linear;-o-transition:opacity 0.15s linear;transition:opacity 0.15s linear}.fade.in{opacity:1}.collapse{display:none}.collapse.in{display:block}tr.collapse.in{display:table-row}tbody.collapse.in{display:table-row-group}.collapsing{position:relative;height:0;overflow:hidden;-webkit-transition-property:height,visibility;transition-property:height,visibility;-webkit-transition-duration:0.35s;transition-duration:0.35s;-webkit-transition-timing-function:ease;transition-timing-function:ease}.caret{display:inline-block;width:0;height:0;margin-left:2px;vertical-align:middle;border-top:4px dashed;border-top:4px solid \\9 ;border-right:4px solid transparent;border-left:4px solid transparent}.dropup,.dropdown{position:relative}.dropdown-toggle:focus{outline:0}.dropdown-menu{position:absolute;top:100%;left:0;z-index:1000;display:none;float:left;min-width:160px;padding:5px 0;margin:2px 0 0;list-style:none;font-size:1rem;text-align:left;background-color:#fff;border:1px solid transparent;border:1px solid transparent;border-radius:4px;-webkit-box-shadow:0 6px 12px rgba(0,0,0,0.175);box-shadow:0 6px 12px rgba(0,0,0,0.175);background-clip:padding-box}.dropdown-menu.pull-right{right:0;left:auto}.dropdown-menu .divider{height:1px;margin:-.2rem 0;overflow:hidden;background-color:rgba(0,30,60,0.075)}.dropdown-menu>li>a{display:block;padding:3px 20px;clear:both;font-weight:normal;line-height:1.6;color:#5e666c;white-space:nowrap}.dropdown-menu>li>a:hover,.dropdown-menu>li>a:focus{text-decoration:none;color:#313539;background-color:#f9fafb}.dropdown-menu>.active>a,.dropdown-menu>.active>a:hover,.dropdown-menu>.active>a:focus{color:#fff;text-decoration:none;outline:0;background-color:#0bb}.dropdown-menu>.disabled>a,.dropdown-menu>.disabled>a:hover,.dropdown-menu>.disabled>a:focus{color:#8b969e}.dropdown-menu>.disabled>a:hover,.dropdown-menu>.disabled>a:focus{text-decoration:none;background-color:transparent;background-image:none;filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);cursor:not-allowed}.open>.dropdown-menu{display:block}.open>a{outline:0}.dropdown-menu-right{left:auto;right:0}.dropdown-menu-left{left:0;right:auto}.dropdown-header{display:block;padding:3px 20px;font-size:.9285714286rem;line-height:1.6;color:#8b969e;white-space:nowrap}.dropdown-backdrop{position:fixed;left:0;right:0;bottom:0;top:0;z-index:990}.pull-right>.dropdown-menu{right:0;left:auto}.dropup .caret,.navbar-fixed-bottom .dropdown .caret{border-top:0;border-bottom:4px dashed;border-bottom:4px solid \\9 ;content:""}.dropup .dropdown-menu,.navbar-fixed-bottom .dropdown .dropdown-menu{top:auto;bottom:100%;margin-bottom:2px}@media (min-width: 960px){.navbar-right .dropdown-menu{right:0;left:auto}.navbar-right .dropdown-menu-left{left:0;right:auto}}.btn-group,.btn-group-vertical{position:relative;display:inline-block;vertical-align:middle}.btn-group>.btn,.btn-group-vertical>.btn{position:relative;float:left}.btn-group>.btn:hover,.btn-group>.btn:focus,.btn-group>.btn:active,.btn-group>.btn.active,.btn-group-vertical>.btn:hover,.btn-group-vertical>.btn:focus,.btn-group-vertical>.btn:active,.btn-group-vertical>.btn.active{z-index:2}.btn-group .btn+.btn,.btn-group .btn+.btn-group,.btn-group .btn-group+.btn,.btn-group .btn-group+.btn-group{margin-left:-1px}.btn-toolbar{margin-left:-5px}.btn-toolbar:before,.btn-toolbar:after{content:" ";display:table}.btn-toolbar:after{clear:both}.btn-toolbar .btn,.btn-toolbar .btn-group,.btn-toolbar .input-group{float:left}.btn-toolbar>.btn,.btn-toolbar>.btn-group,.btn-toolbar>.input-group{margin-left:5px}.btn-group>.btn:not(:first-child):not(:last-child):not(.dropdown-toggle){border-radius:0}.btn-group>.btn:first-child{margin-left:0}.btn-group>.btn:first-child:not(:last-child):not(.dropdown-toggle){border-bottom-right-radius:0;border-top-right-radius:0}.btn-group>.btn:last-child:not(:first-child),.btn-group>.dropdown-toggle:not(:first-child){border-bottom-left-radius:0;border-top-left-radius:0}.btn-group>.btn-group{float:left}.btn-group>.btn-group:not(:first-child):not(:last-child)>.btn{border-radius:0}.btn-group>.btn-group:first-child:not(:last-child)>.btn:last-child,.btn-group>.btn-group:first-child:not(:last-child)>.dropdown-toggle{border-bottom-right-radius:0;border-top-right-radius:0}.btn-group>.btn-group:last-child:not(:first-child)>.btn:first-child{border-bottom-left-radius:0;border-top-left-radius:0}.btn-group .dropdown-toggle:active,.btn-group.open .dropdown-toggle{outline:0}.btn-group>.btn+.dropdown-toggle{padding-left:8px;padding-right:8px}.btn-group>.btn-lg+.dropdown-toggle,.btn-group-lg.btn-group>.btn+.dropdown-toggle{padding-left:12px;padding-right:12px}.btn-group.open .dropdown-toggle.btn-link{-webkit-box-shadow:none;box-shadow:none}.btn .caret{margin-left:0}.btn-lg .caret,.btn-group-lg>.btn .caret{border-width:5px 5px 0;border-bottom-width:0}.dropup .btn-lg .caret,.dropup .btn-group-lg>.btn .caret{border-width:0 5px 5px}.btn-group-vertical>.btn,.btn-group-vertical>.btn-group,.btn-group-vertical>.btn-group>.btn{display:block;float:none;width:100%;max-width:100%}.btn-group-vertical>.btn-group:before,.btn-group-vertical>.btn-group:after{content:" ";display:table}.btn-group-vertical>.btn-group:after{clear:both}.btn-group-vertical>.btn-group>.btn{float:none}.btn-group-vertical>.btn+.btn,.btn-group-vertical>.btn+.btn-group,.btn-group-vertical>.btn-group+.btn,.btn-group-vertical>.btn-group+.btn-group{margin-top:-1px;margin-left:0}.btn-group-vertical>.btn:not(:first-child):not(:last-child){border-radius:0}.btn-group-vertical>.btn:first-child:not(:last-child){border-top-right-radius:4px;border-top-left-radius:4px;border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn:last-child:not(:first-child){border-top-right-radius:0;border-top-left-radius:0;border-bottom-right-radius:4px;border-bottom-left-radius:4px}.btn-group-vertical>.btn-group:not(:first-child):not(:last-child)>.btn{border-radius:0}.btn-group-vertical>.btn-group:first-child:not(:last-child)>.btn:last-child,.btn-group-vertical>.btn-group:first-child:not(:last-child)>.dropdown-toggle{border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn-group:last-child:not(:first-child)>.btn:first-child{border-top-right-radius:0;border-top-left-radius:0}.btn-group-justified{display:table;width:100%;table-layout:fixed;border-collapse:separate}.btn-group-justified>.btn,.btn-group-justified>.btn-group{float:none;display:table-cell;width:1%}.btn-group-justified>.btn-group .btn{width:100%}.btn-group-justified>.btn-group .dropdown-menu{left:auto}[data-toggle="buttons"]>.btn input[type="radio"],[data-toggle="buttons"]>.btn input[type="checkbox"],[data-toggle="buttons"]>.btn-group>.btn input[type="radio"],[data-toggle="buttons"]>.btn-group>.btn input[type="checkbox"]{position:absolute;clip:rect(0, 0, 0, 0);pointer-events:none}.input-group{position:relative;display:table;border-collapse:separate}.input-group[class*="col-"]{float:none;padding-left:0;padding-right:0}.input-group .form-control{position:relative;z-index:2;float:left;width:100%;margin-bottom:0}.input-group .form-control:focus{z-index:3}.input-group-addon,.input-group-btn,.input-group .form-control{display:table-cell}.input-group-addon:not(:first-child):not(:last-child),.input-group-btn:not(:first-child):not(:last-child),.input-group .form-control:not(:first-child):not(:last-child){border-radius:0}.input-group-addon,.input-group-btn{width:1%;white-space:nowrap;vertical-align:middle}.input-group-addon{padding:.6785714286rem 1.25rem;font-size:1rem;font-weight:normal;line-height:1;color:#484e53;text-align:center;background-color:#f0f2f4;border:1px solid transparent;border-radius:4px}.input-group-addon.input-sm,.input-group-sm>.input-group-addon,.input-group-sm>.input-group-btn>.input-group-addon.btn{padding:.4464285714rem .875rem;font-size:.9285714286rem;border-radius:4px}.input-group-addon.input-lg,.input-group-lg>.input-group-addon,.input-group-lg>.input-group-btn>.input-group-addon.btn{padding:1.2857142857rem 1.875rem;font-size:1.1428571429rem;border-radius:4px}.input-group-addon input[type="radio"],.input-group-addon input[type="checkbox"]{margin-top:0}.input-group .form-control:first-child,.input-group-addon:first-child,.input-group-btn:first-child>.btn,.input-group-btn:first-child>.btn-group>.btn,.input-group-btn:first-child>.dropdown-toggle,.input-group-btn:last-child>.btn:not(:last-child):not(.dropdown-toggle),.input-group-btn:last-child>.btn-group:not(:last-child)>.btn{border-bottom-right-radius:0;border-top-right-radius:0}.input-group-addon:first-child{border-right:0}.input-group .form-control:last-child,.input-group-addon:last-child,.input-group-btn:last-child>.btn,.input-group-btn:last-child>.btn-group>.btn,.input-group-btn:last-child>.dropdown-toggle,.input-group-btn:first-child>.btn:not(:first-child),.input-group-btn:first-child>.btn-group:not(:first-child)>.btn{border-bottom-left-radius:0;border-top-left-radius:0}.input-group-addon:last-child{border-left:0}.input-group-btn{position:relative;font-size:0;white-space:nowrap}.input-group-btn>.btn{position:relative}.input-group-btn>.btn+.btn{margin-left:-1px}.input-group-btn>.btn:hover,.input-group-btn>.btn:focus,.input-group-btn>.btn:active{z-index:2}.input-group-btn:first-child>.btn,.input-group-btn:first-child>.btn-group{margin-right:-1px}.input-group-btn:last-child>.btn,.input-group-btn:last-child>.btn-group{z-index:2;margin-left:-1px}.nav{margin-bottom:0;padding-left:0;list-style:none}.nav:before,.nav:after{content:" ";display:table}.nav:after{clear:both}.nav>li{position:relative;display:block}.nav>li>a{position:relative;display:block;padding:.6785714286rem .875rem}.nav>li>a:hover,.nav>li>a:focus{text-decoration:none;background-color:#f9fafb}.nav>li.disabled>a{color:#8b969e}.nav>li.disabled>a:hover,.nav>li.disabled>a:focus{color:#8b969e;text-decoration:none;background-color:transparent;cursor:not-allowed}.nav .open>a,.nav .open>a:hover,.nav .open>a:focus{background-color:#f9fafb;border-color:#0bb}.nav .nav-divider{height:1px;margin:-.2rem 0;overflow:hidden;background-color:#e5e5e5}.nav>li>a>img{max-width:none}.nav-tabs{border-bottom:1px solid rgba(0,30,60,0.075)}.nav-tabs>li{float:left;margin-bottom:-1px}.nav-tabs>li>a{margin-right:2px;line-height:1.6;border:1px solid transparent;border-radius:4px 4px 0 0}.nav-tabs>li>a:hover{border-color:#ff694b #ff694b rgba(0,30,60,0.075)}.nav-tabs>li.active>a,.nav-tabs>li.active>a:hover,.nav-tabs>li.active>a:focus{color:inherit;background-color:transparent;border:1px solid #ff694b;border-bottom-color:transparent;cursor:default}.nav-pills>li{float:left}.nav-pills>li>a{border-radius:1000px}.nav-pills>li+li{margin-left:2px}.nav-pills>li.active>a,.nav-pills>li.active>a:hover,.nav-pills>li.active>a:focus{color:#fff;background-color:#0bb}.nav-stacked>li{float:none}.nav-stacked>li+li{margin-top:2px;margin-left:0}.nav-justified,.nav-tabs.nav-justified{width:100%}.nav-justified>li,.nav-tabs.nav-justified>li{float:none}.nav-justified>li>a,.nav-tabs.nav-justified>li>a{text-align:center;margin-bottom:5px}.nav-justified>.dropdown .dropdown-menu{top:auto;left:auto}@media (min-width: 540px){.nav-justified>li,.nav-tabs.nav-justified>li{display:table-cell;width:1%}.nav-justified>li>a,.nav-tabs.nav-justified>li>a{margin-bottom:0}}.nav-tabs-justified,.nav-tabs.nav-justified{border-bottom:0}.nav-tabs-justified>li>a,.nav-tabs.nav-justified>li>a{margin-right:0;border-radius:4px}.nav-tabs-justified>.active>a,.nav-tabs.nav-justified>.active>a,.nav-tabs-justified>.active>a:hover,.nav-tabs.nav-justified>.active>a:hover,.nav-tabs-justified>.active>a:focus,.nav-tabs.nav-justified>.active>a:focus{border:1px solid #ddd}@media (min-width: 540px){.nav-tabs-justified>li>a,.nav-tabs.nav-justified>li>a{border-bottom:1px solid #ddd;border-radius:4px 4px 0 0}.nav-tabs-justified>.active>a,.nav-tabs.nav-justified>.active>a,.nav-tabs-justified>.active>a:hover,.nav-tabs.nav-justified>.active>a:hover,.nav-tabs-justified>.active>a:focus,.nav-tabs.nav-justified>.active>a:focus{border-bottom-color:#f9fafb}}.tab-content>.tab-pane{display:none}.tab-content>.active{display:block}.nav-tabs .dropdown-menu{margin-top:-1px;border-top-right-radius:0;border-top-left-radius:0}.breadcrumb{padding:1.2857142857rem 1.875rem;margin-bottom:1.6rem;list-style:none;background-color:#f9fafb;border-radius:4px}.breadcrumb>li{display:inline-block}.breadcrumb>li+li:before{content:"/\\A0";padding:0 5px;color:#8b969e}.breadcrumb>.active{color:#313539}.pagination{display:inline-block;padding-left:0;margin:1.6rem 0;border-radius:4px}.pagination>li{display:inline}.pagination>li>a,.pagination>li>span{position:relative;float:left;padding:.6785714286rem 1.25rem;line-height:1.6;text-decoration:none;color:#0bb;background-color:#fff;border:1px solid #ddd;margin-left:-1px}.pagination>li:first-child>a,.pagination>li:first-child>span{margin-left:0;border-bottom-left-radius:4px;border-top-left-radius:4px}.pagination>li:last-child>a,.pagination>li:last-child>span{border-bottom-right-radius:4px;border-top-right-radius:4px}.pagination>li>a:hover,.pagination>li>a:focus,.pagination>li>span:hover,.pagination>li>span:focus{z-index:2;color:#009595;background-color:#f7f7f8;border-color:#ddd}.pagination>.active>a,.pagination>.active>a:hover,.pagination>.active>a:focus,.pagination>.active>span,.pagination>.active>span:hover,.pagination>.active>span:focus{z-index:3;color:#fff;background-color:#0bb;border-color:#0bb;cursor:default}.pagination>.disabled>span,.pagination>.disabled>span:hover,.pagination>.disabled>span:focus,.pagination>.disabled>a,.pagination>.disabled>a:hover,.pagination>.disabled>a:focus{color:#bec5c9;background-color:#fff;border-color:#ddd;cursor:not-allowed}.pagination-lg>li>a,.pagination-lg>li>span{padding:1.2857142857rem 1.875rem;font-size:1.1428571429rem;line-height:1.6}.pagination-lg>li:first-child>a,.pagination-lg>li:first-child>span{border-bottom-left-radius:4px;border-top-left-radius:4px}.pagination-lg>li:last-child>a,.pagination-lg>li:last-child>span{border-bottom-right-radius:4px;border-top-right-radius:4px}.pagination-sm>li>a,.pagination-sm>li>span{padding:.4464285714rem .875rem;font-size:.9285714286rem;line-height:1.6}.pagination-sm>li:first-child>a,.pagination-sm>li:first-child>span{border-bottom-left-radius:4px;border-top-left-radius:4px}.pagination-sm>li:last-child>a,.pagination-sm>li:last-child>span{border-bottom-right-radius:4px;border-top-right-radius:4px}.pager{padding-left:0;margin:1.6rem 0;list-style:none;text-align:center}.pager:before,.pager:after{content:" ";display:table}.pager:after{clear:both}.pager li{display:inline}.pager li>a,.pager li>span{display:inline-block;padding:5px 14px;background-color:#fff;border:1px solid #ddd;border-radius:15px}.pager li>a:hover,.pager li>a:focus{text-decoration:none;background-color:#f7f7f8}.pager .next>a,.pager .next>span{float:right}.pager .previous>a,.pager .previous>span{float:left}.pager .disabled>a,.pager .disabled>a:hover,.pager .disabled>a:focus,.pager .disabled>span{color:#bec5c9;background-color:#fff;cursor:not-allowed}.label{display:inline;padding:.2em .6em .3em;font-size:75%;font-weight:bold;line-height:1;color:#8b969e;text-align:center;white-space:nowrap;vertical-align:baseline;border-radius:.25em}.label:empty{display:none}.btn .label{position:relative;top:-1px}a.label:hover,a.label:focus{color:#fff;text-decoration:none;cursor:pointer}.label-default{background-color:transparent}.label-default[href]:hover,.label-default[href]:focus{background-color:transparent}.label-primary{background-color:transparent}.label-primary[href]:hover,.label-primary[href]:focus{background-color:transparent}.label-success{background-color:transparent}.label-success[href]:hover,.label-success[href]:focus{background-color:transparent}.label-info{background-color:transparent}.label-info[href]:hover,.label-info[href]:focus{background-color:transparent}.label-warning{background-color:transparent}.label-warning[href]:hover,.label-warning[href]:focus{background-color:transparent}.label-danger{background-color:transparent}.label-danger[href]:hover,.label-danger[href]:focus{background-color:transparent}.badge{display:inline-block;min-width:10px;padding:3px 7px;font-size:.9285714286rem;font-weight:bold;color:#8b969e;line-height:1;vertical-align:middle;white-space:nowrap;text-align:center;background-color:#f0f2f4;border-radius:100px}.badge:empty{display:none}.btn .badge{position:relative;top:-1px}.btn-xs .badge,.btn-group-xs>.btn .badge,.btn-group-xs>.btn .badge{top:0;padding:1px 5px}.list-group-item.active>.badge,.nav-pills>.active>a>.badge{color:#0bb;background-color:#fff}.list-group-item>.badge{float:right}.list-group-item>.badge+.badge{margin-right:5px}.nav-pills>li>a>.badge{margin-left:3px}a.badge:hover,a.badge:focus{color:#fff;text-decoration:none;cursor:pointer}.thumbnail{display:block;padding:0;margin-bottom:1.6rem;line-height:1.6;background-color:#fff;border:1px solid transparent;border-radius:4px;-webkit-transition:border 0.2s ease-in-out;-o-transition:border 0.2s ease-in-out;transition:border 0.2s ease-in-out}.thumbnail>img,.thumbnail a>img{display:block;max-width:100%;height:auto;margin-left:auto;margin-right:auto}.thumbnail .caption{padding:20px 30px;color:#8b969e}a.thumbnail:hover,a.thumbnail:focus,a.thumbnail.active{border-color:#0bb}.alert{padding:1.2857142857rem 1.875rem;margin-bottom:1.6rem;border:1px solid transparent;border-radius:4px}.alert h4{margin-top:0;color:inherit}.alert .alert-link{font-weight:inherit}.alert>p,.alert>ul{margin-bottom:0}.alert>p+p{margin-top:5px}.alert-dismissable,.alert-dismissible{padding-right:1.2857142857rem 1.875rem20}.alert-dismissable .close,.alert-dismissible .close{position:relative;top:-2px;right:-21px;color:inherit}.alert-success{background-color:#f3faec;border-color:transparent;color:#48a71c}.alert-success hr{border-top-color:transparent}.alert-success .alert-link{color:#357b15}.alert-info{background-color:#edfafa;border-color:transparent;color:#0aa}.alert-info hr{border-top-color:transparent}.alert-info .alert-link{color:#077}.alert-warning{background-color:#fff6ec;border-color:transparent;color:#ff6316}.alert-warning hr{border-top-color:transparent}.alert-warning .alert-link{color:#e24b00}.alert-danger{background-color:#fff5f4;border-color:transparent;color:#ff694b}.alert-danger hr{border-top-color:transparent}.alert-danger .alert-link{color:#ff3f18}@-webkit-keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}@keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}.progress{overflow:hidden;height:1.6rem;margin-bottom:1.6rem;background-color:#f0f2f4;border-radius:100px;-webkit-box-shadow:inset 0 1px 2px rgba(0,0,0,0.1);box-shadow:inset 0 1px 2px rgba(0,0,0,0.1)}.progress-bar{float:left;width:0%;height:100%;font-size:.9285714286rem;line-height:1.6rem;color:#8b969e;text-align:center;background-color:#0bb;-webkit-box-shadow:inset 0 -1px 0 rgba(0,0,0,0.15);box-shadow:inset 0 -1px 0 rgba(0,0,0,0.15);-webkit-transition:width 0.6s ease;-o-transition:width 0.6s ease;transition:width 0.6s ease}.progress-striped .progress-bar,.progress-bar-striped{background-image:-webkit-linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent);background-image:-o-linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent);background-image:linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent);background-size:40px 40px}.progress.active .progress-bar,.progress-bar.active{-webkit-animation:progress-bar-stripes 2s linear infinite;-o-animation:progress-bar-stripes 2s linear infinite;animation:progress-bar-stripes 2s linear infinite}.progress-bar-success{background-color:#7ec631}.progress-striped .progress-bar-success{background-image:-webkit-linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent);background-image:-o-linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent);background-image:linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent)}.progress-bar-info{background-color:#0bb}.progress-striped .progress-bar-info{background-image:-webkit-linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent);background-image:-o-linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent);background-image:linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent)}.progress-bar-warning{background-color:#ff9b26}.progress-striped .progress-bar-warning{background-image:-webkit-linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent);background-image:-o-linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent);background-image:linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent)}.progress-bar-danger{background-color:#ff694b}.progress-striped .progress-bar-danger{background-image:-webkit-linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent);background-image:-o-linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent);background-image:linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent)}.list-group{margin-bottom:20px;padding-left:0}.list-group-item{position:relative;display:block;padding:10px 15px;margin-bottom:-1px;background-color:#fff;border:1px solid rgba(0,30,60,0.075)}.list-group-item:first-child{border-top-right-radius:4px;border-top-left-radius:4px}.list-group-item:last-child{margin-bottom:0;border-bottom-right-radius:4px;border-bottom-left-radius:4px}a.list-group-item,button.list-group-item{color:#5e666c}a.list-group-item .list-group-item-heading,button.list-group-item .list-group-item-heading{color:#313539}a.list-group-item:hover,a.list-group-item:focus,button.list-group-item:hover,button.list-group-item:focus{text-decoration:none;color:#313539;background-color:#f9fafb}button.list-group-item{width:100%;text-align:left}.list-group-item.disabled,.list-group-item.disabled:hover,.list-group-item.disabled:focus{background-color:#f9fafb;color:#8b969e;cursor:not-allowed}.list-group-item.disabled .list-group-item-heading,.list-group-item.disabled:hover .list-group-item-heading,.list-group-item.disabled:focus .list-group-item-heading{color:inherit}.list-group-item.disabled .list-group-item-text,.list-group-item.disabled:hover .list-group-item-text,.list-group-item.disabled:focus .list-group-item-text{color:#8b969e}.list-group-item.active,.list-group-item.active:hover,.list-group-item.active:focus{z-index:2;color:#fff;background-color:#0bb;border-color:rgba(0,30,60,0.03)}.list-group-item.active .list-group-item-heading,.list-group-item.active .list-group-item-heading>small,.list-group-item.active .list-group-item-heading>.small,.list-group-item.active:hover .list-group-item-heading,.list-group-item.active:hover .list-group-item-heading>small,.list-group-item.active:hover .list-group-item-heading>.small,.list-group-item.active:focus .list-group-item-heading,.list-group-item.active:focus .list-group-item-heading>small,.list-group-item.active:focus .list-group-item-heading>.small{color:inherit}.list-group-item.active .list-group-item-text,.list-group-item.active:hover .list-group-item-text,.list-group-item.active:focus .list-group-item-text{color:#fff}.list-group-item-success{color:#48a71c;background-color:#f3faec}a.list-group-item-success,button.list-group-item-success{color:#48a71c}a.list-group-item-success .list-group-item-heading,button.list-group-item-success .list-group-item-heading{color:inherit}a.list-group-item-success:hover,a.list-group-item-success:focus,button.list-group-item-success:hover,button.list-group-item-success:focus{color:#48a71c;background-color:#e6f5d8}a.list-group-item-success.active,a.list-group-item-success.active:hover,a.list-group-item-success.active:focus,button.list-group-item-success.active,button.list-group-item-success.active:hover,button.list-group-item-success.active:focus{color:#fff;background-color:#48a71c;border-color:#48a71c}.list-group-item-info{color:#0aa;background-color:#edfafa}a.list-group-item-info,button.list-group-item-info{color:#0aa}a.list-group-item-info .list-group-item-heading,button.list-group-item-info .list-group-item-heading{color:inherit}a.list-group-item-info:hover,a.list-group-item-info:focus,button.list-group-item-info:hover,button.list-group-item-info:focus{color:#0aa;background-color:#d9f4f4}a.list-group-item-info.active,a.list-group-item-info.active:hover,a.list-group-item-info.active:focus,button.list-group-item-info.active,button.list-group-item-info.active:hover,button.list-group-item-info.active:focus{color:#fff;background-color:#0aa;border-color:#0aa}.list-group-item-warning{color:#ff6316;background-color:#fff6ec}a.list-group-item-warning,button.list-group-item-warning{color:#ff6316}a.list-group-item-warning .list-group-item-heading,button.list-group-item-warning .list-group-item-heading{color:inherit}a.list-group-item-warning:hover,a.list-group-item-warning:focus,button.list-group-item-warning:hover,button.list-group-item-warning:focus{color:#ff6316;background-color:#ffead3}a.list-group-item-warning.active,a.list-group-item-warning.active:hover,a.list-group-item-warning.active:focus,button.list-group-item-warning.active,button.list-group-item-warning.active:hover,button.list-group-item-warning.active:focus{color:#fff;background-color:#ff6316;border-color:#ff6316}.list-group-item-danger{color:#ff694b;background-color:#fff5f4}a.list-group-item-danger,button.list-group-item-danger{color:#ff694b}a.list-group-item-danger .list-group-item-heading,button.list-group-item-danger .list-group-item-heading{color:inherit}a.list-group-item-danger:hover,a.list-group-item-danger:focus,button.list-group-item-danger:hover,button.list-group-item-danger:focus{color:#ff694b;background-color:#ffdedb}a.list-group-item-danger.active,a.list-group-item-danger.active:hover,a.list-group-item-danger.active:focus,button.list-group-item-danger.active,button.list-group-item-danger.active:hover,button.list-group-item-danger.active:focus{color:#fff;background-color:#ff694b;border-color:#ff694b}.list-group-item-heading{margin-top:0;margin-bottom:5px}.list-group-item-text{margin-bottom:0;line-height:1.3}.panel{margin-bottom:1.6rem;background-color:#fff;border:1px solid transparent;border-radius:4px;-webkit-box-shadow:0 1px 1px rgba(0,0,0,0.05);box-shadow:0 1px 1px rgba(0,0,0,0.05)}.panel-body{padding:15px}.panel-body:before,.panel-body:after{content:" ";display:table}.panel-body:after{clear:both}.panel-heading{padding:10px 15px;border-bottom:1px solid transparent;border-top-right-radius:3px;border-top-left-radius:3px}.panel-heading>.dropdown .dropdown-toggle{color:inherit}.panel-title{margin-top:0;margin-bottom:0;font-size:2rem;color:inherit}.panel-title>a,.panel-title>small,.panel-title>.small,.panel-title>small>a,.panel-title>.small>a{color:inherit}.panel-footer{padding:10px 15px;background-color:transparent;border-top:1px solid transparent;border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel>.list-group,.panel>.panel-collapse>.list-group{margin-bottom:0}.panel>.list-group .list-group-item,.panel>.panel-collapse>.list-group .list-group-item{border-width:1px 0;border-radius:0}.panel>.list-group:first-child .list-group-item:first-child,.panel>.panel-collapse>.list-group:first-child .list-group-item:first-child{border-top:0;border-top-right-radius:3px;border-top-left-radius:3px}.panel>.list-group:last-child .list-group-item:last-child,.panel>.panel-collapse>.list-group:last-child .list-group-item:last-child{border-bottom:0;border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel>.panel-heading+.panel-collapse>.list-group .list-group-item:first-child{border-top-right-radius:0;border-top-left-radius:0}.panel-heading+.list-group .list-group-item:first-child{border-top-width:0}.list-group+.panel-footer{border-top-width:0}.panel>.table,.panel>.table-responsive>.table,.panel>.panel-collapse>.table{margin-bottom:0}.panel>.table caption,.panel>.table-responsive>.table caption,.panel>.panel-collapse>.table caption{padding-left:15px;padding-right:15px}.panel>.table:first-child,.panel>.table-responsive:first-child>.table:first-child{border-top-right-radius:3px;border-top-left-radius:3px}.panel>.table:first-child>thead:first-child>tr:first-child,.panel>.table:first-child>tbody:first-child>tr:first-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child{border-top-left-radius:3px;border-top-right-radius:3px}.panel>.table:first-child>thead:first-child>tr:first-child td:first-child,.panel>.table:first-child>thead:first-child>tr:first-child th:first-child,.panel>.table:first-child>tbody:first-child>tr:first-child td:first-child,.panel>.table:first-child>tbody:first-child>tr:first-child th:first-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child td:first-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child th:first-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child td:first-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child th:first-child{border-top-left-radius:3px}.panel>.table:first-child>thead:first-child>tr:first-child td:last-child,.panel>.table:first-child>thead:first-child>tr:first-child th:last-child,.panel>.table:first-child>tbody:first-child>tr:first-child td:last-child,.panel>.table:first-child>tbody:first-child>tr:first-child th:last-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child td:last-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child th:last-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child td:last-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child th:last-child{border-top-right-radius:3px}.panel>.table:last-child,.panel>.table-responsive:last-child>.table:last-child{border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel>.table:last-child>tbody:last-child>tr:last-child,.panel>.table:last-child>tfoot:last-child>tr:last-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child{border-bottom-left-radius:3px;border-bottom-right-radius:3px}.panel>.table:last-child>tbody:last-child>tr:last-child td:first-child,.panel>.table:last-child>tbody:last-child>tr:last-child th:first-child,.panel>.table:last-child>tfoot:last-child>tr:last-child td:first-child,.panel>.table:last-child>tfoot:last-child>tr:last-child th:first-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child td:first-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child th:first-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child td:first-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child th:first-child{border-bottom-left-radius:3px}.panel>.table:last-child>tbody:last-child>tr:last-child td:last-child,.panel>.table:last-child>tbody:last-child>tr:last-child th:last-child,.panel>.table:last-child>tfoot:last-child>tr:last-child td:last-child,.panel>.table:last-child>tfoot:last-child>tr:last-child th:last-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child td:last-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child th:last-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child td:last-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child th:last-child{border-bottom-right-radius:3px}.panel>.panel-body+.table,.panel>.panel-body+.table-responsive,.panel>.table+.panel-body,.panel>.table-responsive+.panel-body{border-top:1px solid rgba(0,30,60,0.075)}.panel>.table>tbody:first-child>tr:first-child th,.panel>.table>tbody:first-child>tr:first-child td{border-top:0}.panel>.table-bordered,.panel>.table-responsive>.table-bordered{border:0}.panel>.table-bordered>thead>tr>th:first-child,.panel>.table-bordered>thead>tr>td:first-child,.panel>.table-bordered>tbody>tr>th:first-child,.panel>.table-bordered>tbody>tr>td:first-child,.panel>.table-bordered>tfoot>tr>th:first-child,.panel>.table-bordered>tfoot>tr>td:first-child,.panel>.table-responsive>.table-bordered>thead>tr>th:first-child,.panel>.table-responsive>.table-bordered>thead>tr>td:first-child,.panel>.table-responsive>.table-bordered>tbody>tr>th:first-child,.panel>.table-responsive>.table-bordered>tbody>tr>td:first-child,.panel>.table-responsive>.table-bordered>tfoot>tr>th:first-child,.panel>.table-responsive>.table-bordered>tfoot>tr>td:first-child{border-left:0}.panel>.table-bordered>thead>tr>th:last-child,.panel>.table-bordered>thead>tr>td:last-child,.panel>.table-bordered>tbody>tr>th:last-child,.panel>.table-bordered>tbody>tr>td:last-child,.panel>.table-bordered>tfoot>tr>th:last-child,.panel>.table-bordered>tfoot>tr>td:last-child,.panel>.table-responsive>.table-bordered>thead>tr>th:last-child,.panel>.table-responsive>.table-bordered>thead>tr>td:last-child,.panel>.table-responsive>.table-bordered>tbody>tr>th:last-child,.panel>.table-responsive>.table-bordered>tbody>tr>td:last-child,.panel>.table-responsive>.table-bordered>tfoot>tr>th:last-child,.panel>.table-responsive>.table-bordered>tfoot>tr>td:last-child{border-right:0}.panel>.table-bordered>thead>tr:first-child>td,.panel>.table-bordered>thead>tr:first-child>th,.panel>.table-bordered>tbody>tr:first-child>td,.panel>.table-bordered>tbody>tr:first-child>th,.panel>.table-responsive>.table-bordered>thead>tr:first-child>td,.panel>.table-responsive>.table-bordered>thead>tr:first-child>th,.panel>.table-responsive>.table-bordered>tbody>tr:first-child>td,.panel>.table-responsive>.table-bordered>tbody>tr:first-child>th{border-bottom:0}.panel>.table-bordered>tbody>tr:last-child>td,.panel>.table-bordered>tbody>tr:last-child>th,.panel>.table-bordered>tfoot>tr:last-child>td,.panel>.table-bordered>tfoot>tr:last-child>th,.panel>.table-responsive>.table-bordered>tbody>tr:last-child>td,.panel>.table-responsive>.table-bordered>tbody>tr:last-child>th,.panel>.table-responsive>.table-bordered>tfoot>tr:last-child>td,.panel>.table-responsive>.table-bordered>tfoot>tr:last-child>th{border-bottom:0}.panel>.table-responsive{border:0;margin-bottom:0}.panel-group{margin-bottom:1.6rem}.panel-group .panel{margin-bottom:0;border-radius:4px}.panel-group .panel+.panel{margin-top:5px}.panel-group .panel-heading{border-bottom:0}.panel-group .panel-heading+.panel-collapse>.panel-body,.panel-group .panel-heading+.panel-collapse>.list-group{border-top:1px solid transparent}.panel-group .panel-footer{border-top:0}.panel-group .panel-footer+.panel-collapse .panel-body{border-bottom:1px solid transparent}.panel-default{border-color:#ddd}.panel-default>.panel-heading{color:#5e666c;background-color:transparent;border-color:#ddd}.panel-default>.panel-heading+.panel-collapse>.panel-body{border-top-color:#ddd}.panel-default>.panel-heading .badge{color:transparent;background-color:#5e666c}.panel-default>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#ddd}.panel-primary{border-color:#0bb}.panel-primary>.panel-heading{color:#fff;background-color:#0bb;border-color:#0bb}.panel-primary>.panel-heading+.panel-collapse>.panel-body{border-top-color:#0bb}.panel-primary>.panel-heading .badge{color:#0bb;background-color:#fff}.panel-primary>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#0bb}.panel-success{border-color:transparent}.panel-success>.panel-heading{color:#48a71c;background-color:#f3faec;border-color:transparent}.panel-success>.panel-heading+.panel-collapse>.panel-body{border-top-color:transparent}.panel-success>.panel-heading .badge{color:#f3faec;background-color:#48a71c}.panel-success>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:transparent}.panel-info{border-color:transparent}.panel-info>.panel-heading{color:#0aa;background-color:#edfafa;border-color:transparent}.panel-info>.panel-heading+.panel-collapse>.panel-body{border-top-color:transparent}.panel-info>.panel-heading .badge{color:#edfafa;background-color:#0aa}.panel-info>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:transparent}.panel-warning{border-color:transparent}.panel-warning>.panel-heading{color:#ff6316;background-color:#fff6ec;border-color:transparent}.panel-warning>.panel-heading+.panel-collapse>.panel-body{border-top-color:transparent}.panel-warning>.panel-heading .badge{color:#fff6ec;background-color:#ff6316}.panel-warning>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:transparent}.panel-danger{border-color:transparent}.panel-danger>.panel-heading{color:#ff694b;background-color:#fff5f4;border-color:transparent}.panel-danger>.panel-heading+.panel-collapse>.panel-body{border-top-color:transparent}.panel-danger>.panel-heading .badge{color:#fff5f4;background-color:#ff694b}.panel-danger>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:transparent}.well{min-height:20px;padding:19px;margin-bottom:20px;background-color:#f0f2f4;border:1px solid transparent;border-radius:4px;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.05);box-shadow:inset 0 1px 1px rgba(0,0,0,0.05)}.well blockquote{border-color:#ddd;border-color:rgba(0,0,0,0.15)}.well-lg{padding:24px;border-radius:4px}.well-sm{padding:9px;border-radius:4px}.close{float:right;font-size:1.5rem;font-weight:bold;line-height:1;color:#000;text-shadow:0 1px 0 #fff;opacity:.2;filter:alpha(opacity=20)}.close:hover,.close:focus{color:#000;text-decoration:none;cursor:pointer;opacity:.5;filter:alpha(opacity=50)}button.close{padding:0;cursor:pointer;background:transparent;border:0;-webkit-appearance:none}.modal-open{overflow:hidden}.modal{display:none;overflow:hidden;position:fixed;top:0;right:0;bottom:0;left:0;z-index:1050;-webkit-overflow-scrolling:touch;outline:0}.modal.fade .modal-dialog{-webkit-transform:translate(0, -25%);-ms-transform:translate(0, -25%);-o-transform:translate(0, -25%);transform:translate(0, -25%);-webkit-transition:-webkit-transform 0.3s ease-out;-moz-transition:-moz-transform 0.3s ease-out;-o-transition:-o-transform 0.3s ease-out;transition:transform 0.3s ease-out}.modal.in .modal-dialog{-webkit-transform:translate(0, 0);-ms-transform:translate(0, 0);-o-transform:translate(0, 0);transform:translate(0, 0)}.modal-open .modal{overflow-x:hidden;overflow-y:auto}.modal-dialog{position:relative;width:auto;margin:10px}.modal-content{position:relative;background-color:transparent;border:1px solid transparent;border:1px solid transparent;border-radius:4px;-webkit-box-shadow:0 3px 9px rgba(0,0,0,0.5);box-shadow:0 3px 9px rgba(0,0,0,0.5);background-clip:padding-box;outline:0}.modal-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1040;background-color:#f0f2f4}.modal-backdrop.fade{opacity:0;filter:alpha(opacity=0)}.modal-backdrop.in{opacity:.75;filter:alpha(opacity=75)}.modal-header{padding:0;border-bottom:1px solid transparent}.modal-header:before,.modal-header:after{content:" ";display:table}.modal-header:after{clear:both}.modal-header .close{margin-top:-2px}.modal-title{margin:0;line-height:1.6}.modal-body{position:relative;padding:0}.modal-footer{padding:0;text-align:right;border-top:1px solid transparent}.modal-footer:before,.modal-footer:after{content:" ";display:table}.modal-footer:after{clear:both}.modal-footer .btn+.btn{margin-left:5px;margin-bottom:0}.modal-footer .btn-group .btn+.btn{margin-left:-1px}.modal-footer .btn-block+.btn-block{margin-left:0}.modal-scrollbar-measure{position:absolute;top:-9999px;width:50px;height:50px;overflow:scroll}@media (min-width: 540px){.modal-dialog{width:768px;margin:30px auto}.modal-content{-webkit-box-shadow:0 5px 15px rgba(0,0,0,0.5);box-shadow:0 5px 15px rgba(0,0,0,0.5)}.modal-sm{width:400px}}@media (min-width: 768px){.modal-lg{width:960px}}.tooltip{position:absolute;z-index:1070;display:block;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Oxygen,Ubuntu,Cantarell,"Fira Sans","Droid Sans","Helvetica Neue",Helvetica,Arial,sans-serif;font-style:normal;font-weight:normal;letter-spacing:normal;line-break:auto;line-height:1.6;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;white-space:normal;word-break:normal;word-spacing:normal;word-wrap:normal;font-size:.9285714286rem;opacity:0;filter:alpha(opacity=0)}.tooltip.in{opacity:1;filter:alpha(opacity=100)}.tooltip.top{margin-top:-3px;padding:5px 0}.tooltip.right{margin-left:3px;padding:0 5px}.tooltip.bottom{margin-top:3px;padding:5px 0}.tooltip.left{margin-left:-3px;padding:0 5px}.tooltip-inner{max-width:300px;padding:3px 8px;color:#fff;text-align:center;background-color:#007699;border-radius:4px}.tooltip-arrow{position:absolute;width:0;height:0;border-color:transparent;border-style:solid}.tooltip.top .tooltip-arrow{bottom:0;left:50%;margin-left:-5px;border-width:5px 5px 0;border-top-color:#007699}.tooltip.top-left .tooltip-arrow{bottom:0;right:5px;margin-bottom:-5px;border-width:5px 5px 0;border-top-color:#007699}.tooltip.top-right .tooltip-arrow{bottom:0;left:5px;margin-bottom:-5px;border-width:5px 5px 0;border-top-color:#007699}.tooltip.right .tooltip-arrow{top:50%;left:0;margin-top:-5px;border-width:5px 5px 5px 0;border-right-color:#007699}.tooltip.left .tooltip-arrow{top:50%;right:0;margin-top:-5px;border-width:5px 0 5px 5px;border-left-color:#007699}.tooltip.bottom .tooltip-arrow{top:0;left:50%;margin-left:-5px;border-width:0 5px 5px;border-bottom-color:#007699}.tooltip.bottom-left .tooltip-arrow{top:0;right:5px;margin-top:-5px;border-width:0 5px 5px;border-bottom-color:#007699}.tooltip.bottom-right .tooltip-arrow{top:0;left:5px;margin-top:-5px;border-width:0 5px 5px;border-bottom-color:#007699}.popover{position:absolute;top:0;left:0;z-index:1060;display:none;max-width:400px;padding:1px;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Oxygen,Ubuntu,Cantarell,"Fira Sans","Droid Sans","Helvetica Neue",Helvetica,Arial,sans-serif;font-style:normal;font-weight:normal;letter-spacing:normal;line-break:auto;line-height:1.6;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;white-space:normal;word-break:normal;word-spacing:normal;word-wrap:normal;font-size:1rem;background-color:#ff694b;background-clip:padding-box;border:1px solid transparent;border:1px solid transparent;border-radius:4px;-webkit-box-shadow:0 5px 10px rgba(0,0,0,0.2);box-shadow:0 5px 10px rgba(0,0,0,0.2)}.popover.top{margin-top:-10px}.popover.right{margin-left:10px}.popover.bottom{margin-top:10px}.popover.left{margin-left:-10px}.popover-title{margin:0;padding:8px 14px;font-size:1rem;background-color:transparent;border-bottom:1px solid transparent;border-radius:3px 3px 0 0}.popover-content{padding:9px 14px}.popover>.arrow,.popover>.arrow:after{position:absolute;display:block;width:0;height:0;border-color:transparent;border-style:solid}.popover>.arrow{border-width:0}.popover>.arrow:after{border-width:10px;content:""}.popover.top>.arrow{left:50%;margin-left:0;border-bottom-width:0;border-top-color:transparent;border-top-color:transparent;bottom:0}.popover.top>.arrow:after{content:" ";bottom:1px;margin-left:-10px;border-bottom-width:0;border-top-color:#ff694b}.popover.right>.arrow{top:50%;left:0;margin-top:0;border-left-width:0;border-right-color:transparent;border-right-color:transparent}.popover.right>.arrow:after{content:" ";left:1px;bottom:-10px;border-left-width:0;border-right-color:#ff694b}.popover.bottom>.arrow{left:50%;margin-left:0;border-top-width:0;border-bottom-color:transparent;border-bottom-color:transparent;top:0}.popover.bottom>.arrow:after{content:" ";top:1px;margin-left:-10px;border-top-width:0;border-bottom-color:#ff694b}.popover.left>.arrow{top:50%;right:0;margin-top:0;border-right-width:0;border-left-color:transparent;border-left-color:transparent}.popover.left>.arrow:after{content:" ";right:1px;border-right-width:0;border-left-color:#ff694b;bottom:-10px}.carousel{position:relative}.carousel-inner{position:relative;overflow:hidden;width:100%}.carousel-inner>.item{display:none;position:relative;-webkit-transition:0.6s ease-in-out left;-o-transition:0.6s ease-in-out left;transition:0.6s ease-in-out left}.carousel-inner>.item>img,.carousel-inner>.item>a>img{display:block;max-width:100%;height:auto;line-height:1}@media all and (transform-3d), (-webkit-transform-3d){.carousel-inner>.item{-webkit-transition:-webkit-transform 0.6s ease-in-out;-moz-transition:-moz-transform 0.6s ease-in-out;-o-transition:-o-transform 0.6s ease-in-out;transition:transform 0.6s ease-in-out;-webkit-backface-visibility:hidden;-moz-backface-visibility:hidden;backface-visibility:hidden;-webkit-perspective:1000px;-moz-perspective:1000px;perspective:1000px}.carousel-inner>.item.next,.carousel-inner>.item.active.right{-webkit-transform:translate3d(100%, 0, 0);transform:translate3d(100%, 0, 0);left:0}.carousel-inner>.item.prev,.carousel-inner>.item.active.left{-webkit-transform:translate3d(-100%, 0, 0);transform:translate3d(-100%, 0, 0);left:0}.carousel-inner>.item.next.left,.carousel-inner>.item.prev.right,.carousel-inner>.item.active{-webkit-transform:translate3d(0, 0, 0);transform:translate3d(0, 0, 0);left:0}}.carousel-inner>.active,.carousel-inner>.next,.carousel-inner>.prev{display:block}.carousel-inner>.active{left:0}.carousel-inner>.next,.carousel-inner>.prev{position:absolute;top:0;width:100%}.carousel-inner>.next{left:100%}.carousel-inner>.prev{left:-100%}.carousel-inner>.next.left,.carousel-inner>.prev.right{left:0}.carousel-inner>.active.left{left:-100%}.carousel-inner>.active.right{left:100%}.carousel-control{position:absolute;top:0;left:0;bottom:0;width:120px;opacity:1;filter:alpha(opacity=100);font-size:20px;color:#fff;text-align:center;text-shadow:none;background-color:transparent}.carousel-control.left{background-image:-webkit-linear-gradient(left, rgba(0,0,0,0.5) 0%, rgba(0,0,0,0.0001) 100%);background-image:-o-linear-gradient(left, rgba(0,0,0,0.5) 0%, rgba(0,0,0,0.0001) 100%);background-image:linear-gradient(to right, rgba(0,0,0,0.5) 0%, rgba(0,0,0,0.0001) 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr=\'#80000000\', endColorstr=\'#00000000\', GradientType=1)}.carousel-control.right{left:auto;right:0;background-image:-webkit-linear-gradient(left, rgba(0,0,0,0.0001) 0%, rgba(0,0,0,0.5) 100%);background-image:-o-linear-gradient(left, rgba(0,0,0,0.0001) 0%, rgba(0,0,0,0.5) 100%);background-image:linear-gradient(to right, rgba(0,0,0,0.0001) 0%, rgba(0,0,0,0.5) 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr=\'#00000000\', endColorstr=\'#80000000\', GradientType=1)}.carousel-control:hover,.carousel-control:focus{outline:0;color:#fff;text-decoration:none;opacity:.9;filter:alpha(opacity=90)}.carousel-control .icon-prev,.carousel-control .icon-next,.carousel-control .glyphicon-chevron-left,.carousel-control .glyphicon-chevron-right{position:absolute;top:50%;margin-top:-10px;z-index:5;display:inline-block}.carousel-control .icon-prev,.carousel-control .glyphicon-chevron-left{left:50%;margin-left:-10px}.carousel-control .icon-next,.carousel-control .glyphicon-chevron-right{right:50%;margin-right:-10px}.carousel-control .icon-prev,.carousel-control .icon-next{width:20px;height:20px;line-height:1;font-family:serif}.carousel-control .icon-prev:before{content:\'\\2039\'}.carousel-control .icon-next:before{content:\'\\203A\'}.carousel-indicators{position:absolute;bottom:10px;left:50%;z-index:15;width:60%;margin-left:-30%;padding-left:0;list-style:none;text-align:center}.carousel-indicators li{display:inline-block;width:10px;height:10px;margin:1px;text-indent:-999px;border:1px solid transparent;border-radius:10px;cursor:pointer;background-color:#000 \\9;background-color:transparent}.carousel-indicators .active{margin:0;width:12px;height:12px;background-color:#fff}.carousel-caption{position:absolute;left:15%;right:15%;bottom:20px;z-index:10;padding-top:20px;padding-bottom:20px;color:#fff;text-align:center;text-shadow:none}.carousel-caption .btn{text-shadow:none}@media screen and (min-width: 540px){.carousel-control .glyphicon-chevron-left,.carousel-control .glyphicon-chevron-right,.carousel-control .icon-prev,.carousel-control .icon-next{width:30px;height:30px;margin-top:-10px;font-size:30px}.carousel-control .glyphicon-chevron-left,.carousel-control .icon-prev{margin-left:-10px}.carousel-control .glyphicon-chevron-right,.carousel-control .icon-next{margin-right:-10px}.carousel-caption{left:20%;right:20%;padding-bottom:30px}.carousel-indicators{bottom:20px}}.clearfix:before,.clearfix:after{content:" ";display:table}.clearfix:after{clear:both}.center-block{display:block;margin-left:auto;margin-right:auto}.pull-right{float:right !important}.pull-left{float:left !important}.hide{display:none !important}.show{display:block !important}.invisible{visibility:hidden}.text-hide{font:0/0 a;color:transparent;text-shadow:none;background-color:transparent;border:0}.hidden{display:none !important}.affix{position:fixed}@font-face{font-family:"arrows";font-weight:normal;font-style:normal;src:url('+r(n(213))+') format("woff")}[class*="arrow-"]:not(.arrow-before):after,[class*="arrow-"].arrow-before:before{font-family:"arrows";text-transform:none;font-style:normal;font-weight:normal;line-height:.5}.arrow-large:not(.arrow-before):after,.arrow-large.arrow-before:before{text-transform:uppercase}.arrow-up:not(.arrow-before):after,.arrow-up.arrow-before:before{content:" a "}.arrow-right:not(.arrow-before):after,.arrow-right.arrow-before:before{content:" b "}.arrow-down:not(.arrow-before):after,.arrow-down.arrow-before:before{content:" c "}.arrow-left:not(.arrow-before):after,.arrow-left.arrow-before:before{content:" d "}.arrow-close:not(.arrow-before):after,.arrow-close.arrow-before:before{content:" e "}.arrow-check:not(.arrow-before):after,.arrow-check.arrow-before:before{content:" f "}@font-face{font-family:"entypo";font-weight:normal;font-style:normal;src:url('+r(n(214))+') format("woff")}[data-icon]{width:24px;height:10px;display:inline-block;vertical-align:middle}[data-icon]:before{display:block;position:relative;margin-top:-1px;top:-5px;speak:none;font-family:"entypo";font-style:normal;font-weight:normal;font-variant:normal;font-size:18px;line-height:1;text-align:center;text-transform:none;text-decoration:inherit}[data-icon].md:before{font-size:20px}[data-icon].lg{width:32px}[data-icon].lg:before{font-size:32px;top:-11px}[data-icon="note"]:before{content:"\\E800"}[data-icon="logo-db"]:before{content:"\\E8DE"}[data-icon="music"]:before{content:"\\E802"}[data-icon="search"]:before{content:"\\E803"}[data-icon="flashlight"]:before{content:"\\E804"}[data-icon="mail"]:before{content:"\\E805"}[data-icon="heart"]:before{content:"\\E80D"}[data-icon="heart-empty"]:before{content:"\\E80F"}[data-icon="star"]:before{content:"\\E810"}[data-icon="star-empty"]:before{content:"\\E813"}[data-icon="user"]:before{content:"\\E814"}[data-icon="users"]:before{content:"\\E817"}[data-icon="user-add"]:before{content:"\\E819"}[data-icon="video"]:before{content:"\\E81A"}[data-icon="picture"]:before{content:"\\E81D"}[data-icon="camera"]:before{content:"\\1F4F7"}[data-icon="layout"]:before{content:"\\E821"}[data-icon="menu"]:before{content:"\\E823"}[data-icon="check"]:before{content:"\\E824"}[data-icon="close"]:before{content:"\\E826"}[data-icon="cancel"]:before{content:"\\E826"}[data-icon="cancel-circled"]:before{content:"\\E806"}[data-icon="cancel-squared"]:before{content:"\\E808"}[data-icon="plus"]:before{content:"+"}[data-icon="plus-circled"]:before{content:"\\E809"}[data-icon="plus-squared"]:before{content:"\\E80A"}[data-icon="minus"]:before{content:"\\2212"}[data-icon="minus-circled"]:before{content:"\\E80E"}[data-icon="minus-squared"]:before{content:"\\E80C"}[data-icon="help"]:before{content:"\\E811"}[data-icon="help-circled"]:before{content:"\\E812"}[data-icon="info"]:before{content:"\\E815"}[data-icon="info-circled"]:before{content:"\\E816"}[data-icon="back"]:before{content:"\\E818"}[data-icon="home"]:before{content:"\\E81B"}[data-icon="link"]:before{content:"\\E81C"}[data-icon="attach"]:before{content:"\\E81F"}[data-icon="lock"]:before{content:"\\1F512"}[data-icon="lock-open"]:before{content:"\\E822"}[data-icon="eye"]:before{content:"\\E825"}[data-icon="tag"]:before{content:"\\E827"}[data-icon="bookmark"]:before{content:"\\1F516"}[data-icon="bookmarks"]:before{content:"\\E837"}[data-icon="flag"]:before{content:"\\E838"}[data-icon="thumbs-up"]:before{content:"\\E840"}[data-icon="thumbs-down"]:before{content:"\\E849"}[data-icon="download"]:before{content:"\\E85D"}[data-icon="upload"]:before{content:"\\E851"}[data-icon="upload-cloud"]:before{content:"\\E86B"}[data-icon="reply"]:before{content:"\\E86C"}[data-icon="reply-all"]:before{content:"\\E87B"}[data-icon="forward"]:before{content:"\\E87C"}[data-icon="quote"]:before{content:"\\E889"}[data-icon="code"]:before{content:"\\E88A"}[data-icon="export"]:before{content:"\\E899"}[data-icon="pencil"]:before{content:"\\270F"}[data-icon="feather"]:before{content:"\\E8A5"}[data-icon="print"]:before{content:"\\E8A8"}[data-icon="retweet"]:before{content:"\\E8A9"}[data-icon="keyboard"]:before{content:"\\2328"}[data-icon="comment"]:before{content:"\\E8AB"}[data-icon="chat"]:before{content:"\\E829"}[data-icon="bell"]:before{content:"\\1F514"}[data-icon="attention"]:before{content:"\\E839"}[data-icon="alert"]:before{content:"\\E841"}[data-icon="vcard"]:before{content:"\\E853"}[data-icon="address"]:before{content:"\\E85C"}[data-icon="location"]:before{content:"\\E852"}[data-icon="map"]:before{content:"\\E84A"}[data-icon="direction"]:before{content:"\\E86D"}[data-icon="compass"]:before{content:"\\E87A"}[data-icon="cup"]:before{content:"\\E850"}[data-icon="trash"]:before{content:"\\E888"}[data-icon="doc"]:before{content:"\\E88B"}[data-icon="docs"]:before{content:"\\E898"}[data-icon="doc-landscape"]:before{content:"\\E89B"}[data-icon="doc-text"]:before{content:"\\E8A6"}[data-icon="doc-text-inv"]:before{content:"\\E8A7"}[data-icon="newspaper"]:before{content:"\\1F4F0"}[data-icon="book-open"]:before{content:"\\E8AD"}[data-icon="book"]:before{content:"\\E8AC"}[data-icon="folder"]:before{content:"\\E82A"}[data-icon="archive"]:before{content:"\\E835"}[data-icon="box"]:before{content:"\\E83A"}[data-icon="rss"]:before{content:"\\E842"}[data-icon="phone"]:before{content:"\\E854"}[data-icon="cog"]:before{content:"\\E85E"}[data-icon="tools"]:before{content:"\\E860"}[data-icon="share"]:before{content:"\\E84B"}[data-icon="shareable"]:before{content:"\\E86E"}[data-icon="basket"]:before{content:"\\E879"}[data-icon="bag"]:before{content:"\\E87E"}[data-icon="calendar"]:before{content:"\\1F4C5"}[data-icon="login"]:before{content:"\\E88C"}[data-icon="logout"]:before{content:"\\E897"}[data-icon="mic"]:before{content:"\\E84D"}[data-icon="mute"]:before{content:"\\E84E"}[data-icon="sound"]:before{content:"\\E8AE"}[data-icon="volume"]:before{content:"\\E8B4"}[data-icon="clock"]:before{content:"\\E8AF"}[data-icon="hourglass"]:before{content:"\\231B"}[data-icon="lamp"]:before{content:"\\E82B"}[data-icon="light-down"]:before{content:"\\E834"}[data-icon="light-up"]:before{content:"\\E83B"}[data-icon="adjust"]:before{content:"\\E843"}[data-icon="block"]:before{content:"\\2588"}[data-icon="resize-full"]:before{content:"\\E85F"}[data-icon="resize-small"]:before{content:"\\E861"}[data-icon="popup"]:before{content:"\\E86A"}[data-icon="publish"]:before{content:"\\E86F"}[data-icon="window"]:before{content:"\\E878"}[data-icon="arrow-combo"]:before{content:"\\E87D"}[data-icon="down-circled"]:before{content:"\\E887"}[data-icon="left-circled"]:before{content:"\\E88D"}[data-icon="right-circled"]:before{content:"\\E896"}[data-icon="up-circled"]:before{content:"\\E89C"}[data-icon="down-open"]:before{content:"\\E84C"}[data-icon="left-open"]:before{content:"\\E8B2"}[data-icon="right-open"]:before{content:"\\E8B3"}[data-icon="up-open"]:before{content:"\\E8B5"}[data-icon="down-open-mini"]:before{content:"\\E8B6"}[data-icon="left-open-mini"]:before{content:"\\E833"}[data-icon="right-open-mini"]:before{content:"\\E832"}[data-icon="up-open-mini"]:before{content:"\\E83C"}[data-icon="down-open-big"]:before{content:"\\E844"}[data-icon="left-open-big"]:before{content:"\\E855"}[data-icon="right-open-big"]:before{content:"\\E85B"}[data-icon="up-open-big"]:before{content:"\\E862"}[data-icon="down"]:before{content:"\\E869"}[data-icon="left"]:before{content:"\\E870"}[data-icon="right"]:before{content:"\\E877"}[data-icon="up"]:before{content:"\\E87F"}[data-icon="down-dir"]:before{content:"\\E886"}[data-icon="left-dir"]:before{content:"\\E88E"}[data-icon="right-dir"]:before{content:"\\E895"}[data-icon="up-dir"]:before{content:"\\E89D"}[data-icon="down-bold"]:before{content:"\\E8A4"}[data-icon="left-bold"]:before{content:"\\E8BA"}[data-icon="right-bold"]:before{content:"\\E8B9"}[data-icon="up-bold"]:before{content:"\\E8B8"}[data-icon="down-thin"]:before{content:"\\E8B7"}[data-icon="left-thin"]:before{content:"\\E82C"}[data-icon="note-beamed"]:before{content:"\\E801"}[data-icon="up-thin"]:before{content:"\\E83D"}[data-icon="cw"]:before{content:"\\E856"}[data-icon="arrows-ccw"]:before{content:"\\E85A"}[data-icon="level-down"]:before{content:"\\E863"}[data-icon="level-up"]:before{content:"\\E868"}[data-icon="shuffle"]:before{content:"\\E871"}[data-icon="loop"]:before{content:"\\E876"}[data-icon="switch"]:before{content:"\\E880"}[data-icon="play"]:before{content:"\\E885"}[data-icon="stop"]:before{content:"\\E88F"}[data-icon="pause"]:before{content:"\\E894"}[data-icon="record"]:before{content:"\\E89E"}[data-icon="to-end"]:before{content:"\\E8A3"}[data-icon="to-start"]:before{content:"\\E8BB"}[data-icon="fast-forward"]:before{content:"\\E8BC"}[data-icon="fast-backward"]:before{content:"\\E8BD"}[data-icon="progress-0"]:before{content:"\\E8BE"}[data-icon="progress-1"]:before{content:"\\E82D"}[data-icon="progress-2"]:before{content:"\\E830"}[data-icon="progress-3"]:before{content:"\\E83E"}[data-icon="target"]:before{content:"\\E857"}[data-icon="palette"]:before{content:"\\E847"}[data-icon="list"]:before{content:"\\E859"}[data-icon="list-add"]:before{content:"\\E864"}[data-icon="signal"]:before{content:"\\E867"}[data-icon="trophy"]:before{content:"\\1F3C6"}[data-icon="battery"]:before{content:"\\1F50B"}[data-icon="back-in-time"]:before{content:"\\E881"}[data-icon="monitor"]:before{content:"\\E884"}[data-icon="mobile"]:before{content:"\\E890"}[data-icon="network"]:before{content:"\\E893"}[data-icon="cd"]:before{content:"\\E89F"}[data-icon="inbox"]:before{content:"\\E8A2"}[data-icon="install"]:before{content:"\\E8C2"}[data-icon="globe"]:before{content:"\\E8C1"}[data-icon="cloud"]:before{content:"\\2601"}[data-icon="cloud-thunder"]:before{content:"\\E8BF"}[data-icon="flash"]:before{content:"\\E82E"}[data-icon="moon"]:before{content:"\\E82F"}[data-icon="flight"]:before{content:"\\E83F"}[data-icon="paper-plane"]:before{content:"\\E845"}[data-icon="leaf"]:before{content:"\\E846"}[data-icon="lifebuoy"]:before{content:"\\E858"}[data-icon="mouse"]:before{content:"\\1F401"}[data-icon="briefcase"]:before{content:"\\1F4BC"}[data-icon="suitcase"]:before{content:"\\E873"}[data-icon="dot"]:before{content:"\\E874"}[data-icon="dot-2"]:before{content:"\\E882"}[data-icon="dot-3"]:before{content:"\\E883"}[data-icon="brush"]:before{content:"\\E891"}[data-icon="magnet"]:before{content:"\\E892"}[data-icon="infinity"]:before{content:"\\221E"}[data-icon="erase"]:before{content:"\\E8A1"}[data-icon="chart-pie"]:before{content:"\\E8C3"}[data-icon="chart-line"]:before{content:"\\E8C4"}[data-icon="chart-bar"]:before{content:"\\E8C5"}[data-icon="chart-area"]:before{content:"\\E8C6"}[data-icon="tape"]:before{content:"\\E8C7"}[data-icon="graduation-cap"]:before{content:"\\E8D2"}[data-icon="language"]:before{content:"\\E8D4"}[data-icon="ticket"]:before{content:"\\1F3AB"}[data-icon="water"]:before{content:"\\E8DA"}[data-icon="droplet"]:before{content:"\\1F4A7"}[data-icon="air"]:before{content:"\\E8E3"}[data-icon="credit-card"]:before{content:"\\E8EA"}[data-icon="floppy"]:before{content:"\\E8EB"}[data-icon="clipboard"]:before{content:"\\1F4CB"}[data-icon="megaphone"]:before{content:"\\E8F3"}[data-icon="database"]:before{content:"\\E8FA"}[data-icon="drive"]:before{content:"\\E8FC"}[data-icon="bucket"]:before{content:"\\E902"}[data-icon="thermometer"]:before{content:"\\E903"}[data-icon="key"]:before{content:"\\1F511"}[data-icon="flow-cascade"]:before{content:"\\E90B"}[data-icon="flow-branch"]:before{content:"\\E912"}[data-icon="flow-tree"]:before{content:"\\E913"}[data-icon="flow-line"]:before{content:"\\E91A"}[data-icon="flow-parallel"]:before{content:"\\E8C8"}[data-icon="rocket"]:before{content:"\\1F680"}[data-icon="gauge"]:before{content:"\\E8D3"}[data-icon="traffic-cone"]:before{content:"\\E8D8"}[data-icon="cc"]:before{content:"\\E8DB"}[data-icon="cc-by"]:before{content:"\\E8E1"}[data-icon="cc-nc"]:before{content:"\\E8E4"}[data-icon="cc-nc-eu"]:before{content:"\\E8E9"}[data-icon="cc-nc-jp"]:before{content:"\\E8EC"}[data-icon="cc-sa"]:before{content:"\\E8F1"}[data-icon="cc-nd"]:before{content:"\\E8F4"}[data-icon="cc-pd"]:before{content:"\\E8F9"}[data-icon="cc-zero"]:before{content:"\\E8FB"}[data-icon="cc-share"]:before{content:"\\E901"}[data-icon="cc-remix"]:before{content:"\\E904"}[data-icon="github"]:before{content:"\\E909"}[data-icon="github-circled"]:before{content:"\\E90C"}[data-icon="flickr"]:before{content:"\\E911"}[data-icon="flickr-circled"]:before{content:"\\E914"}[data-icon="vimeo"]:before{content:"\\E919"}[data-icon="vimeo-circled"]:before{content:"\\E8C9"}[data-icon="twitter"]:before{content:"\\E8D0"}[data-icon="twitter-circled"]:before{content:"\\E8D6"}[data-icon="facebook"]:before{content:"\\E8D7"}[data-icon="facebook-circled"]:before{content:"\\E8DC"}[data-icon="facebook-squared"]:before{content:"\\E8E0"}[data-icon="gplus"]:before{content:"\\E8E5"}[data-icon="gplus-circled"]:before{content:"\\E8E8"}[data-icon="pinterest"]:before{content:"\\E8ED"}[data-icon="pinterest-circled"]:before{content:"\\E8F0"}[data-icon="tumblr"]:before{content:"\\E8F5"}[data-icon="tumblr-circled"]:before{content:"\\E8F8"}[data-icon="linkedin"]:before{content:"\\E8FD"}[data-icon="linkedin-circled"]:before{content:"\\E900"}[data-icon="dribbble"]:before{content:"\\E905"}[data-icon="dribbble-circled"]:before{content:"\\E908"}[data-icon="stumbleupon"]:before{content:"\\E90D"}[data-icon="stumbleupon-circled"]:before{content:"\\E910"}[data-icon="lastfm"]:before{content:"\\E915"}[data-icon="lastfm-circled"]:before{content:"\\E918"}[data-icon="rdio"]:before{content:"\\E8CA"}[data-icon="rdio-circled"]:before{content:"\\E8D5"}[data-icon="spotify"]:before{content:"\\E8CF"}[data-icon="spotify-circled"]:before{content:"\\E8CE"}[data-icon="qq"]:before{content:"\\E8DD"}[data-icon="instagram"]:before{content:"\\E8DF"}[data-icon="dropbox"]:before{content:"\\E8E6"}[data-icon="evernote"]:before{content:"\\E8E7"}[data-icon="flattr"]:before{content:"\\E8EE"}[data-icon="skype"]:before{content:"\\E8EF"}[data-icon="skype-circled"]:before{content:"\\E8F6"}[data-icon="renren"]:before{content:"\\E8F7"}[data-icon="sina-weibo"]:before{content:"\\E8FE"}[data-icon="paypal"]:before{content:"\\E8FF"}[data-icon="picasa"]:before{content:"\\E906"}[data-icon="soundcloud"]:before{content:"\\E907"}[data-icon="mixi"]:before{content:"\\E90E"}[data-icon="behance"]:before{content:"\\E90F"}[data-icon="google-circles"]:before{content:"\\E916"}[data-icon="vkontakte"]:before{content:"\\E917"}[data-icon="smashing"]:before{content:"\\E8CB"}[data-icon="sweden"]:before{content:"\\E8CC"}[data-icon="db-shape"]:before{content:"\\E8CD"}[data-icon="bitbucket"]:before{content:"\\20AC"}*,*:before,*:after{position:relative;outline:none !important;text-rendering:optimizeLegibility;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;font-smoothing:grayscale}html{-webkit-text-size-adjust:100%;font-size:14px}body{min-width:960px}.block{display:block !important}.inline{display:inline !important}.inline-block{display:inline-block !important}.invisible{visibility:hidden}.hidden{display:none}.blocklink{display:block;color:inherit;text-decoration:none !important}.blocklink:hover,.blocklink:focus{color:inherit}.fill{display:block;position:absolute;width:100%;height:100%;top:0;left:0}.full{display:block;position:absolute;width:100%;height:100%;top:0;left:0;position:fixed}.cover{display:block;position:absolute;left:0;top:0;bottom:0;right:0}.clear:after{display:table;content:\'\';clear:both}.clean{margin:0;padding:0;border:0;list-style-type:none}.clean li{margin:0;padding:0;list-style-type:none}.trim>*:first-child{margin-top:0}.trim>*:last-child{margin-bottom:0}.snug>*{margin-top:.5rem;margin-bottom:.5rem}.snug>*:first-child{margin-top:0}.snug>*:last-child{margin-bottom:0}.compact *{margin-top:0;margin-bottom:0}.component{display:block;border-width:0;background:white;box-shadow:0 0 0 1px rgba(0,30,60,0.03),0 3px 3px -1.5px rgba(0,0,0,0.03);border-radius:4px}.transitions{-webkit-transition:all .5s cubic-bezier(0.25, 0, 0, 1);-o-transition:all .5s cubic-bezier(0.25, 0, 0, 1);transition:all .5s cubic-bezier(0.25, 0, 0, 1)}.margin,.margin-top{margin-top:2em}.margin,.margin-bottom{margin-bottom:2em}.margin-small,.margin-small-top{margin-top:1em}.margin-small,.margin-small-bottom{margin-bottom:1em}.padding,.padding-top{padding-top:2em}.padding,.padding-bottom{margin-bottom:2em}.flush,.flush-top{margin-top:0 !important}.flush,.flush-bottom{margin-bottom:0 !important}@media print{html{font-size:9pt}html body{-webkit-print-color-adjust:exact}html a{white-space:nowrap}html,body{background:white !important}font-size:9pt;body{-webkit-print-color-adjust:exact}a{white-space:nowrap}@page{margin:0.75in 1in}}@media screen{html.print{font-size:9pt;font-size:9pt;background:#f9fafb}html.print body{-webkit-print-color-adjust:exact}html.print a{white-space:nowrap}html.print body{-webkit-print-color-adjust:exact}html.print a{white-space:nowrap}html.print body{padding:0.75in 1in;margin:.5in auto;max-width:8.5in;box-shadow:0 0 0 1px rgba(0,30,60,0.03),0 3px 3px -1.5px rgba(0,0,0,0.03);height:auto}}.text-red{color:#ff694b !important}.text-red-dark{color:#ff4f39 !important}.text-red-darker{color:#ff3c2b !important}.text-red-darkest{color:#ff2d21 !important}.text-red-light{color:#ff845e !important}.text-red-lighter{color:#ffa376 !important}.text-red-lightest{color:#ffba94 !important}.text-red-highlight{color:#fff5f4 !important}.bg-red{background-color:#ff694b !important}.bg-red-dark{background-color:#ff4f39 !important}.bg-red-darker{background-color:#ff3c2b !important}.bg-red-darkest{background-color:#ff2d21 !important}.bg-red-light{background-color:#ff845e !important}.bg-red-lighter{background-color:#ffa376 !important}.bg-red-lightest{background-color:#ffba94 !important}.bg-red-highlight{background-color:#fff5f4 !important}.text-orange{color:#ff694b !important}.text-orange-dark{color:#ff4f39 !important}.text-orange-darker{color:#ff3c2b !important}.text-orange-darkest{color:#ff2d21 !important}.text-orange-light{color:#ff845e !important}.text-orange-lighter{color:#ffa376 !important}.text-orange-lightest{color:#ffba94 !important}.text-orange-highlight{color:#fff5f4 !important}.bg-orange{background-color:#ff694b !important}.bg-orange-dark{background-color:#ff4f39 !important}.bg-orange-darker{background-color:#ff3c2b !important}.bg-orange-darkest{background-color:#ff2d21 !important}.bg-orange-light{background-color:#ff845e !important}.bg-orange-lighter{background-color:#ffa376 !important}.bg-orange-lightest{background-color:#ffba94 !important}.bg-orange-highlight{background-color:#fff5f4 !important}.text-yellow{color:#fc0 !important}.text-yellow-dark{color:#ffc000 !important}.text-yellow-darker{color:#ffb100 !important}.text-yellow-darkest{color:#ff9e00 !important}.text-yellow-light{color:#ffd900 !important}.text-yellow-lighter{color:#ffe300 !important}.text-yellow-lightest{color:#ffea00 !important}.text-yellow-highlight{color:#fff8db !important}.bg-yellow{background-color:#fc0 !important}.bg-yellow-dark{background-color:#ffc000 !important}.bg-yellow-darker{background-color:#ffb100 !important}.bg-yellow-darkest{background-color:#ff9e00 !important}.bg-yellow-light{background-color:#ffd900 !important}.bg-yellow-lighter{background-color:#ffe300 !important}.bg-yellow-lightest{background-color:#ffea00 !important}.bg-yellow-highlight{background-color:#fff8db !important}.text-green{color:#7ec631 !important}.text-green-dark{color:#5fb825 !important}.text-green-darker{color:#48a71c !important}.text-green-darkest{color:#369115 !important}.text-green-light{color:#9ed53e !important}.text-green-lighter{color:#b7e04e !important}.text-green-lightest{color:#c9e862 !important}.text-green-highlight{color:#f3faec !important}.bg-green{background-color:#7ec631 !important}.bg-green-dark{background-color:#5fb825 !important}.bg-green-darker{background-color:#48a71c !important}.bg-green-darkest{background-color:#369115 !important}.bg-green-light{background-color:#9ed53e !important}.bg-green-lighter{background-color:#b7e04e !important}.bg-green-lightest{background-color:#c9e862 !important}.bg-green-highlight{background-color:#f3faec !important}.text-blue{color:#0bb !important}.text-blue-dark{color:#0aa !important}.text-blue-darker{color:#009595 !important}.text-blue-darkest{color:#007b7b !important}.text-blue-light{color:#0cc !important}.text-blue-lighter{color:#00d9d9 !important}.text-blue-lightest{color:#00e3e3 !important}.text-blue-highlight{color:#edfafa !important}.bg-blue{background-color:#0bb !important}.bg-blue-dark{background-color:#0aa !important}.bg-blue-darker{background-color:#009595 !important}.bg-blue-darkest{background-color:#007b7b !important}.bg-blue-light{background-color:#0cc !important}.bg-blue-lighter{background-color:#00d9d9 !important}.bg-blue-lightest{background-color:#00e3e3 !important}.bg-blue-highlight{background-color:#edfafa !important}.text-purple{color:#7f6cc5 !important}.text-purple-dark{color:#6051b7 !important}.text-purple-darker{color:#483da5 !important}.text-purple-darkest{color:#362e8f !important}.text-purple-light{color:#9f87d4 !important}.text-purple-lighter{color:#b7a5df !important}.text-purple-lightest{color:#c9bce7 !important}.text-purple-highlight{color:#f8f7fc !important}.bg-purple{background-color:#7f6cc5 !important}.bg-purple-dark{background-color:#6051b7 !important}.bg-purple-darker{background-color:#483da5 !important}.bg-purple-darkest{background-color:#362e8f !important}.bg-purple-light{background-color:#9f87d4 !important}.bg-purple-lighter{background-color:#b7a5df !important}.bg-purple-lightest{background-color:#c9bce7 !important}.bg-purple-highlight{background-color:#f8f7fc !important}.text-navy{color:#005e7a !important}.text-navy-dark{color:#00475c !important}.text-navy-darker{color:#003645 !important}.text-navy-darkest{color:#002934 !important}.text-navy-light{color:#007699 !important}.text-navy-lighter{color:#0094b3 !important}.text-navy-lightest{color:#00afc6 !important}.text-navy-highlight{color:#f4f8f9 !important}.bg-navy{background-color:#005e7a !important}.bg-navy-dark{background-color:#00475c !important}.bg-navy-darker{background-color:#003645 !important}.bg-navy-darkest{background-color:#002934 !important}.bg-navy-light{background-color:#007699 !important}.bg-navy-lighter{background-color:#0094b3 !important}.bg-navy-lightest{background-color:#00afc6 !important}.bg-navy-highlight{background-color:#f4f8f9 !important}.text-gray{color:#8b969e !important}.text-gray-dark{color:#6e7c86 !important}.text-gray-darker{color:#535d68 !important}.text-gray-darkest{color:#3f464e !important}.text-gray-light{color:#a8b1b7 !important}.text-gray-lighter{color:#bec5c9 !important}.text-gray-lightest{color:#cfd4d7 !important}.text-gray-highlight{color:#f7f7f8 !important}.bg-gray{background-color:#8b969e !important}.bg-gray-dark{background-color:#6e7c86 !important}.bg-gray-darker{background-color:#535d68 !important}.bg-gray-darkest{background-color:#3f464e !important}.bg-gray-light{background-color:#a8b1b7 !important}.bg-gray-lighter{background-color:#bec5c9 !important}.bg-gray-lightest{background-color:#cfd4d7 !important}.bg-gray-highlight{background-color:#f7f7f8 !important}.text-success{color:#5fb825 !important}.text-danger{color:#ff4f39 !important}.text-warning{color:#ff821d !important}.text-info{color:#0aa !important}.text-white{color:white !important}.text-light{color:#8b969e !important}.text-lighter{color:#bec5c9 !important}.text-dark{color:#313539 !important}.text-inherit{color:inherit}.text-inherit:hover,.text-inherit:focus{color:inherit}.text-silver{color:#f0f2f4 !important}.text-silver-light{color:#f9fafb !important}.text-silver-dark{color:#e9ebef !important}.text-silver-darker{color:#e4e6eb !important}.text-silver-darkest{color:#dee0e6 !important}.bg-silver{background-color:#f0f2f4}.bg-silver-light{background-color:#f9fafb !important}.bg-silver-dark{background-color:#e9ebef !important}.bg-silver-darker{background-color:#e4e6eb !important}.bg-silver-darkest{background-color:#dee0e6 !important}.bg-transparent{background-color:transparent !important}.faint{opacity:.5}.fainter{opacity:.3}.inherit{color:inherit}::selection{background:#0bb;color:#fff}::-moz-selection{background:#0bb;color:#fff}img{display:block;max-width:100%}[data-bg]{background:transparent no-repeat 50% 50%/cover}body{font-size:1rem;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Oxygen,Ubuntu,Cantarell,"Fira Sans","Droid Sans","Helvetica Neue",Helvetica,Arial,sans-serif;background:#f9fafb;color:#5e666c}*,dt,dd{line-height:calc(1em + .15 * (5rem - 1em));text-align:inherit}a,.a{cursor:pointer;color:#0bb;text-decoration:none}a:hover,a:focus,.a:hover,.a:focus{text-decoration:none;color:#009595}i,.i,em,.em{font-style:oblique}b,.b,strong,.strong{font-weight:bold}mark{background:#edfafa;color:#313539;padding:.1em 0;border-radius:4px}.normal{font-weight:normal !important}iframe{margin:0;display:block}label{margin:.5em 0;font-weight:normal}hr{margin:3em 0;border-top:1px solid rgba(0,30,60,0.075)}blockquote,ul,ol,p,.field,.table{margin:1.5em 0}h1,.h1,h2,.h2,h3,.h3,h4,.h4,h5,.h5,h6,.h6{margin:1.5em 0 .5em}ul,ol{padding-left:1.25em}dl dt+dd{margin-bottom:1em}blockquote{padding:0;font-size:inherit}small,.small,.text-small{font-size:.9285714286rem}h1,.h1,h2,.h2,h3,.h3,h4,.h4,h5,.h5,h6,.h6{font-weight:bold;letter-spacing:.01em}h5,.h5,h6,.h6,.text-base{font-size:1rem}h4,.h4,.text-large{font-size:1.1428571429rem}h3,.h3,.text-larger{font-size:1.2857142857rem}h1,.h1,h2,.h2,.text-largest{font-size:1.7142857143rem}.text-body{font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Oxygen,Ubuntu,Cantarell,"Fira Sans","Droid Sans","Helvetica Neue",Helvetica,Arial,sans-serif}.text-mono{font-family:"Monaco",monospace;font-size:.8571428571rem !important}.text-smallcaps{font-size:10px;text-transform:uppercase;letter-spacing:.1em;color:#8b969e;font-weight:bold;font-style:normal}.text-left{text-align:left !important}.text-right{text-align:right !important}.text-center{text-align:center !important}@media (min-width: 961px){.text-center-large{text-align:center !important}.text-right-large{text-align:right !important}.text-left-large{text-align:left !important}}@media (max-width: 960px){.text-center-small{text-align:center !important}.text-right-small{text-align:right !important}.text-left-small{text-align:left !important}}@media (min-width: 401px){.nowrap{white-space:nowrap}}.condensed{white-space:nowrap;width:1px}.ellipsis{width:100%;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.wrap{white-space:normal}.break{word-break:break-word}.buffer,.card,.title,.tokens,.settings{margin-top:20px;margin-bottom:20px}*:first-child{margin-top:0}*:last-child{margin-bottom:0}.margin-right{margin-right:.75em !important}.margin-left{margin-left:.75em !important}.margin-right-small{margin-right:.375em !important}.margin-left-small{margin-left:.375em !important}.icn{font-size:16px;top:-1px;width:1em;height:1em;margin:auto;display:inline-block;vertical-align:middle;-webkit-backface-visibility:hidden;-webkit-transform:translateZ(0);transform:translateZ(0)}.icn use{fill:currentColor}.icn-md{width:1.5em;height:1.5em;-webkit-transform:scale(1.5);transform:scale(1.5);-webkit-transform-origin:0 0;transform-origin:0 0}.icn-lg{width:2em;height:2em;-webkit-transform:scale(2);transform:scale(2);-webkit-transform-origin:0 0;transform-origin:0 0}.glyph{top:-1px;margin:auto;font-size:24px;display:inline-block;vertical-align:middle;transform:translate(0, 0);width:1em;height:1em}.glyph use{fill:none;stroke-width:2;stroke:currentColor;stroke-linecap:round;stroke-linejoin:round;transform-origin:0 0;shape-rendering:geometricPrecision}.glyph-solid use{fill:currentColor;stroke-width:0 !important}.glyph-middle,.btn .glyph{margin-top:-10px;margin-bottom:-8px}.glyph-before{margin-right:.25em;margin-left:-.125em}.glyph-after{margin-left:.25em;margin-right:-.125em}.glyph-sm{font-size:16px}.glyph-sm use{stroke-width:3}@media (-webkit-min-device-pixel-ratio: 1.25), (min-device-pixel-ratio: 1.25){.glyph-sm use{stroke-width:2.25}}.glyph-md{font-size:36px}.glyph-md use{stroke-width:1.3333333333}@media (-webkit-min-device-pixel-ratio: 1.25), (min-device-pixel-ratio: 1.25){.glyph-md use{stroke-width:1}}.glyph-lg{font-size:48px}.glyph-lg use{stroke-width:1}@media (-webkit-min-device-pixel-ratio: 1.25), (min-device-pixel-ratio: 1.25){.glyph-lg use{stroke-width:.75}}.glyph-xl{font-size:72px}.glyph-xl use{stroke-width:.6666666667}@media (-webkit-min-device-pixel-ratio: 1.25), (min-device-pixel-ratio: 1.25){.glyph-xl use{stroke-width:.5}}.glyph-check,.glyph-radio{font-size:18px;border:2px solid currentColor;opacity:.25}.glyph-check use,.glyph-radio use{opacity:0}:hover>.glyph-check,:focus ~ .glyph-check,:hover>.glyph-radio,:focus ~ .glyph-radio{opacity:.5}:checked ~ .glyph-check,:disabled ~ .glyph-check,[type="checkbox"]:indeterminate ~ .glyph-check,:checked ~ .glyph-radio,:disabled ~ .glyph-radio,[type="checkbox"]:indeterminate ~ .glyph-radio{border-color:transparent !important}:checked ~ .glyph-check,[type="checkbox"]:indeterminate ~ .glyph-check,:checked ~ .glyph-radio,[type="checkbox"]:indeterminate ~ .glyph-radio{opacity:1;background:#0bb}:checked ~ .glyph-check use,[type="checkbox"]:indeterminate ~ .glyph-check use,:checked ~ .glyph-radio use,[type="checkbox"]:indeterminate ~ .glyph-radio use{opacity:1;color:white}:checked:hover ~ .glyph-check,:checked:focus ~ .glyph-check,[type="checkbox"]:indeterminate:hover ~ .glyph-check,[type="checkbox"]:indeterminate:focus ~ .glyph-check,:hover>:checked ~ .glyph-check,:focus>:checked ~ .glyph-check,:checked:hover ~ .glyph-radio,:checked:focus ~ .glyph-radio,[type="checkbox"]:indeterminate:hover ~ .glyph-radio,[type="checkbox"]:indeterminate:focus ~ .glyph-radio,:hover>:checked ~ .glyph-radio,:focus>:checked ~ .glyph-radio{background:#009595}[type="checkbox"]:indeterminate ~ .glyph-check use,[type="checkbox"]:indeterminate ~ .glyph-radio use{fill:currentColor;stroke:transparent}:disabled ~ .glyph-check,:checked:disabled ~ .glyph-check,[type="checkbox"]:indeterminate:disabled ~ .glyph-check,:disabled ~ .glyph-radio,:checked:disabled ~ .glyph-radio,[type="checkbox"]:indeterminate:disabled ~ .glyph-radio{opacity:.5;background:#dee0e6;color:inherit}:disabled ~ .glyph-check use,:checked:disabled ~ .glyph-check use,[type="checkbox"]:indeterminate:disabled ~ .glyph-check use,:disabled ~ .glyph-radio use,:checked:disabled ~ .glyph-radio use,[type="checkbox"]:indeterminate:disabled ~ .glyph-radio use{color:inherit}.glyph-radio{border-radius:50%}.glyph-radio use{fill:currentColor}.glyph-check{border-radius:4px}select:not([multiple]).form-control{background-size:.75em .75em;background-repeat:no-repeat;background-image:url('+r(n(215))+');background-position:calc( 100% - .875em ) 50%;padding-top:0;padding-bottom:0;padding-right:2.25em}select:not([multiple]).form-control::-ms-value{background:transparent !important}.bootstrap-select button{background-repeat:no-repeat;background-size:auto 1em;background-position:calc(100% - 1.25rem + 5px) 50%;background-image:url("data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgdmlld0JveD0iMCAwIDE2IDE2Ij48cG9seWxpbmUgcG9pbnRzPSI0LjUgNiA4IDkuNSAxMS41IDYiIGZpbGw9Im5vbmUiIHN0cm9rZT0iIzAwOTRiMyIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIiBzdHJva2UtbGluZWpvaW49InJvdW5kIiAvPjxyZWN0IHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgZmlsbD0ibm9uZSIvPjwvc3ZnPg==");padding-right:2em !important;-moz-appearance:none}.bootstrap-select button.input-sm,.bootstrap-select .input-group-sm>button.form-control,.bootstrap-select .input-group-sm>button.input-group-addon,.bootstrap-select .input-group-sm>.input-group-btn>button.btn,.bootstrap-select button.sm{background-position:calc(100% - .875rem + 5px) 50%}.bootstrap-select button.input-lg,.bootstrap-select .input-group-lg>button.form-control,.bootstrap-select .input-group-lg>button.input-group-addon,.bootstrap-select .input-group-lg>.input-group-btn>button.btn,.bootstrap-select button.lg{background-position:calc(100% - 1.875rem + 5px) 50%}.bootstrap-select button::-ms-expand{display:none}.btn input,.form-control input,.option input{position:absolute;opacity:0}.option{margin:0}.option:not(.input-group-addon){padding-left:0 !important}.option-flush{padding-left:0 !important;padding-right:0 !important}.option.input-group-addon{padding-left:.875rem;padding-right:.875rem}.option .glyph{margin-right:.375em}/*! jQuery UI - v1.12.1 - 2017-01-20\n* http://jqueryui.com\n* Copyright jQuery Foundation and other contributors; Licensed MIT */.ui-draggable-handle{-ms-touch-action:none;touch-action:none}.ui-helper-hidden{display:none}.ui-helper-hidden-accessible{border:0;clip:rect(0 0 0 0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px}.ui-helper-reset{margin:0;padding:0;border:0;outline:0;line-height:1.3;text-decoration:none;font-size:100%;list-style:none}.ui-helper-clearfix:before,.ui-helper-clearfix:after{content:"";display:table;border-collapse:collapse}.ui-helper-clearfix:after{clear:both}.ui-helper-zfix{width:100%;height:100%;top:0;left:0;position:absolute;opacity:0;filter:Alpha(Opacity=0)}.ui-front{z-index:100}.ui-state-disabled{cursor:default !important;pointer-events:none}.ui-icon{display:inline-block;vertical-align:middle;margin-top:-.25em;position:relative;text-indent:-99999px;overflow:hidden;background-repeat:no-repeat}.ui-widget-icon-block{left:50%;margin-left:-8px;display:block}.ui-widget-overlay{position:fixed;top:0;left:0;width:100%;height:100%}.ui-resizable{position:relative}.ui-resizable-handle{position:absolute;font-size:0.1px;display:block;-ms-touch-action:none;touch-action:none}.ui-resizable-disabled .ui-resizable-handle,.ui-resizable-autohide .ui-resizable-handle{display:none}.ui-resizable-n{cursor:n-resize;height:7px;width:100%;top:-5px;left:0}.ui-resizable-s{cursor:s-resize;height:7px;width:100%;bottom:-5px;left:0}.ui-resizable-e{cursor:e-resize;width:7px;right:-5px;top:0;height:100%}.ui-resizable-w{cursor:w-resize;width:7px;left:-5px;top:0;height:100%}.ui-resizable-se{cursor:se-resize;width:12px;height:12px;right:1px;bottom:1px}.ui-resizable-sw{cursor:sw-resize;width:9px;height:9px;left:-5px;bottom:-5px}.ui-resizable-nw{cursor:nw-resize;width:9px;height:9px;left:-5px;top:-5px}.ui-resizable-ne{cursor:ne-resize;width:9px;height:9px;right:-5px;top:-5px}.ui-selectable{-ms-touch-action:none;touch-action:none}.ui-selectable-helper{position:absolute;z-index:100;border:1px dotted black}.ui-sortable-handle{-ms-touch-action:none;touch-action:none}.ui-accordion .ui-accordion-header{display:block;cursor:pointer;position:relative;margin:2px 0 0 0;padding:.5em .5em .5em .7em;font-size:100%}.ui-accordion .ui-accordion-content{padding:1em 2.2em;border-top:0;overflow:auto}.ui-autocomplete{position:absolute;top:0;left:0;cursor:default}.ui-menu{list-style:none;padding:0;margin:0;display:block;outline:0}.ui-menu .ui-menu{position:absolute}.ui-menu .ui-menu-item{margin:0;cursor:pointer;list-style-image:url("data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7")}.ui-menu .ui-menu-item-wrapper{position:relative;padding:3px 1em 3px .4em}.ui-menu .ui-menu-divider{margin:5px 0;height:0;font-size:0;line-height:0;border-width:1px 0 0 0}.ui-menu .ui-state-focus,.ui-menu .ui-state-active{margin:-1px}.ui-menu-icons{position:relative}.ui-menu-icons .ui-menu-item-wrapper{padding-left:2em}.ui-menu .ui-icon{position:absolute;top:0;bottom:0;left:.2em;margin:auto 0}.ui-menu .ui-menu-icon{left:auto;right:0}.ui-button{padding:.4em 1em;display:inline-block;position:relative;line-height:normal;margin-right:.1em;cursor:pointer;vertical-align:middle;text-align:center;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;overflow:visible}.ui-button,.ui-button:link,.ui-button:visited,.ui-button:hover,.ui-button:active{text-decoration:none}.ui-button-icon-only{width:2em;box-sizing:border-box;text-indent:-9999px;white-space:nowrap}input.ui-button.ui-button-icon-only{text-indent:0}.ui-button-icon-only .ui-icon{position:absolute;top:50%;left:50%;margin-top:-8px;margin-left:-8px}.ui-button.ui-icon-notext .ui-icon{padding:0;width:2.1em;height:2.1em;text-indent:-9999px;white-space:nowrap}input.ui-button.ui-icon-notext .ui-icon{width:auto;height:auto;text-indent:0;white-space:normal;padding:.4em 1em}input.ui-button::-moz-focus-inner,button.ui-button::-moz-focus-inner{border:0;padding:0}.ui-controlgroup{vertical-align:middle;display:inline-block}.ui-controlgroup>.ui-controlgroup-item{float:left;margin-left:0;margin-right:0}.ui-controlgroup>.ui-controlgroup-item:focus,.ui-controlgroup>.ui-controlgroup-item.ui-visual-focus{z-index:9999}.ui-controlgroup-vertical>.ui-controlgroup-item{display:block;float:none;width:100%;margin-top:0;margin-bottom:0;text-align:left}.ui-controlgroup-vertical .ui-controlgroup-item{box-sizing:border-box}.ui-controlgroup .ui-controlgroup-label{padding:.4em 1em}.ui-controlgroup .ui-controlgroup-label span{font-size:80%}.ui-controlgroup-horizontal .ui-controlgroup-label+.ui-controlgroup-item{border-left:none}.ui-controlgroup-vertical .ui-controlgroup-label+.ui-controlgroup-item{border-top:none}.ui-controlgroup-horizontal .ui-controlgroup-label.ui-widget-content{border-right:none}.ui-controlgroup-vertical .ui-controlgroup-label.ui-widget-content{border-bottom:none}.ui-controlgroup-vertical .ui-spinner-input{width:75%;width:calc( 100% - 2.4em )}.ui-controlgroup-vertical .ui-spinner .ui-spinner-up{border-top-style:solid}.ui-checkboxradio-label .ui-icon-background{box-shadow:inset 1px 1px 1px #ccc;border-radius:.12em;border:none}.ui-checkboxradio-radio-label .ui-icon-background{width:16px;height:16px;border-radius:1em;overflow:visible;border:none}.ui-checkboxradio-radio-label.ui-checkboxradio-checked .ui-icon,.ui-checkboxradio-radio-label.ui-checkboxradio-checked:hover .ui-icon{background-image:none;width:8px;height:8px;border-width:4px;border-style:solid}.ui-checkboxradio-disabled{pointer-events:none}.ui-datepicker{width:17em;padding:.2em .2em 0;display:none}.ui-datepicker .ui-datepicker-header{position:relative;padding:.2em 0}.ui-datepicker .ui-datepicker-prev,.ui-datepicker .ui-datepicker-next{position:absolute;top:2px;width:1.8em;height:1.8em}.ui-datepicker .ui-datepicker-prev-hover,.ui-datepicker .ui-datepicker-next-hover{top:1px}.ui-datepicker .ui-datepicker-prev{left:2px}.ui-datepicker .ui-datepicker-next{right:2px}.ui-datepicker .ui-datepicker-prev-hover{left:1px}.ui-datepicker .ui-datepicker-next-hover{right:1px}.ui-datepicker .ui-datepicker-prev span,.ui-datepicker .ui-datepicker-next span{display:block;position:absolute;left:50%;margin-left:-8px;top:50%;margin-top:-8px}.ui-datepicker .ui-datepicker-title{margin:0 2.3em;line-height:1.8em;text-align:center}.ui-datepicker .ui-datepicker-title select{font-size:1em;margin:1px 0}.ui-datepicker select.ui-datepicker-month,.ui-datepicker select.ui-datepicker-year{width:45%}.ui-datepicker table{width:100%;font-size:.9em;border-collapse:collapse;margin:0 0 .4em}.ui-datepicker th{padding:.7em .3em;text-align:center;font-weight:bold;border:0}.ui-datepicker td{border:0;padding:1px}.ui-datepicker td span,.ui-datepicker td a{display:block;padding:.2em;text-align:right;text-decoration:none}.ui-datepicker .ui-datepicker-buttonpane{background-image:none;margin:.7em 0 0 0;padding:0 .2em;border-left:0;border-right:0;border-bottom:0}.ui-datepicker .ui-datepicker-buttonpane button{float:right;margin:.5em .2em .4em;cursor:pointer;padding:.2em .6em .3em .6em;width:auto;overflow:visible}.ui-datepicker .ui-datepicker-buttonpane button.ui-datepicker-current{float:left}.ui-datepicker.ui-datepicker-multi{width:auto}.ui-datepicker-multi .ui-datepicker-group{float:left}.ui-datepicker-multi .ui-datepicker-group table{width:95%;margin:0 auto .4em}.ui-datepicker-multi-2 .ui-datepicker-group{width:50%}.ui-datepicker-multi-3 .ui-datepicker-group{width:33.3%}.ui-datepicker-multi-4 .ui-datepicker-group{width:25%}.ui-datepicker-multi .ui-datepicker-group-last .ui-datepicker-header,.ui-datepicker-multi .ui-datepicker-group-middle .ui-datepicker-header{border-left-width:0}.ui-datepicker-multi .ui-datepicker-buttonpane{clear:left}.ui-datepicker-row-break{clear:both;width:100%;font-size:0}.ui-datepicker-rtl{direction:rtl}.ui-datepicker-rtl .ui-datepicker-prev{right:2px;left:auto}.ui-datepicker-rtl .ui-datepicker-next{left:2px;right:auto}.ui-datepicker-rtl .ui-datepicker-prev:hover{right:1px;left:auto}.ui-datepicker-rtl .ui-datepicker-next:hover{left:1px;right:auto}.ui-datepicker-rtl .ui-datepicker-buttonpane{clear:right}.ui-datepicker-rtl .ui-datepicker-buttonpane button{float:left}.ui-datepicker-rtl .ui-datepicker-buttonpane button.ui-datepicker-current,.ui-datepicker-rtl .ui-datepicker-group{float:right}.ui-datepicker-rtl .ui-datepicker-group-last .ui-datepicker-header,.ui-datepicker-rtl .ui-datepicker-group-middle .ui-datepicker-header{border-right-width:0;border-left-width:1px}.ui-datepicker .ui-icon{display:block;text-indent:-99999px;overflow:hidden;background-repeat:no-repeat;left:.5em;top:.3em}.ui-dialog{position:absolute;top:0;left:0;padding:.2em;outline:0}.ui-dialog .ui-dialog-titlebar{padding:.4em 1em;position:relative}.ui-dialog .ui-dialog-title{float:left;margin:.1em 0;white-space:nowrap;width:90%;overflow:hidden;text-overflow:ellipsis}.ui-dialog .ui-dialog-titlebar-close{position:absolute;right:.3em;top:50%;width:20px;margin:-10px 0 0 0;padding:1px;height:20px}.ui-dialog .ui-dialog-content{position:relative;border:0;padding:.5em 1em;background:none;overflow:auto}.ui-dialog .ui-dialog-buttonpane{text-align:left;border-width:1px 0 0 0;background-image:none;margin-top:.5em;padding:.3em 1em .5em .4em}.ui-dialog .ui-dialog-buttonpane .ui-dialog-buttonset{float:right}.ui-dialog .ui-dialog-buttonpane button{margin:.5em .4em .5em 0;cursor:pointer}.ui-dialog .ui-resizable-n{height:2px;top:0}.ui-dialog .ui-resizable-e{width:2px;right:0}.ui-dialog .ui-resizable-s{height:2px;bottom:0}.ui-dialog .ui-resizable-w{width:2px;left:0}.ui-dialog .ui-resizable-se,.ui-dialog .ui-resizable-sw,.ui-dialog .ui-resizable-ne,.ui-dialog .ui-resizable-nw{width:7px;height:7px}.ui-dialog .ui-resizable-se{right:0;bottom:0}.ui-dialog .ui-resizable-sw{left:0;bottom:0}.ui-dialog .ui-resizable-ne{right:0;top:0}.ui-dialog .ui-resizable-nw{left:0;top:0}.ui-draggable .ui-dialog-titlebar{cursor:move}.ui-progressbar{height:2em;text-align:left;overflow:hidden}.ui-progressbar .ui-progressbar-value{margin:-1px;height:100%}.ui-progressbar .ui-progressbar-overlay{background:url("data:image/gif;base64,R0lGODlhKAAoAIABAAAAAP///yH/C05FVFNDQVBFMi4wAwEAAAAh+QQJAQABACwAAAAAKAAoAAACkYwNqXrdC52DS06a7MFZI+4FHBCKoDeWKXqymPqGqxvJrXZbMx7Ttc+w9XgU2FB3lOyQRWET2IFGiU9m1frDVpxZZc6bfHwv4c1YXP6k1Vdy292Fb6UkuvFtXpvWSzA+HycXJHUXiGYIiMg2R6W459gnWGfHNdjIqDWVqemH2ekpObkpOlppWUqZiqr6edqqWQAAIfkECQEAAQAsAAAAACgAKAAAApSMgZnGfaqcg1E2uuzDmmHUBR8Qil95hiPKqWn3aqtLsS18y7G1SzNeowWBENtQd+T1JktP05nzPTdJZlR6vUxNWWjV+vUWhWNkWFwxl9VpZRedYcflIOLafaa28XdsH/ynlcc1uPVDZxQIR0K25+cICCmoqCe5mGhZOfeYSUh5yJcJyrkZWWpaR8doJ2o4NYq62lAAACH5BAkBAAEALAAAAAAoACgAAAKVDI4Yy22ZnINRNqosw0Bv7i1gyHUkFj7oSaWlu3ovC8GxNso5fluz3qLVhBVeT/Lz7ZTHyxL5dDalQWPVOsQWtRnuwXaFTj9jVVh8pma9JjZ4zYSj5ZOyma7uuolffh+IR5aW97cHuBUXKGKXlKjn+DiHWMcYJah4N0lYCMlJOXipGRr5qdgoSTrqWSq6WFl2ypoaUAAAIfkECQEAAQAsAAAAACgAKAAAApaEb6HLgd/iO7FNWtcFWe+ufODGjRfoiJ2akShbueb0wtI50zm02pbvwfWEMWBQ1zKGlLIhskiEPm9R6vRXxV4ZzWT2yHOGpWMyorblKlNp8HmHEb/lCXjcW7bmtXP8Xt229OVWR1fod2eWqNfHuMjXCPkIGNileOiImVmCOEmoSfn3yXlJWmoHGhqp6ilYuWYpmTqKUgAAIfkECQEAAQAsAAAAACgAKAAAApiEH6kb58biQ3FNWtMFWW3eNVcojuFGfqnZqSebuS06w5V80/X02pKe8zFwP6EFWOT1lDFk8rGERh1TTNOocQ61Hm4Xm2VexUHpzjymViHrFbiELsefVrn6XKfnt2Q9G/+Xdie499XHd2g4h7ioOGhXGJboGAnXSBnoBwKYyfioubZJ2Hn0RuRZaflZOil56Zp6iioKSXpUAAAh+QQJAQABACwAAAAAKAAoAAACkoQRqRvnxuI7kU1a1UU5bd5tnSeOZXhmn5lWK3qNTWvRdQxP8qvaC+/yaYQzXO7BMvaUEmJRd3TsiMAgswmNYrSgZdYrTX6tSHGZO73ezuAw2uxuQ+BbeZfMxsexY35+/Qe4J1inV0g4x3WHuMhIl2jXOKT2Q+VU5fgoSUI52VfZyfkJGkha6jmY+aaYdirq+lQAACH5BAkBAAEALAAAAAAoACgAAAKWBIKpYe0L3YNKToqswUlvznigd4wiR4KhZrKt9Upqip61i9E3vMvxRdHlbEFiEXfk9YARYxOZZD6VQ2pUunBmtRXo1Lf8hMVVcNl8JafV38aM2/Fu5V16Bn63r6xt97j09+MXSFi4BniGFae3hzbH9+hYBzkpuUh5aZmHuanZOZgIuvbGiNeomCnaxxap2upaCZsq+1kAACH5BAkBAAEALAAAAAAoACgAAAKXjI8By5zf4kOxTVrXNVlv1X0d8IGZGKLnNpYtm8Lr9cqVeuOSvfOW79D9aDHizNhDJidFZhNydEahOaDH6nomtJjp1tutKoNWkvA6JqfRVLHU/QUfau9l2x7G54d1fl995xcIGAdXqMfBNadoYrhH+Mg2KBlpVpbluCiXmMnZ2Sh4GBqJ+ckIOqqJ6LmKSllZmsoq6wpQAAAh+QQJAQABACwAAAAAKAAoAAAClYx/oLvoxuJDkU1a1YUZbJ59nSd2ZXhWqbRa2/gF8Gu2DY3iqs7yrq+xBYEkYvFSM8aSSObE+ZgRl1BHFZNr7pRCavZ5BW2142hY3AN/zWtsmf12p9XxxFl2lpLn1rseztfXZjdIWIf2s5dItwjYKBgo9yg5pHgzJXTEeGlZuenpyPmpGQoKOWkYmSpaSnqKileI2FAAACH5BAkBAAEALAAAAAAoACgAAAKVjB+gu+jG4kORTVrVhRlsnn2dJ3ZleFaptFrb+CXmO9OozeL5VfP99HvAWhpiUdcwkpBH3825AwYdU8xTqlLGhtCosArKMpvfa1mMRae9VvWZfeB2XfPkeLmm18lUcBj+p5dnN8jXZ3YIGEhYuOUn45aoCDkp16hl5IjYJvjWKcnoGQpqyPlpOhr3aElaqrq56Bq7VAAAOw==");height:100%;filter:alpha(opacity=25);opacity:0.25}.ui-progressbar-indeterminate .ui-progressbar-value{background-image:none}.ui-selectmenu-menu{padding:0;margin:0;position:absolute;top:0;left:0;display:none}.ui-selectmenu-menu .ui-menu{overflow:auto;overflow-x:hidden;padding-bottom:1px}.ui-selectmenu-menu .ui-menu .ui-selectmenu-optgroup{font-size:1em;font-weight:bold;line-height:1.5;padding:2px 0.4em;margin:0.5em 0 0 0;height:auto;border:0}.ui-selectmenu-open{display:block}.ui-selectmenu-text{display:block;margin-right:20px;overflow:hidden;text-overflow:ellipsis}.ui-selectmenu-button.ui-button{text-align:left;white-space:nowrap;width:14em}.ui-selectmenu-icon.ui-icon{float:right;margin-top:0}.ui-slider{position:relative;text-align:left}.ui-slider .ui-slider-handle{position:absolute;z-index:2;width:1.2em;height:1.2em;cursor:default;-ms-touch-action:none;touch-action:none}.ui-slider .ui-slider-range{position:absolute;z-index:1;font-size:.7em;display:block;border:0;background-position:0 0}.ui-slider.ui-state-disabled .ui-slider-handle,.ui-slider.ui-state-disabled .ui-slider-range{filter:inherit}.ui-slider-horizontal{height:.8em}.ui-slider-horizontal .ui-slider-handle{top:-.3em;margin-left:-.6em}.ui-slider-horizontal .ui-slider-range{top:0;height:100%}.ui-slider-horizontal .ui-slider-range-min{left:0}.ui-slider-horizontal .ui-slider-range-max{right:0}.ui-slider-vertical{width:.8em;height:100px}.ui-slider-vertical .ui-slider-handle{left:-.3em;margin-left:0;margin-bottom:-.6em}.ui-slider-vertical .ui-slider-range{left:0;width:100%}.ui-slider-vertical .ui-slider-range-min{bottom:0}.ui-slider-vertical .ui-slider-range-max{top:0}.ui-spinner{position:relative;display:inline-block;overflow:hidden;padding:0;vertical-align:middle}.ui-spinner-input{border:none;background:none;color:inherit;padding:.222em 0;margin:.2em 0;vertical-align:middle;margin-left:.4em;margin-right:2em}.ui-spinner-button{width:1.6em;height:50%;font-size:.5em;padding:0;margin:0;text-align:center;position:absolute;cursor:default;display:block;overflow:hidden;right:0}.ui-spinner a.ui-spinner-button{border-top-style:none;border-bottom-style:none;border-right-style:none}.ui-spinner-up{top:0}.ui-spinner-down{bottom:0}.ui-tabs{position:relative;padding:.2em}.ui-tabs .ui-tabs-nav{margin:0;padding:.2em .2em 0}.ui-tabs .ui-tabs-nav li{list-style:none;float:left;position:relative;top:0;margin:1px .2em 0 0;border-bottom-width:0;padding:0;white-space:nowrap}.ui-tabs .ui-tabs-nav .ui-tabs-anchor{float:left;padding:.5em 1em;text-decoration:none}.ui-tabs .ui-tabs-nav li.ui-tabs-active{margin-bottom:-1px;padding-bottom:1px}.ui-tabs .ui-tabs-nav li.ui-tabs-active .ui-tabs-anchor,.ui-tabs .ui-tabs-nav li.ui-state-disabled .ui-tabs-anchor,.ui-tabs .ui-tabs-nav li.ui-tabs-loading .ui-tabs-anchor{cursor:text}.ui-tabs-collapsible .ui-tabs-nav li.ui-tabs-active .ui-tabs-anchor{cursor:pointer}.ui-tabs .ui-tabs-panel{display:block;border-width:0;padding:1em 1.4em;background:none}.ui-widget{font-size:1rem;box-shadow:0 0 0 1px rgba(0,30,60,0.03),0 20px 20px -10px rgba(0,0,0,0.2);background:#fff;border-radius:4px;z-index:1050 !important;border-width:0}.ui-widget .ui-state-active,.ui-widget .ui-state-focus{margin:0;background:#0bb}.ui-widget .ui-state-active,.ui-widget .ui-state-active *,.ui-widget .ui-state-focus,.ui-widget .ui-state-focus *{color:#fff}.ui-widget.ui-datepicker{padding-left:10px;padding-right:10px;-webkit-transition:all 0.1875s cubic-bezier(0.25, 0, 0, 1.375);-o-transition:all 0.1875s cubic-bezier(0.25, 0, 0, 1.375);transition:all 0.1875s cubic-bezier(0.25, 0, 0, 1.375);-webkit-transform:scale(0.75);transform:scale(0.75);-webkit-transition-property:opacity, -webkit-transform;transition-property:opacity, transform}.ui-widget.ui-datepicker.ui-widget-active{-webkit-transform:scale(1);transform:scale(1);-webkit-transform-origin:50% 0;transform-origin:50% 0}.ui-widget.ui-datepicker .ui-datepicker-prev{top:2px !important;left:2px !important}.ui-widget.ui-datepicker .ui-datepicker-next{top:2px !important;right:2px !important}.ui-widget.ui-datepicker .ui-datepicker-month{font-weight:bold}.ui-widget.ui-datepicker tr>* a{text-align:center}.ui-widget.ui-datepicker td a{padding:.3em}.ui-widget.ui-autocomplete{padding:5px 0;max-height:240px;overflow:auto}.ui-widget.ui-autocomplete li{border:0;padding:0}.ui-widget.ui-autocomplete li .ui-menu-item-wrapper{padding:.4464285714rem 1.25rem}.ui-widget.ui-autocomplete li *{margin-top:0;margin-bottom:0}.ui-widget.ui-autocomplete li+li.ui-separator{margin-top:5px;padding-top:6px;border-top:1px solid rgba(0,30,60,0.075)}.ui-widget .ui-icon{overflow:visible}.ui-widget .ui-icon-circle-triangle-w:after,.ui-widget .ui-icon-circle-triangle-e:after{content:\'\';display:block;border:5px solid;border-top-color:transparent;border-bottom-color:transparent;position:absolute;width:0;height:0;top:5px;left:0}.ui-widget .ui-icon-circle-triangle-w:after{border-left-color:transparent}.ui-widget .ui-icon-circle-triangle-e:after{border-right-color:transparent;left:5px}.ui-sortable-handle,.ui-draggable-handle{cursor:move}tr.ui-sortable-helper{box-shadow:0 7px 10px rgba(0,0,0,0.2);border-radius:4px;display:table;z-index:2}tr.ui-sortable-helper>td,tr.ui-sortable-helper th{border:0 !important}tr.ui-sortable-helper>td:first-child,tr.ui-sortable-helper th:first-child{border-top-left-radius:4px;border-bottom-left-radius:4px}tr.ui-sortable-helper>td:last-child,tr.ui-sortable-helper th:last-child{border-top-right-radius:4px;border-bottom-right-radius:4px}.ui-draggable-dragging,.ui-sortable-sorting{z-index:5001 !important}.ui-resizable-n,.ui-resizable-s{cursor:ns-resize}.ui-resizable-e,.ui-resizable-w{cursor:ew-resize}.caret,.dropup .caret,.navbar-fixed-bottom .dropdown .caret{border:0 !important;margin-left:0;width:auto;height:auto;display:inline}.caret:after,.dropup .caret:after,.navbar-fixed-bottom .dropdown .caret:after{font-family:"arrows";text-transform:none;font-style:normal;font-weight:normal;line-height:.5;content:" c "}.dropdown-menu{-webkit-transform:scale(0.75);transform:scale(0.75);-webkit-transform-origin:50% 0;transform-origin:50% 0;-webkit-transition:all 0.1875s cubic-bezier(0.25, 0, 0, 1.375);-o-transition:all 0.1875s cubic-bezier(0.25, 0, 0, 1.375);transition:all 0.1875s cubic-bezier(0.25, 0, 0, 1.375);font-size:1rem;box-shadow:0 0 0 1px rgba(0,30,60,0.03),0 20px 20px -10px rgba(0,0,0,0.2);border-radius:4px !important;-webkit-transition-property:opacity, -webkit-transform;transition-property:opacity, transform;padding:5px 0 !important;pointer-events:none;font-style:normal;border-width:0;display:block;left:-9999px;max-height:50vh;min-width:100%;max-width:240px;overflow:auto;opacity:0;margin:0}.dropdown-menu>li>a{margin:0;display:block;padding:.25em 15px}.dropdown-menu>li>a>*{margin:0}.dropdown-menu>li>a em{font-style:oblique;color:#8b969e}.dropdown-menu>li>a [data-icon]{margin-right:.25em}.dropdown-menu .divider{margin:5px 0}.dropdown-menu .dropdown-header{text-transform:uppercase;letter-spacing:.15em;font-size:.75rem;font-weight:500;padding:.5em 15px !important}.dropdown-menu-lg>li>*{padding-top:.5em;padding-bottom:.5em}.dropdown-menu-right{left:auto;right:9999px}.dropdown.open>.dropdown-menu{pointer-events:auto;-webkit-transform:scale(1);transform:scale(1);opacity:1;left:0}.dropdown.open>.dropdown-menu-right{right:0;left:auto}.dropdown{cursor:pointer}.dropdown-inline{display:inline-block}.form-group>*:not(:last-child),.form-inline>*:not(:last-child){margin-right:1em}.form-horizontal .form-group>*:not(:last-child),.form-horizontal .form-inline>*:not(:last-child){margin-right:0}.form-group>* label,.form-inline>* label{vertical-align:middle;margin:.6785714286rem 0}.help-block{display:block;color:#8b969e;font-style:oblique;font-weight:normal;font-size:.9285714286rem;margin:.25em 0}.help-block:empty{display:none}.help-block p{margin:0;display:inline}.help-block-inline{display:inline}.form-group-lg{font-size:1.1428571429rem}.form-footer{margin:2em 0}.form-footer:first-child{margin-top:0}.form-footer:last-child{margin-bottom:0}.btn{border-width:0;margin:0;cursor:pointer;overflow:hidden;text-overflow:ellipsis;font-size:1rem;-webkit-transition:all .25s cubic-bezier(0.25, 0, 0, 1);-o-transition:all .25s cubic-bezier(0.25, 0, 0, 1);transition:all .25s cubic-bezier(0.25, 0, 0, 1);height:2.8571428571rem;line-height:1.5 !important;font-weight:bold;box-shadow:0 0 0 1px rgba(0,30,60,0.03),0 3px 3px -1.5px rgba(0,0,0,0.03)}.btn-red{color:#fff;background-color:#ff694b;border-color:#ff694b}.btn-red:focus,.btn-red.focus{color:#fff;background-color:#ff3c2b}.btn-red:hover{color:#fff;background-color:#ff3c2b}.btn-red:active,.btn-red.active,.open>.btn-red.dropdown-toggle{color:#fff;background-color:#ff3c2b}.btn-red:active:hover,.btn-red:active:focus,.btn-red:active.focus,.btn-red.active:hover,.btn-red.active:focus,.btn-red.active.focus,.open>.btn-red.dropdown-toggle:hover,.open>.btn-red.dropdown-toggle:focus,.open>.btn-red.dropdown-toggle.focus{color:#fff;background-color:#ff3c2b}.btn-red:active,.btn-red.active,.open>.btn-red.dropdown-toggle{background-image:none}.btn-red.disabled:hover,.btn-red.disabled:focus,.btn-red.disabled.focus,.btn-red[disabled]:hover,.btn-red[disabled]:focus,.btn-red[disabled].focus,fieldset[disabled] .btn-red:hover,fieldset[disabled] .btn-red:focus,fieldset[disabled] .btn-red.focus{background-color:#ff694b;border-color:#ff694b}.btn-red .badge{color:#ff694b;background-color:#fff}.btn-blue{color:#fff;background-color:#0bb;border-color:#0bb}.btn-blue:focus,.btn-blue.focus{color:#fff;background-color:#009595}.btn-blue:hover{color:#fff;background-color:#009595}.btn-blue:active,.btn-blue.active,.open>.btn-blue.dropdown-toggle{color:#fff;background-color:#009595}.btn-blue:active:hover,.btn-blue:active:focus,.btn-blue:active.focus,.btn-blue.active:hover,.btn-blue.active:focus,.btn-blue.active.focus,.open>.btn-blue.dropdown-toggle:hover,.open>.btn-blue.dropdown-toggle:focus,.open>.btn-blue.dropdown-toggle.focus{color:#fff;background-color:#009595}.btn-blue:active,.btn-blue.active,.open>.btn-blue.dropdown-toggle{background-image:none}.btn-blue.disabled:hover,.btn-blue.disabled:focus,.btn-blue.disabled.focus,.btn-blue[disabled]:hover,.btn-blue[disabled]:focus,.btn-blue[disabled].focus,fieldset[disabled] .btn-blue:hover,fieldset[disabled] .btn-blue:focus,fieldset[disabled] .btn-blue.focus{background-color:#0bb;border-color:#0bb}.btn-blue .badge{color:#0bb;background-color:#fff}.btn-navy{color:#fff;background-color:#005e7a;border-color:#005e7a}.btn-navy:focus,.btn-navy.focus{color:#fff;background-color:#003645}.btn-navy:hover{color:#fff;background-color:#003645}.btn-navy:active,.btn-navy.active,.open>.btn-navy.dropdown-toggle{color:#fff;background-color:#003645}.btn-navy:active:hover,.btn-navy:active:focus,.btn-navy:active.focus,.btn-navy.active:hover,.btn-navy.active:focus,.btn-navy.active.focus,.open>.btn-navy.dropdown-toggle:hover,.open>.btn-navy.dropdown-toggle:focus,.open>.btn-navy.dropdown-toggle.focus{color:#fff;background-color:#003645}.btn-navy:active,.btn-navy.active,.open>.btn-navy.dropdown-toggle{background-image:none}.btn-navy.disabled:hover,.btn-navy.disabled:focus,.btn-navy.disabled.focus,.btn-navy[disabled]:hover,.btn-navy[disabled]:focus,.btn-navy[disabled].focus,fieldset[disabled] .btn-navy:hover,fieldset[disabled] .btn-navy:focus,fieldset[disabled] .btn-navy.focus{background-color:#005e7a;border-color:#005e7a}.btn-navy .badge{color:#005e7a;background-color:#fff}.btn-green{color:#fff;background-color:#7ec631;border-color:#7ec631}.btn-green:focus,.btn-green.focus{color:#fff;background-color:#48a71c}.btn-green:hover{color:#fff;background-color:#48a71c}.btn-green:active,.btn-green.active,.open>.btn-green.dropdown-toggle{color:#fff;background-color:#48a71c}.btn-green:active:hover,.btn-green:active:focus,.btn-green:active.focus,.btn-green.active:hover,.btn-green.active:focus,.btn-green.active.focus,.open>.btn-green.dropdown-toggle:hover,.open>.btn-green.dropdown-toggle:focus,.open>.btn-green.dropdown-toggle.focus{color:#fff;background-color:#48a71c}.btn-green:active,.btn-green.active,.open>.btn-green.dropdown-toggle{background-image:none}.btn-green.disabled:hover,.btn-green.disabled:focus,.btn-green.disabled.focus,.btn-green[disabled]:hover,.btn-green[disabled]:focus,.btn-green[disabled].focus,fieldset[disabled] .btn-green:hover,fieldset[disabled] .btn-green:focus,fieldset[disabled] .btn-green.focus{background-color:#7ec631;border-color:#7ec631}.btn-green .badge{color:#7ec631;background-color:#fff}.btn-orange{color:#fff;background-color:#ff694b;border-color:#ff694b}.btn-orange:focus,.btn-orange.focus{color:#fff;background-color:#ff3c2b}.btn-orange:hover{color:#fff;background-color:#ff3c2b}.btn-orange:active,.btn-orange.active,.open>.btn-orange.dropdown-toggle{color:#fff;background-color:#ff3c2b}.btn-orange:active:hover,.btn-orange:active:focus,.btn-orange:active.focus,.btn-orange.active:hover,.btn-orange.active:focus,.btn-orange.active.focus,.open>.btn-orange.dropdown-toggle:hover,.open>.btn-orange.dropdown-toggle:focus,.open>.btn-orange.dropdown-toggle.focus{color:#fff;background-color:#ff3c2b}.btn-orange:active,.btn-orange.active,.open>.btn-orange.dropdown-toggle{background-image:none}.btn-orange.disabled:hover,.btn-orange.disabled:focus,.btn-orange.disabled.focus,.btn-orange[disabled]:hover,.btn-orange[disabled]:focus,.btn-orange[disabled].focus,fieldset[disabled] .btn-orange:hover,fieldset[disabled] .btn-orange:focus,fieldset[disabled] .btn-orange.focus{background-color:#ff694b;border-color:#ff694b}.btn-orange .badge{color:#ff694b;background-color:#fff}.btn-yellow{color:#fff;background-color:#fc0;border-color:#fc0}.btn-yellow:focus,.btn-yellow.focus{color:#fff;background-color:#ffb100}.btn-yellow:hover{color:#fff;background-color:#ffb100}.btn-yellow:active,.btn-yellow.active,.open>.btn-yellow.dropdown-toggle{color:#fff;background-color:#ffb100}.btn-yellow:active:hover,.btn-yellow:active:focus,.btn-yellow:active.focus,.btn-yellow.active:hover,.btn-yellow.active:focus,.btn-yellow.active.focus,.open>.btn-yellow.dropdown-toggle:hover,.open>.btn-yellow.dropdown-toggle:focus,.open>.btn-yellow.dropdown-toggle.focus{color:#fff;background-color:#ffb100}.btn-yellow:active,.btn-yellow.active,.open>.btn-yellow.dropdown-toggle{background-image:none}.btn-yellow.disabled:hover,.btn-yellow.disabled:focus,.btn-yellow.disabled.focus,.btn-yellow[disabled]:hover,.btn-yellow[disabled]:focus,.btn-yellow[disabled].focus,fieldset[disabled] .btn-yellow:hover,fieldset[disabled] .btn-yellow:focus,fieldset[disabled] .btn-yellow.focus{background-color:#fc0;border-color:#fc0}.btn-yellow .badge{color:#fc0;background-color:#fff}.btn-purple{color:#fff;background-color:#7f6cc5;border-color:#7f6cc5}.btn-purple:focus,.btn-purple.focus{color:#fff;background-color:#483da5}.btn-purple:hover{color:#fff;background-color:#483da5}.btn-purple:active,.btn-purple.active,.open>.btn-purple.dropdown-toggle{color:#fff;background-color:#483da5}.btn-purple:active:hover,.btn-purple:active:focus,.btn-purple:active.focus,.btn-purple.active:hover,.btn-purple.active:focus,.btn-purple.active.focus,.open>.btn-purple.dropdown-toggle:hover,.open>.btn-purple.dropdown-toggle:focus,.open>.btn-purple.dropdown-toggle.focus{color:#fff;background-color:#483da5}.btn-purple:active,.btn-purple.active,.open>.btn-purple.dropdown-toggle{background-image:none}.btn-purple.disabled:hover,.btn-purple.disabled:focus,.btn-purple.disabled.focus,.btn-purple[disabled]:hover,.btn-purple[disabled]:focus,.btn-purple[disabled].focus,fieldset[disabled] .btn-purple:hover,fieldset[disabled] .btn-purple:focus,fieldset[disabled] .btn-purple.focus{background-color:#7f6cc5;border-color:#7f6cc5}.btn-purple .badge{color:#7f6cc5;background-color:#fff}.btn-white{color:#484e53;background-color:#fff;border-color:#fff}.btn-white:focus,.btn-white.focus{color:#484e53;background-color:#f9fafb}.btn-white:hover{color:#484e53;background-color:#f9fafb}.btn-white:active,.btn-white.active,.open>.btn-white.dropdown-toggle{color:#484e53;background-color:#f9fafb}.btn-white:active:hover,.btn-white:active:focus,.btn-white:active.focus,.btn-white.active:hover,.btn-white.active:focus,.btn-white.active.focus,.open>.btn-white.dropdown-toggle:hover,.open>.btn-white.dropdown-toggle:focus,.open>.btn-white.dropdown-toggle.focus{color:#484e53;background-color:#f9fafb}.btn-white:active,.btn-white.active,.open>.btn-white.dropdown-toggle{background-image:none}.btn-white.disabled:hover,.btn-white.disabled:focus,.btn-white.disabled.focus,.btn-white[disabled]:hover,.btn-white[disabled]:focus,.btn-white[disabled].focus,fieldset[disabled] .btn-white:hover,fieldset[disabled] .btn-white:focus,fieldset[disabled] .btn-white.focus{background-color:#fff;border-color:#fff}.btn-white .badge{color:#fff;background-color:#484e53}.btn-default{color:#484e53;background-color:#f0f2f4;border-color:#f0f2f4}.btn-default:focus,.btn-default.focus{color:#484e53;background-color:#e9ebef}.btn-default:hover{color:#484e53;background-color:#e9ebef}.btn-default:active,.btn-default.active,.open>.btn-default.dropdown-toggle{color:#484e53;background-color:#e9ebef}.btn-default:active:hover,.btn-default:active:focus,.btn-default:active.focus,.btn-default.active:hover,.btn-default.active:focus,.btn-default.active.focus,.open>.btn-default.dropdown-toggle:hover,.open>.btn-default.dropdown-toggle:focus,.open>.btn-default.dropdown-toggle.focus{color:#484e53;background-color:#e9ebef}.btn-default:active,.btn-default.active,.open>.btn-default.dropdown-toggle{background-image:none}.btn-default.disabled:hover,.btn-default.disabled:focus,.btn-default.disabled.focus,.btn-default[disabled]:hover,.btn-default[disabled]:focus,.btn-default[disabled].focus,fieldset[disabled] .btn-default:hover,fieldset[disabled] .btn-default:focus,fieldset[disabled] .btn-default.focus{background-color:#f0f2f4;border-color:#f0f2f4}.btn-default .badge{color:#f0f2f4;background-color:#484e53}.btn-clear,.btn-text,.btn-link{background:transparent !important}.btn-text,.btn.text-inherit{color:inherit}.btn-text:hover,.btn-text:focus,.btn.text-inherit:hover,.btn.text-inherit:focus{color:inherit}.btn[class*="btn-highlight"],.btn-default,.btn-clear,.btn-text,.btn-link{box-shadow:none}.btn-highlight-info{color:#0aa;background-color:#edfafa;border-color:transparent}.btn-highlight-info:focus,.btn-highlight-info.focus{color:#0aa;background-color:#e4f8f8}.btn-highlight-info:hover{color:#0aa;background-color:#e4f8f8}.btn-highlight-info:active,.btn-highlight-info.active,.open>.btn-highlight-info.dropdown-toggle{color:#0aa;background-color:#e4f8f8}.btn-highlight-info:active:hover,.btn-highlight-info:active:focus,.btn-highlight-info:active.focus,.btn-highlight-info.active:hover,.btn-highlight-info.active:focus,.btn-highlight-info.active.focus,.open>.btn-highlight-info.dropdown-toggle:hover,.open>.btn-highlight-info.dropdown-toggle:focus,.open>.btn-highlight-info.dropdown-toggle.focus{color:#0aa;background-color:#e4f8f8}.btn-highlight-info:active,.btn-highlight-info.active,.open>.btn-highlight-info.dropdown-toggle{background-image:none}.btn-highlight-info.disabled:hover,.btn-highlight-info.disabled:focus,.btn-highlight-info.disabled.focus,.btn-highlight-info[disabled]:hover,.btn-highlight-info[disabled]:focus,.btn-highlight-info[disabled].focus,fieldset[disabled] .btn-highlight-info:hover,fieldset[disabled] .btn-highlight-info:focus,fieldset[disabled] .btn-highlight-info.focus{background-color:#edfafa;border-color:transparent}.btn-highlight-info .badge{color:#edfafa;background-color:#0aa}.btn-highlight-success{color:#48a71c;background-color:#f3faec;border-color:transparent}.btn-highlight-success:focus,.btn-highlight-success.focus{color:#48a71c;background-color:#edf8e3}.btn-highlight-success:hover{color:#48a71c;background-color:#edf8e3}.btn-highlight-success:active,.btn-highlight-success.active,.open>.btn-highlight-success.dropdown-toggle{color:#48a71c;background-color:#edf8e3}.btn-highlight-success:active:hover,.btn-highlight-success:active:focus,.btn-highlight-success:active.focus,.btn-highlight-success.active:hover,.btn-highlight-success.active:focus,.btn-highlight-success.active.focus,.open>.btn-highlight-success.dropdown-toggle:hover,.open>.btn-highlight-success.dropdown-toggle:focus,.open>.btn-highlight-success.dropdown-toggle.focus{color:#48a71c;background-color:#edf8e3}.btn-highlight-success:active,.btn-highlight-success.active,.open>.btn-highlight-success.dropdown-toggle{background-image:none}.btn-highlight-success.disabled:hover,.btn-highlight-success.disabled:focus,.btn-highlight-success.disabled.focus,.btn-highlight-success[disabled]:hover,.btn-highlight-success[disabled]:focus,.btn-highlight-success[disabled].focus,fieldset[disabled] .btn-highlight-success:hover,fieldset[disabled] .btn-highlight-success:focus,fieldset[disabled] .btn-highlight-success.focus{background-color:#f3faec;border-color:transparent}.btn-highlight-success .badge{color:#f3faec;background-color:#48a71c}.btn-highlight-danger{color:#ff694b;background-color:#fff5f4;border-color:transparent}.btn-highlight-danger:focus,.btn-highlight-danger.focus{color:#ff694b;background-color:#fff0ef}.btn-highlight-danger:hover{color:#ff694b;background-color:#fff0ef}.btn-highlight-danger:active,.btn-highlight-danger.active,.open>.btn-highlight-danger.dropdown-toggle{color:#ff694b;background-color:#fff0ef}.btn-highlight-danger:active:hover,.btn-highlight-danger:active:focus,.btn-highlight-danger:active.focus,.btn-highlight-danger.active:hover,.btn-highlight-danger.active:focus,.btn-highlight-danger.active.focus,.open>.btn-highlight-danger.dropdown-toggle:hover,.open>.btn-highlight-danger.dropdown-toggle:focus,.open>.btn-highlight-danger.dropdown-toggle.focus{color:#ff694b;background-color:#fff0ef}.btn-highlight-danger:active,.btn-highlight-danger.active,.open>.btn-highlight-danger.dropdown-toggle{background-image:none}.btn-highlight-danger.disabled:hover,.btn-highlight-danger.disabled:focus,.btn-highlight-danger.disabled.focus,.btn-highlight-danger[disabled]:hover,.btn-highlight-danger[disabled]:focus,.btn-highlight-danger[disabled].focus,fieldset[disabled] .btn-highlight-danger:hover,fieldset[disabled] .btn-highlight-danger:focus,fieldset[disabled] .btn-highlight-danger.focus{background-color:#fff5f4;border-color:transparent}.btn-highlight-danger .badge{color:#fff5f4;background-color:#ff694b}.btn-highlight-warning{color:#ff6316;background-color:#fff6ec;border-color:transparent}.btn-highlight-warning:focus,.btn-highlight-warning.focus{color:#ff6316;background-color:#fff2e3}.btn-highlight-warning:hover{color:#ff6316;background-color:#fff2e3}.btn-highlight-warning:active,.btn-highlight-warning.active,.open>.btn-highlight-warning.dropdown-toggle{color:#ff6316;background-color:#fff2e3}.btn-highlight-warning:active:hover,.btn-highlight-warning:active:focus,.btn-highlight-warning:active.focus,.btn-highlight-warning.active:hover,.btn-highlight-warning.active:focus,.btn-highlight-warning.active.focus,.open>.btn-highlight-warning.dropdown-toggle:hover,.open>.btn-highlight-warning.dropdown-toggle:focus,.open>.btn-highlight-warning.dropdown-toggle.focus{color:#ff6316;background-color:#fff2e3}.btn-highlight-warning:active,.btn-highlight-warning.active,.open>.btn-highlight-warning.dropdown-toggle{background-image:none}.btn-highlight-warning.disabled:hover,.btn-highlight-warning.disabled:focus,.btn-highlight-warning.disabled.focus,.btn-highlight-warning[disabled]:hover,.btn-highlight-warning[disabled]:focus,.btn-highlight-warning[disabled].focus,fieldset[disabled] .btn-highlight-warning:hover,fieldset[disabled] .btn-highlight-warning:focus,fieldset[disabled] .btn-highlight-warning.focus{background-color:#fff6ec;border-color:transparent}.btn-highlight-warning .badge{color:#fff6ec;background-color:#ff6316}.btn-lg,.btn-group-lg>.btn{height:4.2857142857rem;font-size:1.1428571429rem}.btn-sm,.btn-group-sm>.btn{height:2.2857142857rem;font-size:.9285714286rem}.btn-xs,.btn-group-xs>.btn{padding:.1607142857rem .625rem;height:1.7142857143rem;font-size:.9285714286rem}.btn-md{padding:.3928571429rem 1.5rem;height:3.7142857143rem;font-size:1rem}.btn-pill{border-radius:200px }.btn-icon{padding-left:0;padding-right:0;width:2.8571428571rem;min-width:2.8571428571rem}.btn-icon.btn-xs,.btn-group-xs>.btn-icon.btn{width:1.7142857143rem;min-width:1.7142857143rem}.btn-icon.btn-sm,.btn-group-sm>.btn-icon.btn{width:2.2857142857rem;min-width:2.2857142857rem}.btn-icon.btn-md{width:3.7142857143rem;min-width:3.7142857143rem}.btn-icon.btn-lg,.btn-group-lg>.btn-icon.btn{width:4.2857142857rem;min-width:4.2857142857rem}.btn-icon .icon,.btn-icon .glyph{margin:0;position:absolute;top:50%;left:50%;-webkit-transform:translate(-50%, -50%);transform:translate(-50%, -50%)}.btn-icon-slim{min-width:0}.btn-block,.btn-slim,.btn-link,.btn-text{padding-left:0;padding-right:0}.btn.active,.btn:active{-webkit-box-shadow:none;box-shadow:none}.btn.disabled,.btn[disabled]{opacity:.375}.btn-file:before{content:attr(data-placeholder)}.btn-file[data-value]:before{content:attr(data-placeholder) " "}.btn-file[data-value]:after{content:"(" attr(data-value) ")"}.btn-file input{position:absolute;opacity:0}.btn-inliner .btn{margin-bottom:.3rem}.btn-toolbar{margin-left:-2px;margin-right:-2px;font-size:0}.btn-toolbar .btn-group{margin-left:2px;margin-right:2px;float:none}.form-control,.input-group-addon,.form-control-static,.form-grid .form-row .form-label label,.option{line-height:1.5 !important;border-width:0 !important;font-size:1rem}.form-group-lg .form-control,.input-group-lg .form-control,.form-group-lg .input-group-addon,.input-group-lg .input-group-addon,.form-group-lg .form-control-static,.form-group-lg .form-grid .form-row .form-label label,.form-grid .form-row .form-label .form-group-lg label,.input-group-lg .form-control-static,.input-group-lg .form-grid .form-row .form-label label,.form-grid .form-row .form-label .input-group-lg label,.form-group-lg .option,.input-group-lg .option{font-size:1.1428571429rem}.form-group-sm .form-control,.input-group-sm .form-control,.form-group-sm .input-group-addon,.input-group-sm .input-group-addon,.form-group-sm .form-control-static,.form-group-sm .form-grid .form-row .form-label label,.form-grid .form-row .form-label .form-group-sm label,.input-group-sm .form-control-static,.input-group-sm .form-grid .form-row .form-label label,.form-grid .form-row .form-label .input-group-sm label,.form-group-sm .option,.input-group-sm .option{font-size:.9285714286rem}.form-control.input-lg,.input-group-lg>.form-control,.input-group-lg>.input-group-btn>.form-control.btn,.input-group-addon.input-lg,.input-group-lg>.input-group-addon,.input-group-lg>.input-group-btn>.input-group-addon.btn,.form-control-static.input-lg,.input-group-lg>.form-control-static.form-control,.form-grid .form-row .form-label .input-group-lg>label.form-control,.input-group-lg>.form-control-static.input-group-addon,.form-grid .form-row .form-label .input-group-lg>label.input-group-addon,.input-group-lg>.input-group-btn>.form-control-static.btn,.form-grid .form-row .form-label .input-group-lg>.input-group-btn>label.btn,.form-grid .form-row .form-label label.input-lg,.option.input-lg,.input-group-lg>.option.form-control,.input-group-lg>.option.input-group-addon,.input-group-lg>.input-group-btn>.option.btn{font-size:1.1428571429rem}.form-control.input-sm,.input-group-sm>.form-control,.input-group-sm>.input-group-btn>.form-control.btn,.input-group-addon.input-sm,.input-group-sm>.input-group-addon,.input-group-sm>.input-group-btn>.input-group-addon.btn,.form-control-static.input-sm,.input-group-sm>.form-control-static.form-control,.form-grid .form-row .form-label .input-group-sm>label.form-control,.input-group-sm>.form-control-static.input-group-addon,.form-grid .form-row .form-label .input-group-sm>label.input-group-addon,.input-group-sm>.input-group-btn>.form-control-static.btn,.form-grid .form-row .form-label .input-group-sm>.input-group-btn>label.btn,.form-grid .form-row .form-label label.input-sm,.option.input-sm,.input-group-sm>.option.form-control,.input-group-sm>.option.input-group-addon,.input-group-sm>.input-group-btn>.option.btn{font-size:.9285714286rem}.form-control::-ms-expand,.input-group-addon::-ms-expand,.form-control-static::-ms-expand,.form-grid .form-row .form-label label::-ms-expand,.option::-ms-expand{display:none}.form-control::-ms-clear,.input-group-addon::-ms-clear,.form-control-static::-ms-clear,.form-grid .form-row .form-label label::-ms-clear,.option::-ms-clear{display:none}.form-control::-ms-value,.input-group-addon::-ms-value,.form-control-static::-ms-value,.form-grid .form-row .form-label label::-ms-value,.option::-ms-value{background:transparent !important}.form-control,.form-control-static,.form-grid .form-row .form-label label,textarea.form-control,.option{height:2.8571428571rem;line-height:1.5 !important;padding:.6785714286rem 1.25rem;border:0}.form-control.input-sm,.input-group-sm>.form-control,.input-group-sm>.input-group-btn>.form-control.btn,.form-control-static.input-sm,.input-group-sm>.form-control-static.form-control,.form-grid .form-row .form-label .input-group-sm>label.form-control,.input-group-sm>.form-control-static.input-group-addon,.form-grid .form-row .form-label .input-group-sm>label.input-group-addon,.input-group-sm>.input-group-btn>.form-control-static.btn,.form-grid .form-row .form-label .input-group-sm>.input-group-btn>label.btn,.form-grid .form-row .form-label label.input-sm,textarea.form-control.input-sm,.input-group-sm>textarea.form-control,.input-group-sm>.input-group-btn>textarea.form-control.btn,.option.input-sm,.input-group-sm>.option.form-control,.input-group-sm>.option.input-group-addon,.input-group-sm>.input-group-btn>.option.btn{height:2.2857142857rem;min-height:2.2857142857rem;padding:.4464285714rem .875rem}.form-control.input-lg,.input-group-lg>.form-control,.input-group-lg>.input-group-btn>.form-control.btn,.form-control-static.input-lg,.input-group-lg>.form-control-static.form-control,.form-grid .form-row .form-label .input-group-lg>label.form-control,.input-group-lg>.form-control-static.input-group-addon,.form-grid .form-row .form-label .input-group-lg>label.input-group-addon,.input-group-lg>.input-group-btn>.form-control-static.btn,.form-grid .form-row .form-label .input-group-lg>.input-group-btn>label.btn,.form-grid .form-row .form-label label.input-lg,textarea.form-control.input-lg,.input-group-lg>textarea.form-control,.input-group-lg>.input-group-btn>textarea.form-control.btn,.option.input-lg,.input-group-lg>.option.form-control,.input-group-lg>.option.input-group-addon,.input-group-lg>.input-group-btn>.option.btn{height:4.2857142857rem;min-height:4.2857142857rem;padding:1.2857142857rem 1.875rem}.form-control.input-md,.form-control-static.input-md,.form-grid .form-row .form-label label.input-md,textarea.form-control.input-md,.option.input-md{height:2.2857142857rem;min-height:2.2857142857rem;padding:.3928571429rem .875rem}textarea.form-control:not(.form-control-height){height:6em}.form-control{-webkit-transition:all .25s cubic-bezier(0.25, 0, 0, 1);-o-transition:all .25s cubic-bezier(0.25, 0, 0, 1);transition:all .25s cubic-bezier(0.25, 0, 0, 1);-webkit-transition-property:color,background-color,box-shadow;transition-property:color,background-color,box-shadow;-webkit-box-shadow:none;box-shadow:none;-webkit-appearance:none;text-overflow:ellipsis;box-shadow:none;color:#484e53}.form-control::-moz-placeholder{color:#a8b1b7;opacity:1}.form-control:-ms-input-placeholder{color:#a8b1b7}.form-control::-webkit-input-placeholder{color:#a8b1b7}.form-control.input-short{width:64px}.form-control.input-medium{width:240px}.form-control.input-long{width:100%}.form-control.input-pill{border-radius:200px !important}.form-control.input-dark{background-color:#00475c;color:white}.form-control.input-dark:hover,.form-control.input-dark:focus{background-color:white;color:#313539}.form-control.input-dark::-moz-placeholder{color:#00afc6;opacity:1}.form-control.input-dark:-ms-input-placeholder{color:#00afc6}.form-control.input-dark::-webkit-input-placeholder{color:#00afc6}.form-control.input-transparent{background-color:transparent}.form-control.input-white{background-color:white;box-shadow:0 0 0 1px rgba(0,30,60,0.03),0 3px 3px -1.5px rgba(0,0,0,0.03)}.form-control:not(:disabled):not(.disabled):hover{background-color:#e9ebef}.form-control:not(:disabled):not(.disabled):hover::-moz-placeholder{color:#5e666c;opacity:1}.form-control:not(:disabled):not(.disabled):hover:-ms-input-placeholder{color:#5e666c}.form-control:not(:disabled):not(.disabled):hover::-webkit-input-placeholder{color:#5e666c}.form-control:not(:disabled):not(.disabled):hover.input-white{background-color:#f9fafb}.form-control:focus{color:#484e53 !important;background-color:white !important;box-shadow:0 0 0 1px #0bb,0 15px 15px -7.5px rgba(0,0,0,0.15);border-radius:4px !important;z-index:3}.form-control:focus::-moz-placeholder{color:#8b969e !important;opacity:1}.form-control:focus:-ms-input-placeholder{color:#8b969e !important}.form-control:focus::-webkit-input-placeholder{color:#8b969e !important}.form-control[type="number"]:not(.spinner){-moz-appearance:textfield}.form-control[type="number"]:not(.spinner)::-webkit-inner-spin-button,.form-control[type="number"]:not(.spinner)::-webkit-outer-spin-button{-webkit-appearance:none;margin:0}.form-control-static,.form-grid .form-row .form-label label{display:block;height:auto !important;padding-left:0 !important;padding-right:0 !important;color:#484e53}.has-info .input-group-addon,.has-info .form-control{border-color:transparent !important;background-color:#edfafa;box-shadow:none}.has-info .input-group-addon::-moz-placeholder,.has-info .form-control::-moz-placeholder{color:#80d5d5;opacity:1}.has-info .input-group-addon:-ms-input-placeholder,.has-info .form-control:-ms-input-placeholder{color:#80d5d5}.has-info .input-group-addon::-webkit-input-placeholder,.has-info .form-control::-webkit-input-placeholder{color:#80d5d5}.has-info .input-group-addon,.has-info .form-control{color:#0aa}.has-info .form-control:not(:disabled):not(.disabled):hover{background-color:#def7f7;color:#007b7b}.has-info .form-control:not(:disabled):not(.disabled):hover::-moz-placeholder{color:#40bfbf;opacity:1}.has-info .form-control:not(:disabled):not(.disabled):hover:-ms-input-placeholder{color:#40bfbf}.has-info .form-control:not(:disabled):not(.disabled):hover::-webkit-input-placeholder{color:#40bfbf}.has-info .form-control:not(:disabled):not(.disabled):focus{box-shadow:0 0 0 1px #0bb,0 15px 15px -7.5px rgba(0,0,0,0.15)}.has-success .input-group-addon,.has-success .form-control{border-color:transparent !important;background-color:#f3faec;box-shadow:none}.has-success .input-group-addon::-moz-placeholder,.has-success .form-control::-moz-placeholder{color:#a4d38e;opacity:1}.has-success .input-group-addon:-ms-input-placeholder,.has-success .form-control:-ms-input-placeholder{color:#a4d38e}.has-success .input-group-addon::-webkit-input-placeholder,.has-success .form-control::-webkit-input-placeholder{color:#a4d38e}.has-success .input-group-addon,.has-success .form-control{color:#48a71c}.has-success .form-control:not(:disabled):not(.disabled):hover{background-color:#e9f7dc;color:#297610}.has-success .form-control:not(:disabled):not(.disabled):hover::-moz-placeholder{color:#76bd55;opacity:1}.has-success .form-control:not(:disabled):not(.disabled):hover:-ms-input-placeholder{color:#76bd55}.has-success .form-control:not(:disabled):not(.disabled):hover::-webkit-input-placeholder{color:#76bd55}.has-success .form-control:not(:disabled):not(.disabled):focus{box-shadow:0 0 0 1px #7ec631,0 15px 15px -7.5px rgba(0,0,0,0.15)}.has-warning .input-group-addon,.has-warning .form-control{border-color:transparent !important;background-color:#fff6ec;box-shadow:none}.has-warning .input-group-addon::-moz-placeholder,.has-warning .form-control::-moz-placeholder{color:#ffb18b;opacity:1}.has-warning .input-group-addon:-ms-input-placeholder,.has-warning .form-control:-ms-input-placeholder{color:#ffb18b}.has-warning .input-group-addon::-webkit-input-placeholder,.has-warning .form-control::-webkit-input-placeholder{color:#ffb18b}.has-warning .input-group-addon,.has-warning .form-control{color:#ff6316}.has-warning .form-control:not(:disabled):not(.disabled):hover{background-color:#ffefdc;color:#ff390d}.has-warning .form-control:not(:disabled):not(.disabled):hover::-moz-placeholder{color:#ff8a50;opacity:1}.has-warning .form-control:not(:disabled):not(.disabled):hover:-ms-input-placeholder{color:#ff8a50}.has-warning .form-control:not(:disabled):not(.disabled):hover::-webkit-input-placeholder{color:#ff8a50}.has-warning .form-control:not(:disabled):not(.disabled):focus{box-shadow:0 0 0 1px #ff9b26,0 15px 15px -7.5px rgba(0,0,0,0.15)}.has-danger .input-group-addon,.has-danger .form-control,.has-error .input-group-addon,.has-error .form-control{border-color:transparent !important;background-color:#fff5f4;box-shadow:none}.has-danger .input-group-addon::-moz-placeholder,.has-danger .form-control::-moz-placeholder,.has-error .input-group-addon::-moz-placeholder,.has-error .form-control::-moz-placeholder{color:#ffb4a5;opacity:1}.has-danger .input-group-addon:-ms-input-placeholder,.has-danger .form-control:-ms-input-placeholder,.has-error .input-group-addon:-ms-input-placeholder,.has-error .form-control:-ms-input-placeholder{color:#ffb4a5}.has-danger .input-group-addon::-webkit-input-placeholder,.has-danger .form-control::-webkit-input-placeholder,.has-error .input-group-addon::-webkit-input-placeholder,.has-error .form-control::-webkit-input-placeholder{color:#ffb4a5}.has-danger .input-group-addon,.has-danger .form-control,.has-error .input-group-addon,.has-error .form-control{color:#ff694b}.has-danger .form-control:not(:disabled):not(.disabled):hover,.has-error .form-control:not(:disabled):not(.disabled):hover{background-color:#ffedeb;color:#ff3c2b}.has-danger .form-control:not(:disabled):not(.disabled):hover::-moz-placeholder,.has-error .form-control:not(:disabled):not(.disabled):hover::-moz-placeholder{color:#ff8f78;opacity:1}.has-danger .form-control:not(:disabled):not(.disabled):hover:-ms-input-placeholder,.has-error .form-control:not(:disabled):not(.disabled):hover:-ms-input-placeholder{color:#ff8f78}.has-danger .form-control:not(:disabled):not(.disabled):hover::-webkit-input-placeholder,.has-error .form-control:not(:disabled):not(.disabled):hover::-webkit-input-placeholder{color:#ff8f78}.has-danger .form-control:not(:disabled):not(.disabled):focus,.has-error .form-control:not(:disabled):not(.disabled):focus{box-shadow:0 0 0 1px #ff694b,0 15px 15px -7.5px rgba(0,0,0,0.15)}.input-group-rounded>*:first-child,.input-group-rounded>*:first-child.input-group-btn .btn{border-top-left-radius:100px;border-bottom-left-radius:100px}.input-group-rounded>*:last-child,.input-group-rounded>*:last-child.input-group-btn .btn{border-top-right-radius:100px;border-bottom-right-radius:100px}.input-group-addon{color:#8b969e}.table tr.success{box-shadow:inset rgba(0,30,60,0.03) 0 0 #7ec631}.table tr.info{box-shadow:inset rgba(0,30,60,0.03) 0 0 #0bb}.table tr.warning{box-shadow:inset rgba(0,30,60,0.03) 0 0 #fc0}.table tr.danger{box-shadow:inset rgba(0,30,60,0.03) 0 0 #ff694b}.table-flush th:first-child,.table-flush td:first-child{padding-left:0}.table-flush th:last-child,.table-flush td:last-child{padding-right:0}.table-justified th:last-child,.table-justified td:last-child{text-align:right}th.sm,td.sm{width:1px;white-space:nowrap}th.flush-left,td.flush-left{padding-left:0 !important}th.flush-right,td.flush-right{padding-right:0 !important}.table:not(.table-borderless)>thead>tr>*{border-width:1px}thead>tr>*,.table-label{text-transform:uppercase;letter-spacing:.15em;font-size:.75rem;font-weight:500;color:#8b969e}.table-borderless tr *{border-width:0 !important}.table tbody+tbody{border-top-width:1px}.table-compact th *,.table-compact td *{margin-top:0;margin-bottom:0}.table-middle th,.table-middle td{vertical-align:middle !important}.table-large{font-size:1rem}.table-large tbody th,.table-large tbody td,.table-large>td,.table-large>th{padding-top:1rem !important;padding-bottom:1rem !important}.card .table th,.card .table td{padding-left:1.875rem;padding-right:1.875rem}.table-condensed{font-size:.9285714286rem}.table-responsive{border-radius:4px}@media (min-width: 961px){.table-responsive{overflow:visible}}@media (max-width: 960px){.table-responsive{overflow:auto}html.touch .table-responsive{overflow:scroll;-webkit-overflow-scrolling:touch}}@media (min-width: 961px){.table-alignment{margin-left:-1.25rem;margin-right:-1.25rem}}.table-linked{overflow:hidden}.table-linked a{z-index:3}.table-linked .table-link{width:0 !important;padding:0 !important;vertical-align:top !important}.table-linked .table-link .table-anchor{position:absolute;display:block;height:100%;width:1000vw;z-index:2}.table{display:table}.table-caption{display:table-caption}.table-colgroup{display:table-column-group}.table-thead{display:table-header-group}.table-tfoot{display:table-footer-group}.table-tbody{display:table-row-group}.table-td{display:table-cell}.table-col{display:table-column}.table-tr{display:table-row}.table-sticky{box-shadow:0 1px 0 #ecedee;z-index:2;position:sticky;top:0;background:#f9fafb}tbody .table-sticky{top:28px;background:white}.table .secondary td,.table .secondary th{background:#f9fafb;color:#8b969e}.nav-stacked .nav-stacked{font-size:.9285714286rem}.nav-stacked .nav-stacked>li{margin-left:1em}.nav-stacked .nav-stacked>li>a{color:#8b969e}.nav-tabs{border:0;box-shadow:0 1px 0 rgba(0,30,60,0.075);color:#313539;display:flex;flex-direction:row;flex-wrap:wrap}.nav-tabs:before,.nav-tabs:after{display:none}.nav-tabs>li{float:none;flex:0 0 auto;background:transparent !important;margin:0}.nav-tabs>li:not(:first-child){margin-left:.75em}.nav-tabs>li:not(:last-child){margin-right:.75em}.nav-tabs>li>a,.nav-tabs>li>span{display:block;line-height:1.5;background:transparent !important;padding:1.2857142857rem 0;margin:0 !important;border:0 !important;border-radius:0}.nav-tabs>li.active{box-shadow:0 1px 0 #0bb}.nav-tabs>li.active a{color:#313539}.nav-tabs-sm>li>a,.nav-tabs-sm>li>span{font-size:.9285714286rem;padding:.6785714286rem 0}.nav-tabs-fill>li{flex:1 0 auto;margin:0 !important}.nav-tabs-fill>li>a,.nav-tabs-fill>li>span{text-align:center;padding-left:20px;padding-right:20px}html.touch .nav-tabs{flex-wrap:nowrap;overflow:hidden;overflow-y:scroll;-webkit-overflow-scrolling:touch}.card-tabs .nav-tabs{background:#f0f2f4;border-radius:4px 4px 0 0}.card-tabs .nav-tabs>li:first-child{border-top-left-radius:4px}.card-tabs .nav-tabs>li:last-child{border-top-right-radius:4px}.card-tabs .nav-tabs>li.active{box-shadow:0 1px 0 white !important;background:white !important}.tab-content>.tab-pane{height:0;display:block;overflow:hidden}.tab-content>.tab-pane:not(.active){padding:0}.tab-content>.tab-pane.active{height:auto;overflow:visible}.nav-pills>li>a{font-size:.9285714286rem;padding:.4464285714rem 1em}.alert{border:0;margin:1.5em 0}.alert:first-child{margin-top:0}.alert:last-child{margin-bottom:0}.alert strong{color:inherit;font-style:normal}.alert-default{background:#f9fafb;color:#8b969e}.alert-flush{margin:0}.alert-trim{padding-left:0;padding-right:0}.alert-link{font-weight:bold !important}.avatar{display:inline-block;vertical-align:middle}.avatar img{display:block;border-radius:50%;height:28px;width:28px}.avatar-square img{border-radius:4px}.avatar-sm img{height:20px;width:20px}kbd,code,pre{font-size:.8571428571rem}pre{padding:0;overflow:auto;border-width:0;resize:vertical;white-space:pre;padding:1.2857142857rem 1.875rem;border-radius:4px;font-size:.8571428571rem;-moz-tab-size:2;-o-tab-size:2;tab-size:2;margin:1em 0}pre:first-child{margin-top:0}pre:last-child{margin-bottom:0}.panel-code pre{border-radius:0;padding:40px 50px}@media (max-width: 960px){.panel-code pre{padding-left:7.5vw;padding-right:7.5vw}}.panel-footer .panel-code pre,.panel-body:last-child .panel-code pre{border-bottom-right-radius:4px;border-bottom-left-radius:4px}kbd{box-shadow:none}figure.highlight{tab-size:2}.code,code{font-family:"Monaco",monospace;font-size:.8571428571rem;font-weight:normal;padding:0}.highlight pre{background:#005e7a;color:white;overflow:auto}html.touch .highlight pre{overflow:scroll;-webkit-overflow-scrolling:touch}.highlight code{white-space:pre;display:block}.highlight code *{font-style:normal}.highlight .c{color:#00afc6;font-style:italic}.highlight .err{color:#a61717;background-color:#e3d2d2}.highlight .cm{color:#999988;font-style:italic}.highlight .cp{color:#999999}.highlight .c1{color:#999988;font-style:italic}.highlight .cs{color:#999999;font-style:italic}.highlight .gd{color:#000000;background-color:#fdd}.highlight .gd .x{color:#000000;background-color:#faa}.highlight .ge{font-style:italic}.highlight .gr{color:#a00}.highlight .gh{color:#999}.highlight .gi{color:#000000;background-color:#dfd}.highlight .gi .x{color:#000000;background-color:#afa}.highlight .go{color:#888}.highlight .gp{color:#555}.highlight .gu{color:#aaa}.highlight .gt{color:#a00}.highlight .kt{color:#445588}.highlight .m{color:#b7a5df}.highlight .n{color:#00d9d9}.highlight .s{color:#9ed53e}.highlight .na{color:#00afc6}.highlight .nb{color:#00d9d9}.highlight .nl{color:#00afc6}.highlight .nc{color:#fc0}.highlight .nd{color:#fc0}.highlight .no{color:#00afc6}.highlight .ni{color:#fc0}.highlight .ne{color:#990000}.highlight .nf{color:#990000}.highlight .nn{color:#555}.highlight .nt{color:#00d9d9}.highlight .nv{color:teal}.highlight .w{color:#bbb}.highlight .mf{color:#099}.highlight .mh{color:#099}.highlight .mi{color:#099}.highlight .mo{color:#099}.highlight .sb{color:#d14}.highlight .sc{color:#d14}.highlight .sd{color:#d14}.highlight .s2{color:#ff694b}.highlight .se{color:#d14}.highlight .sh{color:#d14}.highlight .si{color:#d14}.highlight .sx{color:#d14}.highlight .sr{color:#009926}.highlight .s1{color:#d14}.highlight .ss{color:#990073}.highlight .bp{color:#999}.highlight .vc{color:teal}.highlight .vg{color:teal}.highlight .vi{color:teal}.highlight .il{color:#099}.highlight .lineno{-webkit-user-select:none;-moz-user-select:none;-o-user-select:none}.highlight .lineno::-moz-selection{background-color:transparent}.highlight .lineno::selection{background-color:transparent}.label{text-transform:uppercase;letter-spacing:.15em;font-size:.75rem;font-weight:500;-webkit-transition:all .25s cubic-bezier(0.25, 0, 0, 1);-o-transition:all .25s cubic-bezier(0.25, 0, 0, 1);transition:all .25s cubic-bezier(0.25, 0, 0, 1);display:inline-block;text-align:inherit;padding:0;border:0}.label-default{color:#8b969e}.label-success{color:#5fb825}.label-info{color:#0aa}.label-warning{color:#ff821d}.label-danger{color:#ff4f39}.label-inherit{color:inherit}.label+.label:not(.block){margin-left:1.5em}a.label:hover.label-default,a.label:focus.label-default{color:#3f464e}a.label:hover.label-success,a.label:focus.label-success{color:#369115}a.label:hover.label-info,a.label:focus.label-info{color:#007b7b}a.label:hover.label-warning,a.label:focus.label-warning{color:#ff4b11}a.label:hover.label-danger,a.label:focus.label-danger{color:#ff2d21}.badge{border-radius:200px ;text-transform:uppercase;letter-spacing:.15em;font-size:.75rem;font-weight:500;line-height:1.8em;height:1.8em;min-width:1.8em;text-align:center;padding:0 7px;text-indent:1px;border:0}.badge-success{background:#7ec631;color:white}.badge-warning{background:#ff9b26;color:white}.badge-danger{background:#ff694b;color:white}.list-group-item .badge{float:right}.active .badge{color:#fff;background:#009797}.badge-digit{padding:0 2px}.badge-corner{position:absolute;top:0;right:0;-webkit-transform:translate(50%, -50%);transform:translate(50%, -50%)}.badges{font-size:0;display:block}.badges .badge{margin:2px 4px 2px 0}.progress{height:6px;overflow:visible;margin:1em 0}.progress:first-child{margin-top:0}.progress:last-child{margin-bottom:0}.progress,.progress .progress-bar{border-radius:100px;box-shadow:none}.tooltip{box-shadow:0 0 0 1px rgba(0,30,60,0.03),0 20px 20px -10px rgba(0,0,0,0.2);padding:0 !important}.tooltip,.tooltip .tooltip-inner,.tooltip .tooltip-arrow{border-radius:4px}.tooltip .tooltip-arrow{-webkit-transform:rotate(45deg);transform:rotate(45deg);background:#007699;box-shadow:0 0 0 1px rgba(0,30,60,0.03),0 20px 20px -10px rgba(0,0,0,0.2);border-width:0;height:12px;width:12px}.tooltip.top .tooltip-arrow{margin-bottom:-3px}.tooltip.bottom .tooltip-arrow{margin-top:-3px}.tooltip.left .tooltip-arrow{margin-right:-3px}.tooltip.right .tooltip-arrow{margin-left:-3px}.tooltip .tooltip-inner{font-size:.9285714286rem;padding:.6785714286rem 1.25rem;margin:0 !important;font-style:normal}.popover{box-shadow:0 0 0 1px rgba(0,30,60,0.03),0 20px 20px -10px rgba(0,0,0,0.2);font-size:1rem;border-width:0 !important;color:#fff;padding:0}.popover,.popover .popover-content,.popover .arrow{border-radius:4px}.popover .popover-content{border-radius:4px;margin:0 !important}.popover .popover-title,.popover .popover-content{padding:1.2857142857rem 1.875rem;background:#ff694b}.popover .arrow{width:20px;height:20px;background:#ff694b;box-shadow:0 0 0 1px rgba(0,30,60,0.03),0 20px 20px -10px rgba(0,0,0,0.2);-webkit-transform:rotate(45deg);transform:rotate(45deg)}.popover .arrow:after{display:none}.popover.top .arrow{margin:-10px;margin-bottom:-4px}.popover.bottom .arrow{margin:-10px;margin-top:-4px}.popover.left .arrow{margin:-10px;margin-right:-4px}.popover.right .arrow{margin:-10px;margin-left:-4px}.modal .modal-dialog{margin:auto;display:table;width:768px;max-width:100vw;height:100vh}.modal .modal-dialog.modal-sm{width:400px}.modal .modal-dialog.modal-lg{width:960px}.modal .modal-content{display:table-cell;vertical-align:middle;box-shadow:none}.modal.fade .modal-dialog{-webkit-transition:all .25s cubic-bezier(0.25, 0, 0, 1);-o-transition:all .25s cubic-bezier(0.25, 0, 0, 1);transition:all .25s cubic-bezier(0.25, 0, 0, 1);-webkit-transform:translate(0, -20px);transform:translate(0, -20px)}.modal.fade.in .modal-dialog{-webkit-transform:translate(0, 0);transform:translate(0, 0)}.modal-backdrop{display:block;position:absolute;width:100%;height:100%;top:0;left:0;position:fixed;z-index:1040}@media (max-width: 960px){.modal-content:not(.modal-content-flush){padding:7.5vw}}.panel{border-width:0;display:flex;flex-direction:column;display:block;border-width:0;background:white;box-shadow:0 0 0 1px rgba(0,30,60,0.03),0 3px 3px -1.5px rgba(0,0,0,0.03);border-radius:4px;margin:1em 0}.panel:first-child{margin-top:0}.panel:last-child{margin-bottom:0}.panel>*{border-color:transparent !important;flex:0 0 auto}.panel>*:first-child{border-top-right-radius:4px;border-top-left-radius:4px}.panel>*:last-child{border-bottom-right-radius:4px;border-bottom-left-radius:4px}.panel>*,.panel>*>.panel-fill{padding:20px 30px}.panel>*.panel-flush,.panel>*>.panel-fill.panel-flush{padding:0 !important}.panel>*.panel-flush-top,.panel>*>.panel-fill.panel-flush-top{padding-top:0 !important}.panel>*.panel-flush-bottom,.panel>*>.panel-fill.panel-flush-bottom{padding-bottom:0 !important}.panel-large>*,.panel-large>*>.panel-fill{padding:40px 50px}@media (max-width: 960px){.panel-large>*,.panel-large>*>.panel-fill{padding:5vw 7.5vw}}.panel>.panel-body{flex:1 0 auto}.panel>.panel-body>*:first-child{margin-top:0}.panel>.panel-body>*:last-child{margin-bottom:0}.panel>.panel-body>.panel-fill{display:block;position:absolute;width:100%;height:100%;top:0;left:0;overflow:auto}html.touch .panel>.panel-body>.panel-fill{overflow:scroll;-webkit-overflow-scrolling:touch}h1.panel-title,.h1.panel-title{font-size:1.7142857143rem}h2.panel-title,.h2.panel-title{font-size:1.7142857143rem}h3.panel-title,.h3.panel-title{font-size:1.2857142857rem}h4.panel-title,.h4.panel-title{font-size:1.1428571429rem}h5.panel-title,.h5.panel-title{font-size:1rem}h6.panel-title,.h6.panel-title{font-size:1rem}.list-group{display:block;border-width:0;background:white;box-shadow:0 0 0 1px rgba(0,30,60,0.03),0 3px 3px -1.5px rgba(0,0,0,0.03);border-radius:4px}.list-group .list-group-item{margin:0;border-width:0 0 1px 0}.list-group .list-group-item *{margin-top:0;margin-bottom:0}.list-group .list-group-item:last-child{border-width:0}.well{padding:1.2857142857rem 1.875rem;box-shadow:none;border:0}.well>*:first-child{margin-top:0}.well>*:last-child{margin-bottom:0}.row{margin:0}.container{padding-left:0;padding-right:0}@media (min-width: 961px){.container{width:90%;max-width:1320px}}@media (max-width: 960px){.container{width:auto}}@media (min-width: 961px){.row-reverse>[class*="col-lg-"]{float:right}}@media (max-width: 960px){[class*="col-lg-"]+[class*="col-lg-"]{margin-top:30px;margin-bottom:30px}[class*="col-lg-"]+[class*="col-lg-"]:first-child{margin-top:0}[class*="col-lg-"]+[class*="col-lg-"]:last-child{margin-bottom:0}}@media (max-width: 768px){[class*="col-md-"]+[class*="col-md-"]{margin-top:30px;margin-bottom:30px}[class*="col-md-"]+[class*="col-md-"]:first-child{margin-top:0}[class*="col-md-"]+[class*="col-md-"]:last-child{margin-bottom:0}}@media (max-width: 540px){[class*="col-sm-"]+[class*="col-sm-"]{margin-top:30px;margin-bottom:30px}[class*="col-sm-"]+[class*="col-sm-"]:first-child{margin-top:0}[class*="col-sm-"]+[class*="col-sm-"]:last-child{margin-bottom:0}}.carousel .carousel-control{background:transparent}.carousel .carousel-control:after{width:1em;display:block;position:absolute;left:0;top:0;bottom:0;right:0;margin:auto;height:1.6em;font-size:2rem}.carousel .carousel-indicators{bottom:10px}.carousel .carousel-indicators li{background:#fff;-webkit-transition:all .25s cubic-bezier(0.25, 0, 0, 1);-o-transition:all .25s cubic-bezier(0.25, 0, 0, 1);transition:all .25s cubic-bezier(0.25, 0, 0, 1);margin:0 2px;opacity:.25;height:8px;width:8px;border:0}.carousel .carousel-indicators li.active{opacity:1}.carousel .carousel-inner .item img{width:100%}.thumbnail{display:block;border-width:0;background:white;box-shadow:0 0 0 1px rgba(0,30,60,0.03),0 3px 3px -1.5px rgba(0,0,0,0.03);border-radius:4px}.thumbnail img{width:100%}.thumbnail .caption *{margin-top:0;margin-bottom:0}.range{-webkit-appearance:none;margin:0;width:100%;outline:none !important}.range::-moz-focus-outer{border:0}.range::-webkit-slider-runnable-track{width:100%;height:6px;cursor:pointer;box-shadow:none;background:#f0f2f4;border-radius:200px;border:0 solid transparent;color:transparent;-webkit-transition:all .25s cubic-bezier(0.25, 0, 0, 1);-o-transition:all .25s cubic-bezier(0.25, 0, 0, 1);transition:all .25s cubic-bezier(0.25, 0, 0, 1)}.range::-moz-range-track{width:100%;height:6px;cursor:pointer;box-shadow:none;background:#f0f2f4;border-radius:200px;border:0 solid transparent;color:transparent;-webkit-transition:all .25s cubic-bezier(0.25, 0, 0, 1);-o-transition:all .25s cubic-bezier(0.25, 0, 0, 1);transition:all .25s cubic-bezier(0.25, 0, 0, 1)}.range::-ms-track{width:100%;height:6px;cursor:pointer;box-shadow:none;background:#f0f2f4;border-radius:200px;border:0 solid transparent;color:transparent;-webkit-transition:all .25s cubic-bezier(0.25, 0, 0, 1);-o-transition:all .25s cubic-bezier(0.25, 0, 0, 1);transition:all .25s cubic-bezier(0.25, 0, 0, 1);background:transparent;border-width:5px 0}.range::-ms-fill-lower{box-shadow:none;background:#f0f2f4;border-radius:200px;border:0 solid transparent;color:transparent;-webkit-transition:all .25s cubic-bezier(0.25, 0, 0, 1);-o-transition:all .25s cubic-bezier(0.25, 0, 0, 1);transition:all .25s cubic-bezier(0.25, 0, 0, 1)}.range::-ms-fill-upper{box-shadow:none;background:#f0f2f4;border-radius:200px;border:0 solid transparent;color:transparent;-webkit-transition:all .25s cubic-bezier(0.25, 0, 0, 1);-o-transition:all .25s cubic-bezier(0.25, 0, 0, 1);transition:all .25s cubic-bezier(0.25, 0, 0, 1)}.range::-webkit-slider-thumb{box-shadow:none;border:0;height:16px;width:16px;border-radius:200px;background:#0bb;cursor:pointer;-webkit-transition:all .25s cubic-bezier(0.25, 0, 0, 1);-o-transition:all .25s cubic-bezier(0.25, 0, 0, 1);transition:all .25s cubic-bezier(0.25, 0, 0, 1);-webkit-appearance:none;margin-top:-5px}.range::-moz-range-thumb{box-shadow:none;border:0;height:16px;width:16px;border-radius:200px;background:#0bb;cursor:pointer;-webkit-transition:all .25s cubic-bezier(0.25, 0, 0, 1);-o-transition:all .25s cubic-bezier(0.25, 0, 0, 1);transition:all .25s cubic-bezier(0.25, 0, 0, 1)}.range::-ms-thumb{box-shadow:none;border:0;height:16px;width:16px;border-radius:200px;background:#0bb;cursor:pointer;-webkit-transition:all .25s cubic-bezier(0.25, 0, 0, 1);-o-transition:all .25s cubic-bezier(0.25, 0, 0, 1);transition:all .25s cubic-bezier(0.25, 0, 0, 1)}@supports (-ms-ime-align: auto){.range::-ms-thumb{margin-top:1px}}.range:hover::-webkit-slider-thumb{background:#0aa}.range:focus::-webkit-slider-thumb{background:#0aa}.range:hover::-moz-range-thumb{background:#0aa}.range:focus::-moz-range-thumb{background:#0aa}.range:hover::-ms-thumb{background:#0aa}.range:focus::-ms-thumb{background:#0aa}.range:hover::-webkit-slider-runnable-track{background:#e9ebef}.range:focus::-webkit-slider-runnable-track{background:#e9ebef}.range:hover::-moz-range-track{background:#e9ebef}.range:focus::-moz-range-track{background:#e9ebef}.range:hover::-ms-fill-lower{background:#e9ebef}.range:focus::-ms-fill-lower{background:#e9ebef}.range:hover::-ms-fill-upper{background:#e9ebef}.range:focus::-ms-fill-upper{background:#e9ebef}.breadcrumb-flush{padding:0}.breadcrumb>li:first-child .glyph{position:absolute;right:100%;top:50%;-webkit-transform:translate(-33%, -50%);transform:translate(-33%, -50%)}.breadcrumb>li:before{font-weight:normal;padding:0 .5em;opacity:.5}.card{display:block;border-width:0;background:white;box-shadow:0 0 0 1px rgba(0,30,60,0.03),0 3px 3px -1.5px rgba(0,0,0,0.03);border-radius:4px;display:flex;flex-direction:column}.card>.card-header,.card>.card-footer{flex:0 0 auto}.card>.card-body{flex:1 0 auto}.card.active{box-shadow:0 0 0 1px #0bb,0 15px 15px -7.5px rgba(0,0,0,0.15)}.card-footer,.card-header,.card-body,.card-padding{padding:20px 30px}.card-expand{margin:-20px -30px}.card-header h1,.card-header .h1,.card-header h2,.card-header .h2,.card-header h3,.card-header .h3,.card-header h4,.card-header .h4,.card-header h5,.card-header .h5,.card-header h6,.card-header .h6{margin:0}.card-flush-top{padding-top:0}.card-flush-bottom{padding-bottom:0}.card-flush-vertical{padding-top:0;padding-bottom:0}.card-flush{padding:0}.card-sm{padding:8px 12px}.card-control{display:block}.card-control .btn,.card-control .form-control,.card-control .input-group-addon,.card-control .form-control-static,.card-control .form-grid .form-row .form-label label,.form-grid .form-row .form-label .card-control label{display:block;margin:0 !important;height:4.2857142857rem;padding:1.3928571429rem 30px;border-radius:0;width:100%}.card-control .form-control{background:white}.card-control .form-control:not(:disabled):not(.disabled):hover{background-color:#f0f2f4}.card-control .btn,.card-control .input-group-addon{text-align:center}.card-footer .card-control:first-child .btn,.card-footer .card-control:first-child .form-control,.card-footer .card-control:first-child .input-group-addon,.card-footer .card-control:first-child .form-control-static,.card-footer .card-control:first-child .form-grid .form-row .form-label label,.form-grid .form-row .form-label .card-footer .card-control:first-child label{border-bottom-left-radius:4px}.card-footer .card-control:last-child .btn,.card-footer .card-control:last-child .form-control,.card-footer .card-control:last-child .input-group-addon,.card-footer .card-control:last-child .form-control-static,.card-footer .card-control:last-child .form-grid .form-row .form-label label,.form-grid .form-row .form-label .card-footer .card-control:last-child label{border-bottom-right-radius:4px}.card-body .card-control:first-child .btn,.card-body .card-control:first-child .form-control,.card-body .card-control:first-child .input-group-addon,.card-body .card-control:first-child .form-control-static,.card-body .card-control:first-child .form-grid .form-row .form-label label,.form-grid .form-row .form-label .card-body .card-control:first-child label{border-top-left-radius:4px}.card-body .card-control:last-child .btn,.card-body .card-control:last-child .form-control,.card-body .card-control:last-child .input-group-addon,.card-body .card-control:last-child .form-control-static,.card-body .card-control:last-child .form-grid .form-row .form-label label,.form-grid .form-row .form-label .card-body .card-control:last-child label{border-top-right-radius:4px}.card-toolbar{display:flex;flex-direction:row;flex-wrap:wrap;padding:0}.card-toolbar .card-control{display:block;flex:1 0 auto}.card-form{padding:0;display:table;width:100%}.card-form .card-formrow{display:table-row}.card-form .card-formrow .card-control{display:table-cell;vertical-align:middle}.card-form .card-formrow:not(:last-child) .card-control{border-bottom:1px solid rgba(0,30,60,0.075)}.card-list:not(:first-child){border-top:1px solid rgba(0,30,60,0.075)}.preview{margin:60px 0;background:white;border-radius:4px;display:flex;flex-direction:column;flex:1 0 auto;box-shadow:0 0 0 1px rgba(0,30,60,0.03),0 3px 3px -1.5px rgba(0,0,0,0.03);-webkit-transition:all .25s cubic-bezier(0.25, 0, 0, 1);-o-transition:all .25s cubic-bezier(0.25, 0, 0, 1);transition:all .25s cubic-bezier(0.25, 0, 0, 1)}.preview:first-child{margin-top:0}.preview:last-child{margin-bottom:0}.preview .preview-header{background-position:50% 50%;background-size:cover}.preview .preview-header:before{content:\'\';display:block;padding-bottom:50%}.preview .preview-body{display:flex;flex-direction:column;flex:1 0 auto}.preview .preview-body .preview-footer{flex:0 0 auto;padding:20px 30px}.preview .preview-body .preview-text{flex:1 0 auto;padding:20px 30px}.preview .preview-body .preview-text *{margin-top:0;margin-bottom:0}.preview .preview-body .preview-text h1,.preview .preview-body .preview-text .h1,.preview .preview-body .preview-text h2,.preview .preview-body .preview-text .h2,.preview .preview-body .preview-text h3,.preview .preview-body .preview-text .h3,.preview .preview-body .preview-text h4,.preview .preview-body .preview-text .h4,.preview .preview-body .preview-text h5,.preview .preview-body .preview-text .h5,.preview .preview-body .preview-text h6,.preview .preview-body .preview-text .h6{margin-bottom:20px}.preview .preview-body .preview-text ~ .preview-footer{padding-top:0}.preview.preview-link:hover,.preview.preview-link:focus{box-shadow:0 0 0 1px rgba(0,30,60,0.03),0 15px 15px -7.5px rgba(0,0,0,0.15)}.preview.preview-vertical .preview-header{flex:0 0 auto}.preview.preview-vertical .preview-body{flex:1 0 auto}.preview.preview-vertical .preview-header-grow{flex:1 0 auto}.preview.preview-vertical .preview-header-grow ~ .preview-body{flex:0 0 auto}.preview.preview-horizontal{display:flex;flex-direction:row}.preview.preview-horizontal .preview-header{flex:1 1 120px}.preview.preview-horizontal .preview-body{flex:3 1 260px}.preview:not(.preview-vertical):not(.preview-horizontal){display:flex;flex-direction:row;flex-wrap:wrap}.preview:not(.preview-vertical):not(.preview-horizontal) .preview-header{flex:1 0 120px}.preview:not(.preview-vertical):not(.preview-horizontal) .preview-body{flex:3 1 260px}.loading{text-align:center;margin:20px 0}.loading:after{margin:0 auto;content:\'\';display:block;font-size:30px;width:1em;height:1em;border-radius:50%;border:1px solid;border-top-color:rgba(0,30,60,0.03);border-right-color:rgba(0,30,60,0.03);-webkit-animation:spin .5s 0s linear infinite;-o-animation:spin .5s 0s linear infinite;animation:spin .5s 0s linear infinite}@-webkit-keyframes spin{0%{-webkit-transform:rotate(0);transform:rotate(0)}100%{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}@keyframes spin{0%{-webkit-transform:rotate(0);transform:rotate(0)}100%{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}.loading.loading-inline{height:10px;display:inline-block;margin:0 .375em 0 0;vertical-align:middle}.loading.loading-inline-after{margin:0 0 0 .375em}.loading.loading-inline:after{margin:-10px 0}.loading.loading-small.loading-inline{top:-1px}.loading.loading-small:after{font-size:12px;margin:-1px auto}.btn .loading:after{color:inherit}.loading-overlay{background:#f9fafb;border-radius:4px}.loading-overlay>*{pointer-events:none;opacity:.15}.loading-overlay .loading{display:block;position:absolute;width:100%;height:100%;top:0;left:0;margin:0;opacity:1}.loading-overlay .loading:after{display:block;position:absolute;left:0;top:0;bottom:0;right:0;margin:auto}.message{margin:20px 0}.message .message-content{display:flex;flex-direction:row}.message .message-content>*{padding:0 .5rem}.message:not(.message-secondary) .message-content .message-header{padding-left:0}.message:not(.message-secondary) .message-content .message-body{padding-right:4rem}.message:not(.message-secondary) .message-content .message-body .message-text{border-top-left-radius:4px}.message.message-secondary .message-content{-ms-flex-pack:end;justify-content:flex-end}.message.message-secondary .message-content .message-header{padding-right:0}.message.message-secondary .message-content .message-body{padding-left:4rem}.message.message-secondary .message-content .message-body .message-text{border-top-right-radius:4px}.message-header{flex:0 0 auto}.message-secondary .message-header{order:2}.message-header .message-avatar .avatar{font-size:2.5rem}.message-body{flex:0 1 auto}.message-body .message-text{background:#f0f2f4;padding:1.2857142857rem 1.875rem;border-radius:1.333em}.message-blue .message-body .message-text{background:#0bb;color:white}.message-green .message-body .message-text{background:#7ec631;color:white}.message-purple .message-body .message-text{background:#7f6cc5;color:white}.toolbar a{display:block}.toolbar .toolbar-content{display:flex;flex-direction:row;flex-wrap:wrap;-ms-flex-align:center;align-items:center}.toolbar .toolbar-content .toolbar-item{flex:0 0 auto}.toolbar .toolbar-content .toolbar-item>.btn{width:100%}.toolbar .toolbar-content .toolbar-item>.toolbar-link{padding:1rem 1.5rem}.toolbar .toolbar-content .toolbar-gap{flex:1000 1 auto}.toolbar-fill .btn{border-radius:0}.toolbar-fill .toolbar-content>.btn,.toolbar-fill .toolbar-content .toolbar-item{flex:1 0 auto}.toolbar-separate .toolbar-content{margin:-.375rem}.toolbar-separate .toolbar-content .toolbar-item{margin:.375rem}.toolbar-fixed .toolbar-content>.btn,.toolbar-fixed .toolbar-content .toolbar-item{flex:1 0 0px}.title{margin-left:-10px;margin-right:-10px;display:flex;flex-direction:row;flex-wrap:wrap;-ms-flex-pack:justify;justify-content:space-between;-ms-flex-align:center;align-items:center}.title-buffer{margin-top:60px;margin-bottom:60px}.title>*{padding:5px 0;margin:0 10px}.title-header{flex:0 1 auto}.title-body{flex:1 1 auto}.title-actions{flex:0 1 auto}.title-fix{min-height:50px}.title:first-child{margin-top:-5px}.title:last-child{margin-bottom:-5px}.list{color:#8b969e}.list-item:not(:first-child){border-top:1px solid rgba(0,30,60,0.075)}.list-item:first-child .list-row{border-top-right-radius:4px;border-top-left-radius:4px}.list-item:last-child .list-row{border-bottom-right-radius:4px;border-bottom-left-radius:4px}.list-link{display:block;position:absolute;width:100%;height:100%;top:0;left:0;z-index:2}.list-link:hover+.list-row,.list-link:focus+.list-row{background:#f9fafb}.list-item.active .list-row{background:#0bb}.list-item.active .list-row h1,.list-item.active .list-row .h1,.list-item.active .list-row h2,.list-item.active .list-row .h2,.list-item.active .list-row h3,.list-item.active .list-row .h3,.list-item.active .list-row h4,.list-item.active .list-row .h4,.list-item.active .list-row h5,.list-item.active .list-row .h5,.list-item.active .list-row h6,.list-item.active .list-row .h6,.list-item.active .list-row{color:#fff}.list-row{display:flex;flex-direction:row;-ms-flex-align:center;align-items:center;-webkit-transition:all .25s cubic-bezier(0.25, 0, 0, 1);-o-transition:all .25s cubic-bezier(0.25, 0, 0, 1);transition:all .25s cubic-bezier(0.25, 0, 0, 1)}.list-row>*{flex:1 1 0px;padding:1.5rem 2rem}.list-row>* *{margin-top:0;margin-bottom:0}.list-row>* a{z-index:3}.list-row-group{padding-left:0;padding-right:1rem}.list-row-graphic,.list-row-arrow{flex:0 0 auto}.list-row-graphic>.glyph,.list-row-arrow>.glyph{opacity:.3333333333}.list-row-sm>*{padding-top:12px;padding-bottom:12px}.list-row-xs>*{padding-top:7px;padding-bottom:7px}.card-list .list .list-row>*{padding-left:30px;paddign-right:30px}.list-clean{margin:0;padding:0;border:0;list-style-type:none}.list-clean li{margin:0;padding:0;list-style-type:none}.list-columns-2{columns:2}.status{display:flex;flex-direction:row}.status-text{flex:1 1 auto;white-space:nowrap;min-width:0}.status-icon{flex:0 0 auto}.dot{display:inline-block;background:currentColor;width:8px;height:8px;border-radius:50%}.dot-default{color:#8b969e}.dot-success{color:#5fb825}.dot-info{color:#0aa}.dot-warning{color:#ff821d}.dot-danger{color:#ff4f39}.table-master-detail-toggle{-webkit-transition:all .25s cubic-bezier(0.25, 0, 0, 1);-o-transition:all .25s cubic-bezier(0.25, 0, 0, 1);transition:all .25s cubic-bezier(0.25, 0, 0, 1)}.table-master-detail:not(.open) .table-detail{display:none}.table-master-detail.open .table-master td,.table-master-detail.open .table-master th{background:white !important}.table-master-detail.open .table-master-detail-toggle{-webkit-transform:rotate(90deg);transform:rotate(90deg)}.form-grid{display:table;width:100%}.form-grid .form-row-group{display:table-row-group}.form-grid .form-row{display:table-row}.form-grid .form-row .form-row{display:table;width:100%}.form-grid .form-row .form-label,.form-grid .form-row .form-response{display:table-cell;padding:7px;vertical-align:top}.form-grid .form-row .form-label:first-child,.form-grid .form-row .form-response:first-child{padding-left:0}.form-grid .form-row .form-label:last-child,.form-grid .form-row .form-response:last-child{padding-right:0}.form-grid .form-row .form-label .form-row>*,.form-grid .form-row .form-response .form-row>*{padding-top:0;padding-bottom:0}.form-grid .form-row .form-label{white-space:nowrap;width:1px}.form-grid .form-row .form-response .help-block{margin:0;top:3px}.form-grid .form-row .form-response.form-response-short{width:1px;white-space:nowrap}.form-grid .form-row .form-response .form-response,.form-grid .form-row .form-response .form-label{padding-top:0;padding-bottom:0}.form-grid .form-row>.form-label:first-child{padding-right:7px}.form-grid:not(.form-grid-left) .form-label{text-align:right}.matrix{margin:0 -15px;display:flex;flex-direction:row;-ms-flex-align:stretch;align-items:stretch;flex-wrap:wrap}.matrix.matrix-nowrap{flex-wrap:nowrap}.matrix .matrix-item{padding:15px;display:flex;flex-direction:column;flex:1 1 260px}.matrix .matrix-item>*{flex:1 1 auto;margin:0}.waterfall{margin:0 -15px;-webkit-column-count:4;column-count:4;-webkit-column-gap:0;column-gap:0;-webkit-column-width:320px;column-width:320px}.waterfall .waterfall-item{-webkit-column-break-inside:avoid;page-break-inside:avoid;break-inside:avoid-column;padding:15px}.waterfall .waterfall-item>*{margin:0}.mosaic{display:flex;flex-direction:column;-ms-flex-align:stretch;align-items:stretch}.mosaic-buffer{margin:0 -15px}.mosaic-row{display:flex;flex-direction:row;flex-wrap:wrap;flex:1 1 auto}.mosaic-column{display:flex;flex-direction:column;flex:1 1 320px}.mosaic-column-1{flex:1 1 320px}.mosaic-column-2{flex:1 1 640px}.mosaic-column-3{flex:1 1 960px}.mosaic-column-4{flex:1 1 1280px}.mosaic-column-5{flex:1 1 1600px}.mosaic-column-6{flex:1 1 1920px}.mosaic-column-7{flex:1 1 2240px}.mosaic-column-8{flex:1 1 2560px}.mosaic-column-9{flex:1 1 2880px}.mosaic-column-10{flex:1 1 3200px}.mosaic-column-11{flex:1 1 3520px}.mosaic-column-12{flex:1 1 3840px}.mosaic-item{display:flex;flex-direction:column}.mosaic-item>*{flex:1 0 auto;margin:0}.mosaic-column>.mosaic-item{flex:1 1 auto}.mosaic-row>.mosaic-item{flex:1 0 260px}.mosaic-buffer .mosaic-item{margin:15px}.flex-row{display:flex;flex-direction:row;flex-wrap:wrap}.flex-column{display:flex;flex-direction:column;flex:1 1 320px}.flex-column-1{flex:1 1 320px}.flex-column-2{flex:1 1 640px}.flex-column-3{flex:1 1 960px}.flex-column-4{flex:1 1 1280px}.flex-column-5{flex:1 1 1600px}.flex-column-6{flex:1 1 1920px}.flex-column-7{flex:1 1 2240px}.flex-column-8{flex:1 1 2560px}.flex-column-9{flex:1 1 2880px}.flex-column-10{flex:1 1 3200px}.flex-column-11{flex:1 1 3520px}.flex-column-12{flex:1 1 3840px}.flex-nowrap{flex-wrap:nowrap}.flex-buffer{margin:0 -15px}.flex-flush{margin-top:-15px;margin-bottom:-15px}.flex-column>.flex-item{flex:1 1 auto}.flex-row>.flex-item{flex:1 0 260px}.flex-buffer .flex-item{margin:15px}.flex-column>.flex-item-sm{flex:1 1 auto}.flex-row>.flex-item-sm{flex:1 0 130px}.flex-buffer .flex-item-sm{margin:7.5px}.flex-grow{flex:1 0 auto}.flex-auto{flex:0 0 auto}.flex-shrink{flex:0 1 auto}.album{margin:0 -30px;visibility:hidden}.album.album-ready{visibility:visible}.album .album-content{display:flex;flex-direction:row;flex-wrap:wrap;-ms-flex-align:stretch;align-items:stretch}.album .album-content .album-image{flex:1 1 auto;margin:30px}.album .album-content .album-image img{margin:0;display:block;width:100%;height:auto;display:block;border-width:0;background:white;box-shadow:0 0 0 1px rgba(0,30,60,0.03),0 3px 3px -1.5px rgba(0,0,0,0.03);border-radius:4px}.limit-1>*:nth-child(n+2){display:none !important}.limit-2>*:nth-child(n+3){display:none !important}.limit-3>*:nth-child(n+4){display:none !important}.limit-4>*:nth-child(n+5){display:none !important}.limit-5>*:nth-child(n+6){display:none !important}.limit-6>*:nth-child(n+7){display:none !important}.limit-7>*:nth-child(n+8){display:none !important}.limit-8>*:nth-child(n+9){display:none !important}.limit-9>*:nth-child(n+10){display:none !important}.limit-10>*:nth-child(n+11){display:none !important}.limit-11>*:nth-child(n+12){display:none !important}.limit-12>*:nth-child(n+13){display:none !important}.grid{display:grid;grid-gap:2em;grid-template-columns:repeat(auto-fill, minmax(200px, 1fr))}html.cssgridlegacy .grid{display:flex;flex-direction:row;flex-wrap:wrap;padding:1em}html.cssgridlegacy .grid>*{flex:1 0 200px;max-width:320px;padding:1em}.section-target{position:absolute;visibility:hidden;top:-4em}.section{padding:.75em 0}.section-target:target+.section-content .panel{box-shadow:0 0 0 1px rgba(0,30,60,0.03),0 30px 30px -15px rgba(0,0,0,0.3)}.framework{-ms-display:grid;display:grid;height:100%}.framework>*{padding:1em 1.5em}.framework .framework-header{background:#0bb;color:white}.framework .framework-nav{background:#f0f2f4}.framework .framework-menu{background:#f9fafb}.framework .framework-content{background:white}.framework .framework-content{padding:0;overflow:auto;display:flex;flex-direction:column;-ms-flex-align:stretch;align-items:stretch}.framework .framework-content>*{padding:1em 1.5em}.framework .framework-content .framework-actions{position:sticky;top:0;z-index:2;background:white}@media (min-width: 961px){.framework{-ms-grid-rows:60px auto;grid-template-rows:60px auto;-ms-grid-columns:60px 240px auto;grid-template-columns:60px 240px auto}.framework .framework-header{-ms-grid-row:1;grid-row:1;-ms-grid-column:1;-ms-grid-column-span:3;grid-column:1 / 4}.framework .framework-nav{-ms-grid-row:2;grid-row:2;-ms-grid-column:1;grid-column:1}.framework .framework-menu{-ms-grid-row:2;grid-row:2;-ms-grid-column:2;grid-column:2}.framework .framework-content{-ms-grid-row:2;grid-row:2;-ms-grid-column:3;grid-column:3}}@media (max-width: 960px){.framework{-ms-grid-rows:60px auto;grid-template-rows:60px auto;-ms-grid-columns:auto;grid-template-columns:auto}.framework .framework-header{-ms-grid-row:1;grid-row:1;-ms-grid-column:1;grid-column:1}.framework .framework-nav{display:none}.framework .framework-menu{display:none}.framework .framework-content{-ms-grid-row:2;grid-row:2;-ms-grid-column:1;grid-column:1}.framework .framework-content .framework-actions{order:-1}}.app{display:block;position:absolute;width:100%;height:100%;top:0;left:0;position:fixed;min-width:960px}.app-row{display:flex;flex-direction:row;-ms-flex-align:stretch;align-items:stretch}.app-column{display:flex;flex-direction:column;-ms-flex-align:stretch;align-items:stretch}.app-middle{-ms-flex-align:center;align-items:center}.app-header,.app-footer{flex:0 0 auto}.app-body{flex:1 0 0px}.app-navbar{height:calc( 2.8571428571rem + 40px );z-index:3;background:white}.app-menu,.app-sidebar,.app-content{-webkit-transition:all .25s cubic-bezier(0.25, 0, 0, 1);-o-transition:all .25s cubic-bezier(0.25, 0, 0, 1);transition:all .25s cubic-bezier(0.25, 0, 0, 1);background:#f9fafb}.app-menu,.app-sidebar{width:20%;min-width:300px;flex:0 0 auto}.app-content{flex:1 0 0px}.app-content a,.app-content .a{color:#0bb}.app-content a:hover,.app-content a:focus,.app-content .a:hover,.app-content .a:focus{color:#0aa}.app-overlay{background:#f0f2f4;position:absolute;display:none;z-index:2;right:-100vw;left:-100vw;bottom:0;top:0;opacity:.9}.app-menu .app-overlay{left:100%;box-shadow:inset 5px 0 10px -5px rgba(0,0,0,0.2)}.app-sidebar .app-overlay{right:100%;box-shadow:inset -5px 0 10px -5px rgba(0,0,0,0.2)}.app-icn:not(:first-child){padding-left:20px}.app-icn:not(:last-child){padding-right:20px}.app-scroll{display:block;position:absolute;width:100%;height:100%;top:0;left:0;overflow:auto}html.touch .app-scroll{overflow:scroll;-webkit-overflow-scrolling:touch}.app-pad{padding:20px 30px}.app-pad,.app-pad-v{padding-top:20px;padding-bottom:20px}.app-pad,.app-pad-h{padding-left:30px;padding-right:30px}.app-sticky{top:0;z-index:2;position:sticky;background:#f9fafb}.app-frame{margin:auto}@media (min-width: 961px){.app-frame{width:90%}}.app-shadow{box-shadow:0 1px 0 rgba(0,16,32,0.05)}.app-flush,.app-flush-top{padding-top:0}.app-flush,.app-flush-bottom{padding-bottom:0}.app-flush,.app-flush-left{padding-left:0}.app-flush,.app-flush-right{padding-right:0}.app-logo{width:100px}.layout{width:100vw;height:100vh;min-width:960px;overflow:auto}html.touch .layout{overflow:scroll;-webkit-overflow-scrolling:touch}.layout-pad{padding-top:20px;padding-bottom:20px}.layout-ide{height:calc(100vh - 53px)}.layout-pad-l,.layout-pad-x{padding-left:20px}.layout-pad-r,.layout-pad-x{padding-right:20px}.layout-sticky{position:sticky;z-index:20;top:0}.layout-frame{margin:auto;width:90%;padding-left:20px;padding-right:20px}.layout-menu .layout-frame{padding-right:0}.layout-navigation{box-shadow:0 0 0 1px rgba(0,30,60,0.03),0 3px 3px -1.5px rgba(0,0,0,0.03);background:white;height:52px;position:absolute;top:0;left:0;right:0}.layout-content{position:absolute;top:53px;bottom:0;left:0;right:0;overflow:auto}html.touch .layout-content{overflow:scroll;-webkit-overflow-scrolling:touch}.layout-row{display:flex;flex-direction:row}.layout-alert{flex:0 0 100%}.layout-menu{flex:0 0 25%;max-width:300px;min-width:0}.layout-body{flex:1 1 auto;box-shadow:0 -1px 0 rgba(0,30,60,0.03)}.ide{overflow:hidden;font-size:.9285714286rem;display:block;position:absolute;width:100%;height:100%;top:0;left:0;background:white}.ide-pad{padding:14px 16px !important}.ide-pad-l,.ide-pad-x{padding-left:16px !important}.ide-pad-r,.ide-pad-x{padding-right:16px !important}.ide-panels{display:block;position:absolute;width:100%;height:100%;top:0;left:0}.ide-panels,.ide-panel-group{display:flex;flex-direction:row;background:inherit}.ide-panels.ide-vertical,.ide-panel-group.ide-vertical{display:flex;flex-direction:column}@media (max-width: 960px){.ide-panels,.ide-panel-group{display:flex;flex-direction:column}}.ide-panel,.ide-panel-group{flex:1 0 0px}.ide-panel{-webkit-transition:all .25s cubic-bezier(0.25, 0, 0, 1);-o-transition:all .25s cubic-bezier(0.25, 0, 0, 1);transition:all .25s cubic-bezier(0.25, 0, 0, 1);-webkit-transition-property:box-shadow,transform;transition-property:box-shadow,transform;box-shadow:0 0 0 2px transparent;min-height:200px;min-width:200px;background:inherit;display:flex;flex-direction:column}.ide-horizontal .ide-panel{height:auto !important}.ide-horizontal .ide-panel[style*="width"]{flex:0 0 auto}.ide-vertical .ide-panel{width:auto !important}.ide-vertical .ide-panel[style*="height"]{flex:0 0 auto}@media (max-width: 960px){.ide-panel{width:auto !important}}.ide-panel-sm{flex:0 0 280px}.ide-panel:before{content:\'\';display:block;position:absolute;left:0;top:0;bottom:0;right:0;box-shadow:0 0 0 1px currentColor;opacity:.125}.ide-panel:focus{z-index:3;box-shadow:0 0 0 2px #0bb,0 10px 20px rgba(0,30,60,0.3);-webkit-transform:translate(10px, -10px);transform:translate(10px, -10px);border-radius:4px}.ide-panel>*:first-child{border-top-left-radius:inherit;border-top-right-radius:inherit}.ide-panel>*:last-child{border-bottom-left-radius:inherit;border-bottom-right-radius:inherit}.ide-panel-header,.ide-panel-footer{flex:0 0 auto;background:rgba(0,30,60,0.03)}.ide-panel-header:before,.ide-panel-header:after,.ide-panel-footer:before,.ide-panel-footer:after{content:\'\';display:block;position:absolute;left:0;top:0;bottom:0;right:0;background:currentColor;opacity:.0075}.ide-panel-header:after,.ide-panel-footer:after{height:1px;opacity:.06}.ide-panel-header .btn:focus,.ide-panel-header .btn:active,.ide-panel-footer .btn:focus,.ide-panel-footer .btn:active{z-index:auto}.ide-panel-header:after{top:auto}.ide-panel-footer:before{display:none}.ide-panel-footer:after{bottom:auto}.ide-panel-body{color:#313539;background:inherit;flex:1 1 auto}.ide-panel-scroll{display:block;position:absolute;width:100%;height:100%;top:0;left:0;overflow:auto}html.touch .ide-panel-scroll{overflow:scroll;-webkit-overflow-scrolling:touch}.ide-panel-scroll::-webkit-scrollbar{background:#e9ebef;width:7px;height:7px}.ide-panel-scroll::-webkit-scrollbar-button{display:none}.ide-panel-scroll::-webkit-scrollbar-track{background:transparent}.ide-panel-scroll::-webkit-scrollbar-track-piece{background:transparent}.ide-panel-scroll::-webkit-scrollbar-thumb{background:#d7dbdf;border-radius:200px ;-webkit-transition:all .25s cubic-bezier(0.25, 0, 0, 1);-o-transition:all .25s cubic-bezier(0.25, 0, 0, 1);transition:all .25s cubic-bezier(0.25, 0, 0, 1)}.ide-panel-scroll::-webkit-scrollbar-corner{background:#e9ebef}.ide-panel-scroll::-webkit-resizer{background:transparent}.ide-panel-scroll:hover::-webkit-scrollbar-thumb{background:#c1c7cd}.ide-panel-handle{display:block;position:absolute;top:0;bottom:0;right:0;background:white;width:10px}.ide-controls{display:table;width:100%;height:44px}.ide-controls>*{display:table-cell;vertical-align:middle}.ide-control{white-space:nowrap}.ide-control-sm{width:1px}.ide-control-link,.ide-control-text{display:block;padding:.6785714286rem 0}.ide-control-link{padding-left:1.25rem;padding-right:1.25rem;text-align:center}.ide-control-inline-link{display:inline-block;padding:.6785714286rem 0;text-align:center}.ide-control.active{box-shadow:inset 0 -1px 0 #0bb}.ide-control.active .ide-control-link,.ide-control.active .ide-control-inline-link{color:inherit;font-weight:bold}.ide-list{padding:7px 0}.ide-list-item{display:block;padding:7px 16px;color:inherit;box-shadow:0 1px 0 rgba(0,30,60,0.03);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.ide-list-item:hover,.ide-list-item:focus{color:inherit}.ide-list-item-footer{padding:.375em 0;display:flex;flex-direction:row;-ms-flex-pack:justify;justify-content:space-between}.ide-interactive:hover,.ide-interactive:focus{background:#f9fafb}.ide-active{background:#e4e6eb !important}.ide-code{color:inherit;resize:none;padding:0;background:transparent}.ide table{white-space:nowrap}.ide table td:first-child,.ide table th:first-child{padding-left:16px}.ide table td:last-child,.ide table th:last-child{padding-right:16px}.ide table td{max-width:300px;overflow:hidden;text-overflow:ellipsis}.ide-table-heading{color:inherit;position:sticky;top:0;z-index:3;background:white;box-shadow:0 1px 0 rgba(0,30,60,0.03)}.ide-dark{color:white}.ide-dark,.ide-dark .ide-table-heading{background:#002934}.ide-dark .ide-panel-body{color:inherit}.ide-dark .ide-panel:focus,.ide-dark .ide-panel-header,.ide-dark .ide-panel-footer,.ide-dark .table-striped>tbody>tr:nth-of-type(odd){background:#00303d}.ide-dark .ide-active{background:#005e7a !important;color:white !important}.ide-dark .ide-table-heading,.ide-dark .ide-list-item{box-shadow:0 1px 0 rgba(255,255,255,0.1)}.ide-dark .ide-panel-header .btn-default,.ide-dark .ide-panel-footer .btn-default{color:#fff;background-color:#005e7a;border-color:#005e7a}.ide-dark .ide-panel-header .btn-default:focus,.ide-dark .ide-panel-header .btn-default.focus,.ide-dark .ide-panel-footer .btn-default:focus,.ide-dark .ide-panel-footer .btn-default.focus{color:#fff;background-color:#007699}.ide-dark .ide-panel-header .btn-default:hover,.ide-dark .ide-panel-footer .btn-default:hover{color:#fff;background-color:#007699}.ide-dark .ide-panel-header .btn-default:active,.ide-dark .ide-panel-header .btn-default.active,.open>.ide-dark .ide-panel-header .btn-default.dropdown-toggle,.ide-dark .ide-panel-footer .btn-default:active,.ide-dark .ide-panel-footer .btn-default.active,.open>.ide-dark .ide-panel-footer .btn-default.dropdown-toggle{color:#fff;background-color:#007699}.ide-dark .ide-panel-header .btn-default:active:hover,.ide-dark .ide-panel-header .btn-default:active:focus,.ide-dark .ide-panel-header .btn-default:active.focus,.ide-dark .ide-panel-header .btn-default.active:hover,.ide-dark .ide-panel-header .btn-default.active:focus,.ide-dark .ide-panel-header .btn-default.active.focus,.open>.ide-dark .ide-panel-header .btn-default.dropdown-toggle:hover,.open>.ide-dark .ide-panel-header .btn-default.dropdown-toggle:focus,.open>.ide-dark .ide-panel-header .btn-default.dropdown-toggle.focus,.ide-dark .ide-panel-footer .btn-default:active:hover,.ide-dark .ide-panel-footer .btn-default:active:focus,.ide-dark .ide-panel-footer .btn-default:active.focus,.ide-dark .ide-panel-footer .btn-default.active:hover,.ide-dark .ide-panel-footer .btn-default.active:focus,.ide-dark .ide-panel-footer .btn-default.active.focus,.open>.ide-dark .ide-panel-footer .btn-default.dropdown-toggle:hover,.open>.ide-dark .ide-panel-footer .btn-default.dropdown-toggle:focus,.open>.ide-dark .ide-panel-footer .btn-default.dropdown-toggle.focus{color:#fff;background-color:#007699}.ide-dark .ide-panel-header .btn-default:active,.ide-dark .ide-panel-header .btn-default.active,.open>.ide-dark .ide-panel-header .btn-default.dropdown-toggle,.ide-dark .ide-panel-footer .btn-default:active,.ide-dark .ide-panel-footer .btn-default.active,.open>.ide-dark .ide-panel-footer .btn-default.dropdown-toggle{background-image:none}.ide-dark .ide-panel-header .btn-default.disabled:hover,.ide-dark .ide-panel-header .btn-default.disabled:focus,.ide-dark .ide-panel-header .btn-default.disabled.focus,.ide-dark .ide-panel-header .btn-default[disabled]:hover,.ide-dark .ide-panel-header .btn-default[disabled]:focus,.ide-dark .ide-panel-header .btn-default[disabled].focus,fieldset[disabled] .ide-dark .ide-panel-header .btn-default:hover,fieldset[disabled] .ide-dark .ide-panel-header .btn-default:focus,fieldset[disabled] .ide-dark .ide-panel-header .btn-default.focus,.ide-dark .ide-panel-footer .btn-default.disabled:hover,.ide-dark .ide-panel-footer .btn-default.disabled:focus,.ide-dark .ide-panel-footer .btn-default.disabled.focus,.ide-dark .ide-panel-footer .btn-default[disabled]:hover,.ide-dark .ide-panel-footer .btn-default[disabled]:focus,.ide-dark .ide-panel-footer .btn-default[disabled].focus,fieldset[disabled] .ide-dark .ide-panel-footer .btn-default:hover,fieldset[disabled] .ide-dark .ide-panel-footer .btn-default:focus,fieldset[disabled] .ide-dark .ide-panel-footer .btn-default.focus{background-color:#005e7a;border-color:#005e7a}.ide-dark .ide-panel-header .btn-default .badge,.ide-dark .ide-panel-footer .btn-default .badge{color:#005e7a;background-color:#fff}.ide-dark .ide-panel-scroll::-webkit-scrollbar{background:#00475c;width:7px;height:7px}.ide-dark .ide-panel-scroll::-webkit-scrollbar-button{display:none}.ide-dark .ide-panel-scroll::-webkit-scrollbar-track{background:transparent}.ide-dark .ide-panel-scroll::-webkit-scrollbar-track-piece{background:transparent}.ide-dark .ide-panel-scroll::-webkit-scrollbar-thumb{background:#065b74;border-radius:200px ;-webkit-transition:all .25s cubic-bezier(0.25, 0, 0, 1);-o-transition:all .25s cubic-bezier(0.25, 0, 0, 1);transition:all .25s cubic-bezier(0.25, 0, 0, 1)}.ide-dark .ide-panel-scroll::-webkit-scrollbar-corner{background:#00475c}.ide-dark .ide-panel-scroll::-webkit-resizer{background:transparent}.ide-dark .ide-panel-scroll:hover::-webkit-scrollbar-thumb{background:#087291}.ide-dark .ace_scrollbar::-webkit-scrollbar{background:#00475c;width:7px;height:7px}.ide-dark .ace_scrollbar::-webkit-scrollbar-button{display:none}.ide-dark .ace_scrollbar::-webkit-scrollbar-track{background:transparent}.ide-dark .ace_scrollbar::-webkit-scrollbar-track-piece{background:transparent}.ide-dark .ace_scrollbar::-webkit-scrollbar-thumb{background:#065b74;border-radius:200px ;-webkit-transition:all .25s cubic-bezier(0.25, 0, 0, 1);-o-transition:all .25s cubic-bezier(0.25, 0, 0, 1);transition:all .25s cubic-bezier(0.25, 0, 0, 1)}.ide-dark .ace_scrollbar::-webkit-scrollbar-corner{background:#00475c}.ide-dark .ace_scrollbar::-webkit-resizer{background:transparent}.ide-dark .ace_scrollbar:hover::-webkit-scrollbar-thumb{background:#087291}.ide-dark .ide-code::-webkit-scrollbar{background:#00475c;width:7px;height:7px}.ide-dark .ide-code::-webkit-scrollbar-button{display:none}.ide-dark .ide-code::-webkit-scrollbar-track{background:transparent}.ide-dark .ide-code::-webkit-scrollbar-track-piece{background:transparent}.ide-dark .ide-code::-webkit-scrollbar-thumb{background:#065b74;border-radius:200px ;-webkit-transition:all .25s cubic-bezier(0.25, 0, 0, 1);-o-transition:all .25s cubic-bezier(0.25, 0, 0, 1);transition:all .25s cubic-bezier(0.25, 0, 0, 1)}.ide-dark .ide-code::-webkit-scrollbar-corner{background:#00475c}.ide-dark .ide-code::-webkit-resizer{background:transparent}.ide-dark .ide-code:hover::-webkit-scrollbar-thumb{background:#087291}.menu{margin:0 -5px;font-size:.9285714286rem}.menu ul{margin:0;padding:0;border:0;list-style-type:none;display:none}.menu ul li{margin:0;padding:0;list-style-type:none}.menu ul ul{margin-left:23px}.menu a{color:#3f464e;display:block;padding:3px 5px;border-radius:4px;text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.menu a.menu-tree{color:#8b969e}.menu a.menu-main{font-size:1rem;margin-bottom:.25em;font-weight:bold;color:#313539}.menu a.active:not(.not-active){color:#313539}.menu a:hover,.menu a:focus{background:#f0f2f4;color:#313539}.menu a.menu-node.active:not(.not-active),.menu a.menu-link.active:not(.not-active){background:#e9ebef;color:#313539}.menu .icn{margin-right:8px}.menu>ul,.menu .active+ul{display:block}a:not(.active) .menu-icon-on{display:none}a.active .menu-icon-off{display:none}.results{font-size:.9285714286rem}.results .result{display:block;color:inherit;text-decoration:none !important;padding:15px 20px;margin:0 -20px;border-radius:4px}.results .result:hover,.results .result:focus{color:inherit}.results .result:hover,.results .result:focus{background:#f0f2f4}.results .result-content{display:flex;flex-direction:row}.results .result-content .result-icn{flex:0 0 auto;color:#8b969e;opacity:.5;padding:2px 20px 0 0}.results .result-content .result-body{flex:1 1 auto}.results .result-content .result-body>*{margin-top:.25em;margin-bottom:.25em}.results .result-content .result-body>*:first-child{margin-top:0}.results .result-content .result-body>*:last-child{margin-bottom:0}.filename{display:flex;flex-direction:row}.filename .filename-ellip{flex:0 1 auto;min-width:0;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.filename .filename-normal{flex:0 0 auto}.launcher{z-index:30;position:fixed;bottom:30px;right:30px}.launcher:not(.on) .launcher-content{display:none}.launcher.on .launcher-btn{display:none}.launcher-btn{font-size:0}.launcher-btn .btn{box-shadow:0 0 0 1px rgba(0,30,60,0.03),0 20px 20px -10px rgba(0,0,0,0.2)}.launcher-btn .btn:not(:last-child){margin-right:10px}.launcher-btn .btn:hover,.launcher-btn .btn:focus{box-shadow:0 0 0 1px rgba(0,30,60,0.03),0 40px 40px -20px rgba(0,0,0,0.4)}.launcher-content{position:fixed;height:100%;border:20px solid transparent;top:0;right:0}@media (min-width: 961px){.launcher[data-launcher="sidebar"] .launcher-content{width:340px;border-left:0}}@media (max-width: 960px){.launcher[data-launcher="sidebar"] .launcher-content{width:100vw}}.launcher[data-launcher="sidebar"] .launcher-content .launcher-hide-sidebar:not(.visible){display:none}.launcher[data-launcher="fullscreen"] .launcher-content{width:100vw}.launcher[data-launcher="fullscreen"] .launcher-content .launcher-hide-fullscreen:not(.visible){display:none}.launcher-window{display:flex;flex-direction:column;overflow:auto;width:100%;height:100%;color:white;background:#005e7a;border-radius:4px;box-shadow:-10px 5px 20px 5px rgba(0,0,0,0.1),0 20px 20px -10px rgba(0,0,0,0.3)}.launcher-window h1,.launcher-window .h1,.launcher-window h2,.launcher-window .h2,.launcher-window h3,.launcher-window .h3,.launcher-window h4,.launcher-window .h4,.launcher-window h5,.launcher-window .h5,.launcher-window h6,.launcher-window .h6{color:inherit}html.touch .launcher-window{overflow:scroll;-webkit-overflow-scrolling:touch}.launcher-window .launcher-header,.launcher-window .launcher-footer{flex:0 0 auto;display:flex;flex-direction:row;-ms-flex-align:center;align-items:center}.launcher-window .launcher-header .launcher-spacer,.launcher-window .launcher-footer .launcher-spacer{flex:1 0 0px}.launcher-window .launcher-header .launcher-cell,.launcher-window .launcher-footer .launcher-cell{flex:1 1 auto;min-width:0;padding:20px}.launcher-window .launcher-header .launcher-cell.launcher-flush,.launcher-window .launcher-footer .launcher-cell.launcher-flush{padding:0}.launcher-window .launcher-header .launcher-cell .field-label,.launcher-window .launcher-header .launcher-cell .field-input,.launcher-window .launcher-footer .launcher-cell .field-label,.launcher-window .launcher-footer .launcher-cell .field-input{padding-left:20px;padding-right:20px;border-radius:0 !important;box-shadow:none !important}.launcher-window .launcher-header .launcher-cell .field-input,.launcher-window .launcher-footer .launcher-cell .field-input{background-position:calc(100% - 1.25rem - 5px) 50%}.launcher-window .launcher-header .launcher-actions,.launcher-window .launcher-footer .launcher-actions{flex:0 0 auto}.launcher-window .launcher-footer{flex-wrap:wrap}.launcher-window .launcher-body{flex:1 1 0px}.launcher-window .launcher-body .launcher-scroll{display:block;position:absolute;width:100%;height:100%;top:0;left:0}.launcher-window .launcher-body .launcher-scroll .launcher[data-launcher="sidebar"]{overflow:auto}html.touch .launcher-window .launcher-body .launcher-scroll .launcher[data-launcher="sidebar"]{overflow:scroll;-webkit-overflow-scrolling:touch}.launcher-window .launcher-body .launcher-embed,.launcher-window .launcher-body .launcher-embed iframe,.launcher-window .launcher-body .launcher-embed canvas{display:block;position:absolute;width:100%;height:100%;top:0;left:0}.field{display:block;margin:0}.field .field-input{height:4.6071428571rem;border-top:1.75rem solid transparent !important}.field .field-input:hover+.field-label,.field .field-input:focus+.field-label{color:#5e666c}.field .field-label{pointer-events:none;z-index:4;font-family:"Monaco",monospace;font-size:.8571428571rem;position:absolute;top:0;left:0;margin:0;padding:.6785714286rem 1.25rem 0}.field .field-text{height:4.6071428571rem;border-top:1.75rem solid transparent !important;border-radius:0 !important;box-shadow:none !important;padding:.6785714286rem 1.25rem 0}.field .field-text-label{pointer-events:none;z-index:0;position:absolute;top:0;left:0;margin:0;padding:.6785714286rem 1.25rem 0;font-variant:small-caps}.fields{display:flex;flex-direction:row;flex-wrap:wrap}.fields .field{flex:1 0 160px}.fields:not(.fields-flush){margin:-5px}.fields:not(.fields-flush) .field{border:5px solid transparent}.switches{margin:1.5em 0;display:flex;flex-direction:row;flex-wrap:wrap;background:#edeff2;box-shadow:inset 0 0 5px rgba(0,0,0,0.05);border-radius:4px;font-size:.9285714286rem}.switches .switch{flex:1 1 auto}.switches .switch .switch-label{padding:.4464285714rem 1.25rem;color:#8b969e;display:block;text-align:center;-webkit-transition:all .25s cubic-bezier(0.25, 0, 0, 1);-o-transition:all .25s cubic-bezier(0.25, 0, 0, 1);transition:all .25s cubic-bezier(0.25, 0, 0, 1)}.switches .switch .switch-label:hover,.switches .switch .switch-label:focus{color:#313539}.switches .switch .switch-label.active{display:block;border-width:0;background:white;box-shadow:0 0 0 1px rgba(0,30,60,0.03),0 3px 3px -1.5px rgba(0,0,0,0.03);border-radius:4px;font-weight:bold;color:#313539}.details .details-content{margin:-1em 0}@media (min-width: 961px){.details .details-content{display:table;width:100%}.details .details-content .detail-group{display:table-row}.details .details-content .detail-group>*{display:table-cell;vertical-align:top}.details .details-content .detail-group:not(:last-child)>*{border-bottom:1px solid rgba(0,30,60,0.075)}}.detail-group{padding-bottom:1em}.detail-group:not(:last-child){border-bottom:1px solid rgba(0,30,60,0.075)}.detail-group .detail-header{white-space:nowrap;width:1px;padding:1em;padding-left:0}@media (max-width: 960px){.detail-group .detail-header .detail-label{color:#313539}}.detail-group .detail-body{padding:.5em}@media (max-width: 960px){.detail-group .detail-body{padding:0;margin:0 -1em}}.detail-group .detail-body .detail{margin:0;display:inline-block;vertical-align:top;padding:.5em 1em}.detail-label{margin:0;text-transform:uppercase;letter-spacing:.15em;font-size:.75rem;font-weight:500;color:#8b969e}.detail-value{color:#313539}.controls{display:flex;flex-direction:row;flex-wrap:wrap;-ms-flex-pack:justify;justify-content:space-between;margin:-7px}.controls:not(.controls-block){display:inline-flex}.controls-nowrap{flex-wrap:nowrap}.controls .control{padding:7px;flex:0 0 auto}.controls .control .btn{text-align:center}.controls .control .btn,.controls .control .form-control{width:100%}.controls .control-grow{flex:1 0 auto}.controls .control-full{flex:0 0 100%}.token{display:flex;flex-direction:row;display:inline-flex}.token-element{flex:0 0 auto}.token-element:not(:first-child) .btn,.token-element:not(:first-child) .form-control{border-top-left-radius:0;border-bottom-left-radius:0}.token-element:not(:last-child) .btn,.token-element:not(:last-child) .form-control{border-top-right-radius:0;border-bottom-right-radius:0}.tokens{margin-left:-5px;margin-right:-5px}.tokens:after{display:table;content:\'\';clear:both}.tokens-actions{float:right}.tokens .token{float:left;margin:5px}.setting{display:flex;flex-direction:row;margin:0 -30px}.setting>*{padding:15px 30px}.setting-header{flex:1 0 28.5714285714%;min-width:200px}.setting-header-text>*{margin-top:.5rem;margin-bottom:.5rem}.setting-header-text>*:first-child{margin-top:0}.setting-header-text>*:last-child{margin-bottom:0}.setting-header-text h1,.setting-header-text .h1,.setting-header-text h2,.setting-header-text .h2,.setting-header-text h3,.setting-header-text .h3,.setting-header-text h4,.setting-header-text .h4,.setting-header-text h5,.setting-header-text .h5,.setting-header-text h6,.setting-header-text .h6{display:inline}.setting-header-text h1 a,.setting-header-text .h1 a,.setting-header-text h2 a,.setting-header-text .h2 a,.setting-header-text h3 a,.setting-header-text .h3 a,.setting-header-text h4 a,.setting-header-text .h4 a,.setting-header-text h5 a,.setting-header-text .h5 a,.setting-header-text h6 a,.setting-header-text .h6 a{font-size:.9285714286rem;font-weight:bold;margin-left:.75em}.setting-body{flex:1 0 71.4285714286%;min-width:600px}.setting-row{display:flex;flex-direction:row;margin:0 -4px}.setting-row:not(:last-child){border-bottom:1px solid rgba(0,30,60,0.075)}.setting-row>*{padding:4px}.setting-row-label{flex:0 0 25%;min-width:120px;padding-top:8px}.setting-row-response{flex:1 1 auto}.setting-row-edit{flex:0 0 auto}.setting-row-actions{flex:1 1 auto}body:not(.editing) .setting-form:not(.editing) [setting-active]{display:none}.editing [setting-static]{display:none}body.editing [setting-old]{display:none}body:not(.editing) [setting-new]{display:none}.editing .setting-row:not(.setting-row-border){border-color:transparent}.logo{display:block;overflow:hidden;color:#313539}.logo,.logo svg{height:25px;width:88px}.logo svg{fill:currentColor;top:-1px}@media (max-width: 540px){.logo{width:25px}}.kpi{color:#313539;padding:20px 32px}.kpi-lg .kpi-value{font-weight:bold;font-size:1.7142857143rem}.kpi-content{display:table;width:100%}.kpi-content>*{display:table-cell;vertical-align:baseline}.kpi-graphic{white-space:nowrap;width:1px;padding-right:.5em}.kpis{display:table;width:100%;width:auto}.kpis>*{display:table-cell;vertical-align:middle}.kpis .kpi:first-child{border-top-left-radius:4px;border-bottom-left-radius:4px}.kpis .kpi:last-child{border-top-right-radius:4px;border-bottom-right-radius:4px}.navigation{color:#313539}.navigation-row{height:52px;margin:0 -15px;display:flex;flex-direction:row;-ms-flex-align:center;align-items:center}.navigation-item{flex:0 0 auto;padding:10px 15px}.navigation-grow{flex:1 0 auto}.navigation-link{color:#bec5c9}.navigation-link:hover,.navigation-link:focus{color:#313539}.navigation-pad{padding:0 20px}.sidenav{z-index:20}.sidenav-overlay,.sidenav-content{-webkit-transition:all .25s cubic-bezier(0.25, 0, 0, 1);-o-transition:all .25s cubic-bezier(0.25, 0, 0, 1);transition:all .25s cubic-bezier(0.25, 0, 0, 1)}.sidenav-content{overflow:auto;-webkit-transform:translateX(-120%);transform:translateX(-120%);top:0;bottom:0;left:0;background:white;box-shadow:0 0 0 1px rgba(0,30,60,0.03),0 3px 3px -1.5px rgba(0,0,0,0.03);position:fixed;width:320px}html.touch .sidenav-content{overflow:scroll;-webkit-overflow-scrolling:touch}.navigating .sidenav-content{-webkit-transform:translateX(0);transform:translateX(0)}.sidenav-overlay{display:block;position:absolute;width:100%;height:100%;top:0;left:0;position:fixed;background:#f0f2f4;pointer-events:none;opacity:0}.navigating .sidenav-overlay{pointer-events:auto;opacity:.5}.sidenav-body{padding:0 24px}.sidenav-region{padding-bottom:.25em}.sidenav-divider{display:flex;flex-direction:row;-ms-flex-align:center;align-items:center}.sidenav-divider:after{content:\'\';display:block;border-top:1px solid rgba(0,30,60,0.075);flex:1 1 auto}.sidenav-divider-heading{flex:0 0 auto;padding-right:1em}.sidenav-section{padding:24px 0}.sidenav-section+.sidenav-section{border-top:1px solid rgba(0,30,60,0.075)}.sidenav-link{color:#8b969e;display:block;padding:.25em 0;padding-left:40px}.sidenav-link .glyph{position:absolute;left:0;top:50%;-webkit-transform:translateY(-50%);transform:translateY(-50%)}.sidenav-link:hover,.sidenav-link:focus{color:#313539}.sidenav-link:not(.active) .glyph{opacity:.3333333333}.sidenav-link.active{color:#ff694b}.sidenav-link-main{color:inherit;padding-top:.5em;padding-bottom:.5em;font-weight:bold}body.navigating{overflow:hidden}body.navigating .navigating-hide{display:none}body:not(.navigating) .navigating-show{display:none}.navigating-overlay{display:block;position:absolute;width:100%;height:100%;top:0;left:0;background:#f0f2f4;opacity:.5;display:none;z-index:9}.navigating .navigating-overlay{display:block}.navigating .navigating-blur{pointer-events:none;-webkit-filter:blur(5px);filter:blur(5px)}a.help{line-height:inherit}\n',""])},function(e,t){e.exports=function(e){return"string"!=typeof e?e:(/^['"].*['"]$/.test(e)&&(e=e.slice(1,-1)),/["'() \t\n]/.test(e)?'"'+e.replace(/"/g,'\\"').replace(/\n/g,"\\n")+'"':e)}},function(e,t){e.exports="data:font/woff;charset=utf-8;base64,d09GRgABAAAAAAx8AAoAAAAADDQAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAABPUy8yAAAA9AAAAGAAAABgcMR/82NtYXAAAAFUAAABUgAAAVIcdx1qZ2x5ZgAAAqgAAAaMAAAGjFUyrzBoZWFkAAAJNAAAADYAAAA2FVU8pmhoZWEAAAlsAAAAJAAAACQM5gWHaG10eAAACZAAAAA4AAAAODwoBKlsb2NhAAAJyAAAAB4AAAAeDW4Ltm1heHAAAAnoAAAAIAAAACAEVARLbmFtZQAACggAAAJSAAACUpr8+SVwb3N0AAAMXAAAACAAAAAg/7gAQAAEBGMBkAAFAAgEEAPAAAAAeAQQA8AAAAIwADICHAAAAAAFAAAAAAAAAAAAAAAQAAAAAAAAAAAAAABVS1dOAEAAIABmBRT+1AAABfABkAAAAAEAAAAAA4QEsAAAACAAAAAAAAMAAAADAAAAHAABAAAAAABMAAMAAQAAABwABAAwAAAACAAIAAIAAAAgAEYAZv//AAAAIABBAGH////t/8D/pgABAAAAAAAAAAAAAAEGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAECAwQFBgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABwgJCgsMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAB9AK8AAMABgAJAAwADwAANyERIRMnIQM3EQU3FwEXBwAB9P4M+qoBVIyq/o6qqv6OqqoAArz+z//+1P/+Ai3//wIr//8AAAEAFADcBWUD1AAkAAABIgcGBwEGFRQXFhcWMzI3NjcJARYXFjMyNzY3NjU0JwEmJyYjArwQDg8M/agXFwwPDhAPDw8LAiACIAwPDhAPDw8LGBj9pwsPDw8D1AYGDP2oGCAgGQwFBgYFDAIf/eEMBQYGBQwZICAYAlgMBgYAAAAAAQFA/68EOAUAACAAAAEiBwYHBhUUFwkBBhUUFxYXFjMyNzY3ATY1NCcBJicmIwGQEA4PDBcXAiD94BcXDA8OEA8PDwsCWBgY/agLDw8PBQAGBgsZICAZ/eH94BkgIBkLBgYGBgsCWRkgIBkCWAsGBgAAAAABABQA3AVlA9QAJAAAASIHBgcJASYnJiMiBwYHBhUUFwEWFxYzMjc2NwE2NTQnJicmIwUVEA4PDP3h/d8LDw8PEA4PDBcXAlkMDw4QDw8PCwJYGBgLDw8PA9QGBgz94QIfDAYGBgYMGCAgGf2oDAUGBgUMAlgZICAYDAYGAAAAAAEBQP+vBDgFAAAgAAABIgcGBwEGFRQXARYXFjMyNzY3NjU0JwkBNjU0JyYnJiMD6BAODwz9qBcXAlgMDw4QDw8PCxgY/eECHxgYCw8PDwUABgYL/acZICAZ/agLBgYGBgsZICAZAh8CIBkgIBkLBgYAAAAAAQAU/7AFZAUAADgAAAEiBwYHCQEmJyYjIgcGBwYVFBcJAQYVFBcWFxYzMjc2NwkBFhcWMzI3Njc2NTQnCQE2NTQnJicmIwUUEA4PDP3h/eALDw8PEA4PDBcXAiD94BcXDA8OEA8PDwsCIAIfDA8OEA8PDwsYGP3hAh8YGAsPDw8FAAYGC/3gAiALBgYGBgsZICAZ/eH94RkgIBkLBgYGBgsCIP3gCwYGBgYLGSAgGQIfAh8ZICAZCwYGAAABABQAFAb0BQAAJAAAASIHBgcJASYnJiMiBwYHBhUUFwEWFxYzMjc2NwE2NTQnJicmIwakEA4PDPvt/kQLDw8PEA4PDBcXAfQMDw4QDw8PCwRMGBgLDw8PBQAGBgv77AG8CwYGBgYLGSAgGf4MCwYGBgYLBEwZICAZCwYGAAAAAAEAFQGkAwwDcAAkAAABIgcGBwEGFRQXFhcWMzI3Nj8BFxYXFjMyNzY3NjU0JwEmJyYjAZAQDg8M/tUXFwwPDhAPDw8L8/MMDw4QDw8PCxgY/tQLDw8PA3AGBgz+1RggIBkMBgYGBgzy8gwGBgYGDBkgIBgBKwwGBgAAAAABANwA3AKoA9QAIAAAASIHBgcGFRQfAQcGFRQXFhcWMzI3NjcBNjU0JwEmJyYjASwQDg8MFxf08xcXDA8OEA8PDwsBKxgY/tQLDw8PA9QGBgsZICAZ8/QYICAZCwYGBgYMASwYICAZASwLBgYAAAAAAQAVAUEDDAMLACQAAAEiBwYPAScmJyYjIgcGBwYVFBcBFhcWMzI3NjcBNjU0JyYnJiMCvBAODwzy9AsPDw8QDg8MFxcBLAwPDhAPDw8LASsYGAsPDw8DCwUGDPLyDAYFBQYMGCAgGf7VDAUGBgUMASsZICAYDAYFAAAAAAEAeQDdAkUD1AAmAAABIgcGBwEGBwYVFBcWFwEWFxYzMDEyNzY3NjU0LwE3NjU0JyYnJiMB9Q8PDwz+1AsGBgYGDAEsCw8PDxAODwwXGPP0FxcMDw8PA9QGBgv+1AsPDxAQDw8L/tULBgYGBgwYICAZ8vMZICAZCwYGAAABAEYAqgOiBAYAOAAAASIHBgcJASYnJiMiBwYHBhUUFwkBBhUUFxYXFjMyNzY3CQEWFxYzMjc2NzY1NCcJATY1NCcmJyYjA1IQDg8M/tv+2gsPDw8QDg8MFxcBJv7aFxcMDw4QDw8PCwEmASUMDw4QDw8PCxgY/tsBJRgYCw8PDwQGBgYL/toBJgsGBgYGCxkgIBn+2/7bGSAgGQsGBgYGCwEm/toLBgYGBgsZICAZASUBJRkgIBkLBgYAAAEAFADcBDgD1AAkAAABIgcGBwEnJicmIyIHBgcGFRQXARYXFjMyNzY3ATY1NCcmJyYjA+gQDg8M/eH0Cw8PDxAODwwXFwEsDA8OEA8PDwsCWBgYCw8PDwPUBgYL/eD0CwYGBgYLGSAgGf7UCwYGBgYLAlgZICAZCwYGAAABAAAAAQAAywcftV8PPPUAAwZAAAAAANfNTDoAAAAA13yohQAA/68G9AUAAAAAAwACAAAAAAAAAAEAAAXw/nAAAAcIAAAAAAb0AAEAAAAAAAAAAAAAAAAAAAAOAfQAAAV4ABQFeAFABXgAFAV4AUAFeAAUBwgAFAMgABUDIADcAyAAFQMgAHkD6ABGBEwAFAMgAAAAAAAmAGYAoADgARoBeAG4AfYCLgJsAqoDCANGA0YAAAABAAAADgA5AAUAAAAAAAIACAQQA8AAAAB4AAAAAAAAAAAADACWAAEAAAAAAAEADgAAAAEAAAAAAAIABwAOAAEAAAAAAAMAIAAVAAEAAAAAAAQADgA1AAEAAAAAAAUAPABDAAEAAAAAAAYAFQB/AAMAAQQJAAEAHACUAAMAAQQJAAIADgCwAAMAAQQJAAMAQAC+AAMAAQQJAAQAHAD+AAMAAQQJAAUAeAEaAAMAAQQJAAYAKgGSVmVsbGx1bSBBcnJvd3NSZWd1bGFyMS4wMDA7VUtXTjtWZWxsbHVtQXJyb3dzLVJlZ3VsYXJWZWxsbHVtIEFycm93c1ZlcnNpb24gMS4wMDA7UFMgMDAxLjAwMDtob3Rjb252IDEuMC43MDttYWtlb3RmLmxpYjIuNS41ODMyOVZlbGxsdW1BcnJvd3MtUmVndWxhcgBWAGUAbABsAGwAdQBtACAAQQByAHIAbwB3AHMAUgBlAGcAdQBsAGEAcgAxAC4AMAAwADAAOwBVAEsAVwBOADsAVgBlAGwAbABsAHUAbQBBAHIAcgBvAHcAcwAtAFIAZQBnAHUAbABhAHIAVgBlAGwAbABsAHUAbQAgAEEAcgByAG8AdwBzAFYAZQByAHMAaQBvAG4AIAAxAC4AMAAwADAAOwBQAFMAIAAwADAAMQAuADAAMAAwADsAaABvAHQAYwBvAG4AdgAgADEALgAwAC4ANwAwADsAbQBhAGsAZQBvAHQAZgAuAGwAaQBiADIALgA1AC4ANQA4ADMAMgA5AFYAZQBsAGwAbAB1AG0AQQByAHIAbwB3AHMALQBSAGUAZwB1AGwAYQByAAAAAwAAAAAAAP+1ADIAAAAAAAAAAAAAAAAAAAAAAAAADg=="},function(e,t){e.exports="data:font/woff;charset=utf-8;base64,d09GRgABAAAAAK4wABEAAAAA/GwAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAABGRlRNAAABgAAAABwAAAAcfg3B8kdERUYAAAGcAAAAHgAAAB4AJwE1T1MvMgAAAbwAAABLAAAAYHN/dWZjbWFwAAACCAAAAjgAAAS+1h8aA2N2dCAAAARAAAAAFAAAABQDqgVBZnBnbQAABFQAAAGxAAACZVO0L6dnYXNwAAAGCAAAAAgAAAAIAAAAEGdseWYAAAYQAACaMQAA3UhCB8sWaGVhZAAAoEQAAAA0AAAANhEbVxxoaGVhAACgeAAAACEAAAAkDwIHkGhtdHgAAKCcAAACIwAABLqV4QERbG9jYQAAosAAAAJWAAACYL9F9WRtYXhwAAClGAAAACAAAAAgAlUBsW5hbWUAAKU4AAABMAAAAkQJm1bMcG9zdAAApmgAAAeOAAAMErscz7VwcmVwAACt+AAAAC4AAAAusPIrFHdlYmYAAK4oAAAABgAAAAb3vVi5AAAAAQAAAADUUbVqAAAAANTcZEsAAAAA1N+oPAABAAAADAAAABYAAAACAAEAAQEuAAEABAAAAAIAAAAAeNpjYGYrY5zAwMrAwmrMcpaBgWEWhGY6y5DGlAbkA6UQgAmJHeod7sfgwKD9/z/b2X9AHWyXGWOAwowgOcYvTHuAlAIDIwCMvw7BAHjazZPNS1RRGMafV0ebrxydUeeoOF5nnA+bwFqYu2hnEoh/gCCE4VoU20a0cNVeXIirkjEkFxEUiIuCaCOuxsEaxc07iyAxk0CYnnuOLQoCFy068Lu/55x77+G+55wLoAlAI7lOwoBMQuAPveao2PHGi/GA3GD/Lu7wnSCKXtgb8qa89XQ8ncr0ZArZxex5TvIxbdaw9mqf5nVYR3Vcp3VW53VJV3RNN3RLd7Ssh3pcC9W663XOWPTwl5mgQY1ypn4d1BEd0wmd0Tld0GVd1ZJu6rbuakWP9KQWqdfr5YNA9aD6svrgMz6d7v/Y/1J5WumpJPfCptt0GWOSptN0mHaTMHHTamKmxVw1URMxIRM0V0yzaTIB42r+Ny3qXxomL3o3/Uov4Hp7lMd1RYAeciBGTznQSq870Aak4w74TjmQADI9DrTTBQc6gOyiA530uQNJICcOGCAfc6ALUEqbeemmg8T/tn6aVWgv8wDd58At2r+XZx6hB8kw823a748y36PHyDgz10AnyDTzfXqGzDI/pOfIPPNjeoEsMT+hl8kK83N6lawxv6BLZIP5Fb1Jtpjf0Ntkh/kDvUvKzHt0hRwyH9BH5Bi2WD0BaiHmMzpCWLe0QE5KFkiKfm+B9EG+iQXi0c8skH76rQWSpt9ZIBn6owUyQH+1QLL0mQWSg5xGLJA83Ua4t1Kg2y2Qa3SnBVKEfH9kgfBfFe7Vr6MqDf5B++P0/X6OG/EftMTlH227zEM/AZQ63VMAAAIRAJcAmgC4AQQBeQC2AOIA3HjaXVG7TltBEN0NDwOBxNggOdoUs5mQxnuhBQnE1Y1iZDuF5QhpN3KRi3EBH0CBRA3arxmgoaRImwYhF0h8Qj4hEjNriKI0Ozuzc86ZM0vKkap36WvPU+ckkMLdBs02/U5ItbMA96Tr642MtIMHWmxm9Mp1+/4LBpvRlDtqAOU9bykPGU07gVq0p/7R/AqG+/wf8zsYtDTT9NQ6CekhBOabcUuD7xnNussP+oLV4WIwMKSYpuIuP6ZS/rc052rLsLWR0byDMxH5yTRAU2ttBJr+1CHV83EUS5DLprE2mJiy/iQTwYXJdFVTtcz42sFdsrPoYIMqzYEH2MNWeQweDg8mFNK3JMosDRH2YqvECBGTHAo55dzJ/qRA+UgSxrxJSjvjhrUGxpHXwKA2T7P/PJtNbW8dwvhZHMF3vxlLOvjIhtoYEWI7YimACURCRlX5hhrPvSwG5FL7z0CUgOXxj3+dCLTu2EQ8l7V1DjFWCHp+29zyy4q7VrnOi0J3b6pqqNIpzftezr7HA54eC8NBY8Gbz/v+SoH6PCyuNGgOBEN6N3r/orXqiKu8Fz6yJ9O/sVoAAAAAAQAB//8AD3jaxL0JeBRV1j9ct6q6ujvpdHpfknTSe6ezddJrFtIECCEEAtghEVmCAiaIQmSRAFFRkcUVFEVBxgUzGh3E6oCKCoq7KDWO44Cvvjq+OOPMuIyjjDISui/fuVUdCA7O+/2f//N8H0m6qrq6quvee875/c5yLxSiKKqP7ZcVUUbKTfF0gFeEeIPA5wQRbwrw7DFeF+TlAq8OJs2olKqs0hpCDq0hGNE6gpGwy6ENO41ah7MePX0E7YnHceIIvqieFrpxor4e7enukt6kKNmZn87cIXuPa4bvCVP11ESqjbqC4isDvB1uHuDHCHxrgE8I/IQAXy3w9fDVAuKnB/hJx/hpQrIdlSanTdLqnlMX2Surx0xg3eYaKqm2a3WDJnNJTU0NP0Y7aHX7YC+ZaNXqko1x2Kuv1up4qqayiglH3aEgazIbaDnHupwVtM9L6yPhkLmQDcbp0SgaCprkRs5ITrp9YZ2BDQXdYbedMZhCwWgk7HU5OZO4T3YVh9GMd95FHW8zs+wGvOvMum8emCtzznrJZpLb5i3h9++5ZqbRyGmylLKQFv/362/i/84tQoa33kYm/BW+2rFx3vxbNi2Yt/Gaxsrg+PHBStm0xuVjxi5rzEu/l5y2tWz8FPdB2psKyQsVnD7oKyosKc3NVehU8rS1bcWKNrksPqOubkZtumrexlvnLti0qXTeuHHzGmEcYSzpLrafCVFKSieNJfRhViCZfXbkxDFz1rP+ePz0h2ScursoioFLsxQUu5kqoLxUJXURxcsCfHaI9wh8RZAvCvAlId4q8HqQiaoAj47xNoG3aZJlqJRXC8kgjE2ZTat7Rpattzp94sgUebS6fRRSmxRwWFmlMRTS0KExEyv2ZgXtcrJyr9vlVCO9BgbGTPodkTHSamAAxqy4b+aDqHHVdWjcg89+M3b5vTMexs/39uIDD828b0XfV9cj9dxO/G3fV8xzs5B27VdfrcX/YBo+f3px9aObbtn1t0+X7rky+vDGTQ9Fr8SfIfW2Vb33o9ze+/AJ/P39pK1YYPs4gQpRq6j11K8oPhrgbxL4awPQKsRvCPDUMd4R5OcI/Cp41SQvgVa2C3xTcO/i9ksUpXy5wJcH+MUC365JNmWX8jqB12mS0+BT1UHocN4STG6EHimfAz3gq5y1YCX0AL9YO3hFz3Iip+26Z21R9uIl195E3tdpk/FJ8O403V6NsbVN7LtrbwL5rQ7XQL8ZDWaQuVi0HoWJyPq8kXAsCj+RsA/EUM7ZEHSsGX5NRoOck3NGPfm43JCL1DK5GhkNRchURJtsyOurQDD0TqNBxsnhJoao2TSaJreKRoI+r9kUYLwRXwzUwGyScw67z8snP/k0yZdePropR75gwR3lS9Dgvv/6cN9g2eyJcY7LYhcsuLNqUe+RodNH2AOjtBa1Rm7g8nUmq8rqmXFAftON66IRjG+S7W+imcJCq4Gh1WpLYaFK5XL5Zu9nPU/9+F9vjMp/Dv9whnpBO2X8NPg3/kTJnGWjx+Zwc0Y3zLklfEPbibFTp02bOvZE8eyrJo2SyZXsnIbRczZUr2lnDyxZ0hU/UKM15+oVVoVzlD9a7DdYfdMPxDfKSooXjKuvv7atjNk4dj8DX+90FNo4WYE1VBVkmLJS34z9Yw8X9PQUG7uvVFNq0JsuBSULUbmUnjJT+VQR5aJ8VCkVAAmJUXXUaGocRUVA9x0gulpQf4cT+jkSMjKZP23EYURn93++PXeuvZb7vLa9o+ZUYU2HAP+6BZZKUbARuo4IXQLajsl7J+vb2uqZPTUdHTWpzYJAdx85go8IApw7u4/CF96Sz0BzRBk/Kd/D9VMmyk75qfHUYDFFlfKcwBcEeA1IeYko5WaBN2uSbpDcbCFZCjLrNoPMyjhNoUMUxIJirW5vNlXkFHVYa9AVItbujiNdJExTRHlZc1gHSms3I68SmbQGmnXZFzx7ApWjBlT2/TPzH8BDeOvh9Wc+fHbthG+veRMZt6PcI6f/PIB0rG3gbfzYEfwP+r2H8Qcnnl0gXvbw2+hKJH+gae0zH+JN25Hp7ZUDp//8Jn6Ptb2Hf3gHP3FYtHHn/lVJxxEYv4WUFdrKM1L78gK84RjAVjIfWiU3AAqYakQLSEaRAgOEQHsk+wMq5nNyn2xnHxJQ0c2fb7CFg/h/nrvn9F2s/4GP0cP3HkPmt2/+dK1i4A93/nhXhZ39AxhZijqzh6vnWCobJIYyepSgW6CcciUyj0bmoMlsMuciL/ornaDZcaO29qRT6T1WT7ktr7N0IVPVH0pcSbfSrMN786itlvTp9N43+qvYWOnCS6o8XZRkx8/I2cPcZsoBaIl4J5gm0ho+P5h0iaYcVD4WRz5tISLqajbBQQXyVTARl9YLeu/Pv+/QFRt2yS69Q1/pZBiVP1Zc0FBZ29pZ1X/v0zsfbZk8S+GuOjSfbdGun/7BaKPKO2Hqr+9aXVU3feXl/qHDkfro9xQ6cwZ/zclAhvIoylyI4BsiWo94d/HAp5WJBy7X8zctXk8fvXLJ6kXNL65bsl52+oWrlq7q6p03qsz/4MXMNwMpbPBXvfX26Er/wx2yXd+ebjT4K98S+zAk28F1gd5VUDXiyJXDyAUCvA8kM8i7Bd6tSdpAOBVCspIIpw/A3mp3ECNq0ybz82rIkFb9TDEpLzycWRsCy1eIwCK6nMTGeX1ag5r2+voSLNW+qrcjRbWtQbeUl5e/0L4mvMDtU5XkqrKVDEMnmsLTLpvpSvStaZPt6FjZ2346euP4CaPt9Al/08bKnk01RqM7WNudnf5rpKOikFWI7biJWyT7CSTBQ00RkdMJIxXgjdAar4iWFgAFTbIImqIRkj5oSpEFFEtuMMoIBGi0vBqUzSkDKZXX8PnavYCbGlHlLIjAZgyZgKD4kAicdkDMMBUKFoLgUkBk0CL+uxufuA+tH9PSWVWP+zqvHPwe468G5iB638o/3IjxMyv/cAODMf6OX9SB+8aM6axpQjfe+9yNcHz5k/iefYi+/g+9z2J8w1GwG+iMVz6BW0xZwAaGgUMgPhLgy47xKiEZFQUvaiKygEzRGAKRYzk5UiMzouKAQGrGR0XNhYzZxPmIMCIfCrdMfMTNNM5/yYn0BWzprGs3X9tlwV85i1Wpg/RvchLzbFYuMHZCPq3RBMJbl7WrVaqq2PbaaHv2bTsntYS9zDhVsRPpLF1w4ZwypgB/6XxpfuoA+v3chNZW0NoQRGZmh0aV07FsW6QyN0s1vTa6Iwr6eQZTffJJwGl1YMnLKZ4N8DkCMQpeGJPiQNIPbUnm5QDMZueCNHm1e7M0Sq3Y5bGz8iRHIDw+5DXSoM85iACrx02EyUckjR3v4Lod4/2pb73VtZ7Ut34ur8SElqMV3rpaJ7oGLTc5DAVVWepTdY5P7WPHEgEy4m6jEW03+lFF1Jz11ttG49tvZelcASXIkChHS7n9nB9QqIiiLOissdXQFchtZ9VIScfAwCgRmJmLH/oAyZEFyT946GLYx6fw3/CpDx5CeagOv7EPBmgUj18XX/Bh5hLp5MU/uygdhc/V8fgwivH4DXw4iarx2+JzgFZyFOhl/r/j3ohnAF0S2ntXdpwOgS41X+CLuxJrVrexQkfvqvbU/F/6rnNtHkvxXIAvBEySbLhd1B1wRQwaYsYJRjlAd/LBmu/lcjUyEaLMhXCEsrKpjL78e6+hiEMb0jqMDq1L+0vdhtCD7wP8dr//S32FuffRg3je+3g++hX1v/XRyG88r5NCaAdB+W5hRM+kQwLagbsE3I22U9T599Zf8N7G8+/JUuffTchgJHdc9iClhXsgXhdIUtkE/pP6jCMAIxjVEAqZi8gru5n+nD6+efO6fc9dt3L5umdfwD8yfz24IT2b7t+A1qzr7b3yyt70+TJqBg+OjBeMj1EaL8uI8TJL42WF8TKfN14GDpQOZYFvpjES9aNqfnnYjL84XKziPwzU++Q5xfbvgOf0gB0jEmULwUPyWUHRJlPDzwkCRbqF2GQHPOdgloapqak520USzZb6COxcGOhxEZJIsgY0wHu2255Zt6z3umd731/b/9DNPfM+OnrlonVTWjvSd6bvmMn86cA60pHrDhyUOnLpu9fdvH3ewYPzpkzAP7Wln6MnTslgfrM8i0uA70ZpEaNEDHJkI9r6Cl1Olx+iLemlJ08yu/CSdDV6EnfQb6O7aT49TcJRth9w1A989WKK+CZBgaAQsXXhAF96jK8U9uoqS8F1AcJXqUkqodFOIRkhg6ODRqtkXuI2KysBgGw1vFPLF8JIyYJwijI4a8gIaR1hqdlGAwe+BQJfQ3Qm4ywgU0zsJwe4IxQHpjKOvC4vml4Tuf3GusjUQLB6bWGl0oE4B0PnGEvtcx+wdvC/wT+8dtenaIbimtmz1ihWzprFRha1zWxpbQuvdRa4r/KH3rUUOA3hoqr8eJ//2ptOX7+mY8vQly+soume/X0yieOyZwrlC7jrgOOOolqI9YA2Nwt8Q4C4rXmSTE4K8KOO8SGBD0lUAmRyMjQ7NAp4rjvPO66RALBNyzvJmOtNOhWMLhFDn5f2uuVqmSeicwRF3yoXgbPlikBjRwPykb9zPhgTR3UoaAIHqBRoGMc8AAZl7svbke2L38yimR1n8KMv3/DP3+5eNYYeq0Kz93wQ0V1WM/ZTZUGOqVSeLy8vqHBYLpridKhkrTVsvJWdUs/WttKvvIwfO3UXQy8Y/BrZt7+MLvlpC40mXJf83Y/zFOjSR3ZcMqGw2VPZptCsLNHonTKjrMgw3hny+auqY4r0dTUtU+prp8imivIxLFf6kZIll+Ujj0wPv+fL2HF0xZLlaCH+aC0Gh2Ltv4vcFgUxhYov8VaM0eJhvhqSrwcZjBEOTgf4POj76gAfOkbIWw30uCIEwpVHejlidETCHuKNip4s+QmD40lCAnI1C64s8WMJgxZ/QN7krHw97jx4Z6AyV16co8llPFbOP/uJxX+babbrlQzHqRilUpnN5WhyiuWmsvI7Xsadqo8+6t46fktfeSQ6rziHsRfWTsjdV7vyinErbbWBOu9o+/hcBWMyzCyyMznFl0WiFdduHr+V9BUWmD2cANbNRThpFpEiwuUc0B53gLccA3xKeqA9hcDg9qm1RkO+aNbyNWDkFDlqo+QpmeMoZOLkjBjz8BEOqteBlUXcuWBSpO6pghyk7usUFqNrHqnfNrvCubnj4R68EGnoRfOWPbL40tX30jtnFregWG36X/iet36d6FtHO9Dkd+jtnVfuWDhj8Y7zdKAM+r5M1AFJ+iMCia1ppHEIHiOST8YhG7T6F6VdBo8dlDMcMB0zMHt46igMip6YPRgHl9P7n0S7a+mJ0fMiHcbCwALP/D829kVaLJbyK4/Ov6hvbuvYpv8gzn2zV7+B909pqZq/7CiKNTXRtro5veMuGSvhTbOCAtmtouZRXRRPBfgxIaDTiJ8v0lJwieSaZC0odovAt2iSY2BvrJBcQJy+MmiopYav1T7H5mr1wVGd84iut+gGaTSDmLuxY2AEmydflJgujqCFgs/PICEXh/Y88RSFkyHCSYvCaRwhmeBunD2Sk1etI0LCNORyci24ScOSzcDFsjvw7TuX+3wqxmlXFhgYfXDSignPtVoKcxCbQyuMSruTUfl8y3buZrey1jxGlZ+XSI+uR++qc71/XtEeVTF5VtaqYa3V3WNvi+WalDIZrUL7Ud7ch8auW15SGZhttJjm1GsGSi5uH1u82NUcafXO0LDG8ByTxTg7UFmyfN3YpksY00qtRjve5XD11F9XE+vBwjwUM06YE7ysw9E0Hk6tVPX5ExMrEuaSQGFEH5eLfKKLE2QhSkMsCNAb+BkmJRG0h6WGBNl64jOd3sO8hjcfxwl8vC9BJ9pXHR/mNCEYxy4qCnZ6vDiOxEKMC/BV4iD67ce0vD3Ea4VkI4xdlR/Gwl3Dy7VgMniAIZneSGA5mQeDlKwZLUbGLmxFmOG+FqNhI4dKjkRWFiGszMF14S2vbA1UGOV+lUbDeAoYS7zz7plfz8lza5RyWS6jyFJmKUvKmNyqwJZDrbNYAQFPC2ExxvLRypvH37WmrDo216emHfZqMC0VnbOby1Y64mMCTZ6pWjAt5sL5efmWS6sj5X1bxhsc6F48fAepPyhK/iHwEx9VAj+DDInO+AReESQBGp0k4qUBEmClkgXg9yaL/aTRGTZYD0AUigz/SczQhkJGlzHz59GioF0esgcF8V+V4yfBUSXtM1k0lbAHg/Y+4Qgc9rkrKtx9sAMHdBc8HQIfcJt8HKcgzFZnqkNizEQccDEEAAYMfCKnHCFD+W57FN2BdqFHHLk5st3lBntKcMx0pAR6S0V6fbmbXpPeoMq2Oui+CjsTczhSh0fwWwUgxXjQauL3qwXeE+DHCYSuVEDLm0SGphV4rSY5ClS6REhOALEYpdXqnqU5a57DUyXqrEdNKIpSSyIC47R8Qw0f1u0zFpSYRxFVr9Dy1WLYymQn7rNI5IgRA5FBUbMpFgX8ZsHJ80gxVontueEz5BCukLQaceRK7gs0alnHmDFuT0lBR3TS5EURFBjomjDR4ViC37sTv7+c7rN1X7/zPtS4bNkKfHRJV1OTze/2dNddH66txQfv6bKVltQi24NfLEu0NBUUJKILW6cA/xqY39DgSDgWeW6DW6wttnXfg8Yte+jBZb2qJd0Tm2y2rrCmumrypFp86J75tnqKOYPP0AoNt4dSU4WUl6LykRaMswPpQ4wXnhT9W5BSr0Qevdbwx19dga5Gz+Ejv8ufPLSlEe2usMvetZeX24ci9opPD4LbmIWm38NWpXeh5kUPEymlxzSbMFsw9AdHVZWDeYu8pvbx6FncD5iFn8f7RNw/8z0+Lt/IfUnVUZTXJHUjiUSJYYEKOko6upCGI9A/nxeOKhA5A58kp0iIgDx27oQFt71/dID5ycBZPZX6lGL+a/23B2svZv65pGdUW74zmIqWhayW4Cx6wJnf4krPqK20+Me+nmDefTRivXPWq7tSiuWv/+PSe8gdKp0muT6V0x6r2tT/5uXMPy/P10xftDqYipQpmdwI3KHoIkNhenrsluWOsUZyhzdm3WmNPJpSXAftYYmdY4mdyxYZQIBqkNhMiFcKvD1I8lTeEG8U+DLwIypFKVUFeRkIKrxqkhaQVXeQJEf8wWRVxtUCZliPwqXIaRy5j37h/f79/Wd/aWHkEcrq73/+0Udpg3ic6ht5NMzBxHiaCywKb5PiT8BZrMfA1vJ5UvxJJ7GXojwwsMZM+KwIEakRGS0ITimKaCRzEgnbSWaPM9b4+7rn0Yk53X3+2oT/edz99u/BZ00dKY6XtKr8Dodf1VrCFPkTP6IPf/iTP/H55/jz1opMHJoSZDtYgcoBa+IHmSXang3dFSDppKIA2DwSiyax57PR2WjGoP2no3o/K/jjdWWnQ6V15/bLake+j0L++np/SX09utofj/tLRo1CPZl3JM4KPSa7XLaLsGIdZ4ZOiBEj4PV5QV6ZCqTV2NHV5U1si58WbNaqaI89veuEezV9aGkQF9SwY9m+6BI7nEhF0KgqjdjWzQpKlkXZwOesphopXiFyMUcA3C7E14jSUgSt1pAYLp8rEN6SdBVpdc8oTGa5t1Q0aQ4PEMlcqjiWCbmbSYQXXGOwvaKbRVQG/GM5ccFYDdhQ+KMNJugZL1ExUDKAQpfTXz64eDWaja5Cs1cvHiz3+0sHe1bjfnwP7l/dM1jqp2tA49egLHwSb3CvO7BRWbLaqZEbNLlKpa2TFgriYwcmTF2wYOqEgbHxgvwxY3/dPHX+/KnNvx475ndoCUL4DL4bTJFh/9q1M/OVhSzN5YWrAoGML0AdYF5jj8OzURowrcGYEol5Ux841IT6EscZ3CYj8bAd7oVuMAi57nCoxYO/QPmeFgA1/D0+4VrkcjhQHv4LumKhG/Zi+LCjqcuDGtA4T1eTHb+Nqu12dyTsxgfxIQlX8G75a9wn0P+BzIjCcAKFDSCR4so5sw6JoTs5oqCTzPKMoTfJOa8vJ8eK9lS0M8+GzPNMTk/v9uqgakytsQc/XuMdhQ/UhVMt7E5rzSXzq2osRk92zlhVIrrBgz6Z4U7f3VRPP+yuRY3RmqqZ/4O0d1bnWmrxq/iHRMSTvgy1bfJMmGAzxD0Kx4IGjyV6Hh/Sg7ZSINsAs0gCdrlD1DnkQARqz5ryvkQXCtFU+yqFKh3CfW1raIEGOtElBrO7SRwo0Ucoxpq2gyy9prcdH5GO6G4SxCbfeebMmR0KJUeJ2GGk+NwAny+IRqIokLSLCpgvWgLSZ+KXxhwgbrATQOKhnO1QLuKWxctkHTJP/KcDcU+Se8OoaPGnm3vGxJsWYd4/RsE8mJrXVRllHoyUlx8AntFS31Tjl2wBwu/IePCtjFQEPPZx1GCUsJ4a0VvRwWPUixoSFpJx0IswML19RuBRFlEtojXAgWJ1gPN52r1MFucV1UPP6cwmndEhckBfBS0GjszemM6uN6lpQHL4lbu8AdobIYpB/vRGU8wUi6iyV106bxPt/3Vn8XZ11rzd+EfM4x+euux3CoWLedDFZMl0WpfaE94bHAgNNhTkm/UMk6tm2MObt9yzme29Ff+jeyH++pb//mBl9bvHrz/6687OXx97zqFAd+Ml/lHmsoJR5mDzd6++9MNMnxf5ijh5YUFW9umjR9sZpv2opCOC/EOwixzh04RcadE3sq+HjLSAKTQZ1Lb5rP1UUPA5DWWgLKKkSAAfGUZ4uNIDl69p47pI/O/UjkSfwHUNUSSmiHYQ6aCprrY1fYn0DrorvaMLbRNxO32mlGngFlHFFKUnFLlQpmbA8TObFEh0X/S6WJQwaOlHr2kfY7E3ubyqLFmOvki9a5oiG61A3TLlwUPco7fmKJTqORej37y51uCm/2pw5mXlFGQbOava7xhvx7c/r1CgR9ALFt/UaTq0HNWWFiDUfSl68fud9piEW7dwmzmDGJ0wmSlH0B3VRTTI6zPpaIp1N7QBsbnmOdT63R146JIr59k34T/jW/C1aNqSNjx053do0rNwV25u+HF8Lb4d/3mjXcTxkf1W8B96Dv1S79H/oQ/xIqkfzxtHh1YJQyn7Dv0VW4c0tBXvo0HT8X7pcx/TCfZ1wEHob0J9ELFHSsRFIhXolqoq3FsRCYdRIz4QQWrYuTMYRnfAuTB+GPdHhu3quXuAbYsSeyrypyp0S0UkEsGHUEM4HKnAvVX0TrwsHK6IAAJcCpsIXh4m98giL7Id4HcooLdt4H0EqVrwyFqo6dQc6q2MRtYKe021UUUpMQ8AXlUCoUAXh4ifNisIXgnvFQjriQfA1UZ8p6i1rMCzEsPwA/nRJMOwVxckhTyj4VWTrCDMSEzotcPeJUJyLmEhLND3XIuVeOPVYcA9R2kVUexkuxtONE6aLPp8jnxQ/bbp8Bm6Ct4uchUTug+uYUUNX6obLHT7yfVxL3xKOV6MVRpCQRhlJ6czFCIx9+eV603EGQdk53QaAkYawCGaxDVMYmBDRxAULqEzW4ozkQvlJPNDbgAKMXzTru54ov5FZ6jOalTYWmoUhik2F1M6yTXxy1du2XTwwG0bW/pmXLyqd2YHG2wIDv+iVcqKVlvLspZC5GiqtyptrpabFlweT9TQQoI4Y+j5ukoPbYR7tdSmcuDGrkmljGsiPQ1/99JBpDuE5/J9fTMuWYPvS9TXJ+LsZnGD061BhW3SsqbUfZNcTbXik6CLyQ2rCJflzuyQfwmCaaHcVAVYXCfFW0kki/haZaK9JZYWOtgKXWfQkq4D1DTpwaaGHEA3AAUCCNxsYgE8DjHB7XKokTHmGN4lRRAO+JNDHzqcaoVaPbZRlXuVbI8tLt+pto6rPzUt4ac5pJPdHTZl6U+7CoICkyK7qecLgl2304bNbHVJesd85qcxtgl4JV4c7ZLVFDM7mhsb4v39CQ8rb+wurqVpWbVfkLapNUJ/v1CQH8jEFbDAdgGmKCkTqXjKklivOUCoOGGUoJGivhsRGWpt5giFUKjejxMJmhL89Zl9wMur8Rauyx/vJu+czoKDI/74cHxzoXwUFwONyaNIBpFkOmiB5BGTNAIuzYg5AxRiiJiJFTliTAK6EGgayA8D6CTGIFYLzz+6JtBWM8Zd5IyObynpuO3WN7X2wvvwv14eXTa1rbjUXjt1QXzt87LSoXr6/Y1+Dad05uUVuPLo3MIdO1C+tUBVH1a7LPEZFWFvFQisf6OIE/B8h7kIpRItHmXmRGsHVgbollimog1pzeYKr9zl9xtTPbmBityq48ePVxU1T7BzYzyeIY8goMuJdcvgDshOCGRHKWZ6wLadNZvDdtRBEjTykNt6aoLV3dVRK5tQ23FqO1i8blY4aXW7rUNdo9raRrH1uFssSskiYwWcRwDfygIMuQp8xglUGzWfupq6lvqKGpxAbM8YYW/+hDEK0ViUBMAUEduzXHS/VgdJLrpSIDH9i4S9losmKUj1GeKvEy0QOGHggfnAugQFPqghos03B0lQoRVeNckYkiq3NMmlsLdSSF4PY+eTgUXRaEmOgw9qk0UG2MZ1eyv94Vpih2LjwCgFSiI1JJxQrk22X00MkhsMEj+zhi8haQO+Vpe0XwaX0dqkrwy2Sl0yGINtRJv0lsO2Ujeo1V1OvkCt5TU1GY8wQhwtsFAi9gKzD4DTzJjE1IJXhFxKowPWr9MQTqMPR+3ETtm9lA0RCwW+otfJnN3jjGLeBW5ENLYC+LReLBiAPRrAe8T3dXV31fu7/fVfKmyaWtsUQ/3EFluraHZsCjBQUcNElLUN0SiI2Pvvxyn8W4zRCTTtxAnMn0DNIwxakF7I6g2qWtFONRnK3XY6Pr6ppdZYXVlhlU083jUfvmi+vz5j3+g3Wm2qWpvCWDtxok156q9WMJ221mCWPZo7kbkUuGp62zbEoDBitm3D85/8/vsnn/jHP9KPkEcVn5ejyE4X8eOG7J4yg6bWgcDmjjfoWQ07OQLfXGNEBSWFionpR8QvJDqbh15mfsf8i8oFb6CQpK1NcZrgLspjimMFAI2z80Y5FXm4B1B2Ce2qdSgtBICNrDdSgDaEw3hNRvfxcTCm+zMYTygDMLSFaDKm2PeHNATvRVj9N85h/19Yx//CPP43/nGOg5zJUhi5zSRepw3FHEwIOWJxOhIl3mAA/AiX3uFz6YUv0FIwce/Q2imRBZON0Yp8/eSJ6d/iqIDx5i+EfrT0SEpgQjKmqMHvL7Do1UoFE0oJAu7P+CtcF3cNWIMQ+PFiXhF0DrRSqUkaQJ8KpHSiQQkKI+Ny1IS0k3AlyGQo6POCG0O8UlKRiAwqeCtPKpjyhWNxBrYZqs4ZG+t7xlmNi7pstvIxE69FO5ABPXyodmDloY0rmIQ34GeLvIaGPUu6O2+fe93D17c2+o2LF9K39XTZ9KZHV6T3jLp+GvoN+mtX9URNrortjbYtmdc7yjz56IYJo+e2Xl5/rjZuPPc4NRWsz8VUK7RmRoCXHeOnC/y0ID9dk0xAgzqCYC1I6WdyOtiI51Rqjd40rmUyMQQJ7V7z6LF5ok3QPZfvcIcisdq41GIdV4RMpPoSmUj9EVBqoonwnqjaZAvOlLgP2/DojMISqJXLOHGfXAvnOKPZBH2CMrZbo/Hzfj+fr7Q7PgpWaXu0pWVDS5q67E3WTsPCMr58LKtgG4IPBzX+pNudLNFGv4pUGddonWX4y/I51m7rRGun9fJgf1lcxTaGHqJPCYLAeibYH3DNc+00lhTKrLKLqjAftNs2185/yC8r21fmtM40llQNRGaqKlRN9p2OLscD9jrWwk4pR7ODDtvugoJyvpwp6y9zGKYYSyIDkVmq8tSJo0fRBNqY/lrCkNc4g+xDSg5S4yD5WSaQzLGGRCKpCPB6gTdIiTUngdOkwhAMZqx4jlhXzKs1pICAzxMyRW+aDDtjgix4fSGxBjFiZymdNhTOQlQZct360m23vXTrEyj8x5tPPIGP42X/jVTor+jS331/9WE4fBIv/gBlHdq48dBGtPjmP+LfPv4xug0VPfH9e3gXzsc/fIC2og5UdPjqC+IVielMoy6lFlOrqc+owUaCV3HAq8b4WbyKinh1tYhXK4fxqjnATwG8mtKcwas1F8SrqIRPdSQTMj7ENwh8S5Cg1RJ4f7mQ7PsFtKrTJSuBACfLoyClJYH4uObWxGLRZRZh6uJhmIoCTHWeB1N88GcgNe//FqRCWuf/Lwh1kk/++P8dOv3mu5TwbXrX/x02IeoTufOcLyc6ckriE0aY0nAA/sLhQJpLZ0eCYbY89WlFBeMiflzaR38UDFYM59Teli+QvQOMVIq0ycwoCiaHQ3JSnhclLjzckJIjQyxajqxo/Rdsl0zNsVzqs3K6xlrFcnffwSnsNu0po47u8jgQjfczdXblAzOZmEyulnGpByNYyDEWaOleer7Fmi9n03coUruL8x1fDEALVGeOyXdwMpKHiHES4WU9UfhWHQm1eNwyVh91x8hvCEgwPIlBoS8uL1XO34BOIutlT9REP787RxnDj6UXgt9+VWADWvrQOlQ7wRPoWYkfffYVPBDReq252XrhgQOvN6Kce+9A+lalKhZo+/hbrH3wp1gFeAT+8pdX3YBvJP2RdeY1+SmuhSoChJIy4b6zlc52gbdrSOibxF1JpbOdZBKLZGKtjx5EnEz3IOnaCpoEWs0Zx5GScSyNwtGgSUx/G7K630HRF75C66aOV4asVgtttKx/rXpspcpww21Ylk4+jD88wAxccsPMmfGxl9Abt+L0yz13dExqm+gurq8c49k60cgGqjtTs9G03eUY78XPjLn44ptmzRweTwdgbBdVDL4awdj6ERFjMtMiIkXGyooAY0cFKuskxNGSCQAms0GuJs4qKJX4G2djJHYIJtGZRSPwfAxyktUXQ/wkqOesu3xx/VLmosqo2xYARL3qisZm1XSjy5nrlzXir/Glh0r7FrbIAlfOL7BMnV87YVx9T6OFXmQLuixyQNaV46/YdEeLafLRm5vLq5R1uVab2iOLV9EH6tcm8Cn8GH6auXxJd3pFT1dBzH7LXPTd2snj/CJHOnMX2FSVyI7c0NIyijIaTISbSVFi8akJSSPKgAhf8gD6yeBP2jbZ0YvoJacbvYBeNObqch0O7IC/sbjJ6Ya9jWgG/N6MZq9DM2zg6ZD5NgYDeVWpDH52dwlwFYMBf4nM8HrUUHL6PVZ19PQPP3uRciniWJSQiipVgOQimSBJXvgFPi9IIpZ2MUPLu47xnJjxUQfJICVtLpArvYX4CVoV7HJ6MKp+7V6ZwUwmxvB2XdLirRFnxIjZMgNnNAwHJOQoCm0/VyICZ4zEg9u3truDNrD71t6wd+8NS1rSf2VZ2jplETlau49NfzN56VpmMt43Br+Sa9DfsHcfokFQGgxxA2oYu+/GG5L71qoNufiVetIutJTtZ9tJHh8sBjKRjEc4Y3sc6DPPTA/6zOFobcM9uKetlflrlwNHPR70DsB/aytei25sbc1wKEFWBNhYDqg4jpotet6AaBqxj3QhUgEdJPO4kpYSQPWaAD8auqtRFGifwPs0yQIQaKOQHA9dRvLbDUp5jlbHVERrakXwqg5C3xX4pHAOJdM6nIArQKUBTVwOrZsCKZEyZ2rGWcFkjlBmskxEzPJnqrOMyINYfNLvp4/7/fgkYpHHH/d7pl3z1O+fumaax1/vR7ObGx8faGxOb6e7mxsHHm9spvvfwMct+IS/zw+/SG1BRW+gPLj8L7Er5jaXlDTPvSImHddFQ6FoHRq3BQ1KuyLvaZbruDWUGlhPWJTvs9llEGkdbSal+l4wMiZzjJTdID1L6oppn1yq5ic5nrFeh48ba7e3NJ162fFfbg/tDzfJGLnhslnXLnoO/6l5/J3voSbUjqquabxye/eYWQpljr6qct8liZJRBXBdid8+Zsypl/OYKfi/bqP9k3aWVqgMRbapXevbGsZ/fvqFa3bddc0kNP6lrkv2hQImBcfNHENlcgTrZWs5A2UExmMR6ztdYv2TVqxlJ3RFShOYJYMppgpI6R+YdxNQfOABZhOYGmAFPsU9TONkpLzlVpTdMpa5h+ucfxgfeQcnO9p+Na4F5SATUrWMGzcR/4D/hv85UaY+3ZAfCLZOqarMYw9VzvS3JUbXdQedvtpanzPoKa6tLZaeb6HCwkXAfrhI9hu8i0y+wudxIYczFzlIZAq5ZBySXDVDrXxSObexfJK8RuVx4/2H0Ry8VaFJpLcnstR4K5r9Nj5wMUqj6Wg9mpb+GjDwDX806kd1nlmGT/GPmuPHNSj70yD9x/Q/6Rz0z0z9AkucQR08RQVFJkmSKivbiKpSkgdWCclCEG4LqSrN1SiGq0pJwoIMfFRHJqHY1UhH0EUMQi5sGbU7UJy79u5/bPoG/+2bTd8++LdHH12xnKXW4qfvXIFPjI5qd79Jl7x9x983wQdSf3vwoeUrHiUPcmaHgsrUC0vzlyKk5tUe4A0hPgyPFg3wFcf4EmFvsKQCOKhXIMGQpJdUgpWBroXtYknY2eqSc+UDorMaOfuDHIS7kYobaSaZWB/h7EtwYhbq1I62NcSF7aYpTJ39O0JTivKqRE3t8/tj1btzRpQqnw6xwunQR8/37e/bnzq+RZPT6HVNS8w7fnxeos1+ScVw3G0BtxPaFiAco4gxeaIKFNOBfxQQQ1tiIaoaFTLgWSFKTI6SYzlN2zyhwHxU/BrqR1Obe+aXBpkqp9VjdY6pvFgto7OyCi1W7Uy8D/MzG1zh0OLOWATdbyirCpXPX9oC7v2vX0Ml88uDtDufRrGaxROsHrfFY7VqMpfkmU2VkyrGOTPPOIb5iptzgbg846oAIpd20Z/CpiL1aRW9M/UR7IXpk/QQbMJwNNzO9fL1oHeOzNzLLDFHXjTsHGW8IdNZbyhpUpOZWnJzYRFBlTwtb4GRzMpMIdFqn0GUwmLNGy6KB221i3WIblqjc4eCQBkcSuQiZX92llt/HEWeQJ7Ptjx09An82RNPIPvA9X95opvFH6HVaPUQu/Ez4MB78LvHmVXgQr39P+v37ex7AjlBZ5xPzN11/Do8Ez32OKr4+Iabj0v6MZs7ztWDPPqpBCVVIvOuICnCzgvxORIngzZpyIRSXqMhyUfeFgSfSWJmGjKTVJXDagulCn8vHCOFkrK4zzXH7o6C2yE+vR4kM6pzx4AfmCizw+gAyqt1ab1u+vZvwEZ2oaavb7/9a/wC3oFf+KYA3YGXawZR3uObMVpoxb3oFiu+H29+HP9lkLlB/MjtIy9Lv7LlMWRN6vEydKcN35feksb32cg99ElkBaU7V39JWGeQqgMfcZfYZvDqKkS64BLDmBHJSowfMe+OQKBD4B2apBcRT5KPa5JjpRrlJgKLZoBAayHQB4c2mWcj01R0e0srQ6QygI9rk6NGw1tjdcmGRkI2KghgllaKZCNZFoCtS7fXWtggFjjXapPVJHca0SVDMYKpF6j9NIdjZk5jlnvdGioUBNSi7LQvBgTBzAEvCUXhjF1OJg3ETEYAqV8uBF3b+X5Nzfuz0BLEHTiIOKCDm9RPr702de3aXe/gNU+/9Pu9a3vwVz00rq09OpOZ858KQ3/3zNpV+KdVawfVaCWS4aEXXsQn8ZbOo/H40XYlp4Krj9bUpOk1iF2z9ulXX39FLPs/W3Oioqzgm4SoBqqV1PEw4ixmUKwqELoAHwuRYYgHieFuDBH/fVIQ8VPI+CRz8oJkzntSD95acupwbQo4qVHJSf3lA2pkmQr9iwf1Ge+RVK9Ie6R2Zfg9mqr302IdS1qsYbngvljekohL1S2Jeqm4BY5TRxJikQuanRCrXmArHks+Bn1mPbcN7IwO8L2bIgEYvTj7PvfsXDUppkfmRVileRFKkt9giRQ2ZMnkjDpXb8i3iVbHquMLQPT0AHFJViYGD55h5Fy+ZJNygcDZxKQSrTPLZVq5Vx9nYj5gCsgMzCEPgXh59DETo2Y4tveaZ+jot08z9OxtL3Ur8Wfv9DKlwNTe6r0OTu1Lv8t+Rc7de4Dpxa/jt/p4B93x9xcRuvaTB7o0v3O9s/r07qPF76wm049QTR9vTz/57Yv4DDkr1jM2MN9wncQ+m8lUyeHsKyBZOFLBOIPB1B9J9pX+1E98bMYXDDM+kntNc+fVauRTpeJszLIArwSkD5Kp7+WZwFQRoURkXQQSychwUzIhIhchvSMYI+WEkTBBT5fhZH5enh0t9Hf64RffX56Tl3+SeTFBLyrKl1WeMBhOeIqdzBdl2QNGJicFBJQjvLVPwRgH0L3Yr7IOZJuM2QOGHOr/jA8paUKI/l/SIdpAGzGP+36RDr2BVegHWpX+YcScoEqqlloieks1YiWnC2SqLsAHjpEUcpUU4TILpKAzWRUg8x+9PrI4AB/V7s1xuLPIrlm3V5Mrig+VrAH3aS9D6/TkRFi7lzJay8ku2LWC/JJSqT7KZI4WMnJ4tZujMcKp4RUIitdHyg3h1e7j5CY1TV6NBs/ZPIrLNebaWeNy1XVLO9GlnStj/iWbNpfm9ffnlW7etMR/0ey5eNfcS9oMFV13tzg8A2j0xyj68cf4nY/RSwvGaQwNl/aOtZUNDFTkP9y71jNtRtc993fNmOZZ2/tQGdzDWj51x8Iq3ZjuK7f29+/89NOdD3z8cUaOHuM6ZD+BhYKxMzp8iPyYkVnrMNMbh1C1gI8KzF0CKhXSq4dmwvYIPjyEPhRQNaY3ktJZiqWUZyoUbm4mNUqMRa4gmQ0SVY6RJSyChJkRF0KsdgUyFJcBU/O6vC5ORibCEmbkJHyJRSRKHUM+JjOxlMTfPeaYWBQL14lFH6R+U6om88pZUirFyZU0x202uZgsncLF2sIdbfUK206Dhms2GbKt9aMXzmnKQ4qmr67C311ZpGZVSnm8Iye7kNMrclhkCQQ63SXop50dzDRH+bxid2p/bt5WDfrstoGZy49dPs7JAmMqK86xTWmKe2mmYKJRmW/Gpyw5DG2vYHXKbG6nK59RauRFpnE2Bz1qvEKzRaWhL7NFg2WVxeGSwiyWZlX7pxSpVcGqmpxsI6uWZ3On/6fY2+ksQd/xqC5V68rrcJYx7xk0a622hx6aaYnsW/d+kdzEjq7Jr3SaymuMQdNmo9qRvXxZcPxFyyoyui8Pge6LY1YlDRaShk4cqEc+YsL0zKOoTsAfHRFQw0d0p0D3Cch3BL9xlOSgqE/k+exrZJWBTA4qFj2Xg6J/pIcqwmB/jlaEU0fRxbWOLAv9adpVURGMMIVADz+X6j66ZD+INalSPkksM9E6VrUzdegbbEib8XG6q201PoJeQ6/hI3TfiPoXqe5yNGgmwb9ASCq+TJYFQ2RBj2SsPhiUyjD5WkC/BtFRGBUkClsdJLMp/o+qMtGFV4bx0wBsdaXp7QTtyH5tWXo7wbtz77OqOJp2BM2pr8ePHsF8/D/UbuL6btwPJ2Z3d6HZ8ThJT5H2ntkh/xDMtUL0yjzUpaL/A6BuEqvcMhEcaT0UwLnCY2QCHEE3ZyHwaEZryleJRsfkJrUQlhpxGrZan2UlFkelSyrJNGEtGCFwLDNTfCiHHcUoO2OOOuzmGBzBXigILv3ZchKXczO6HP2E/oUu34znnV508+YTaAqa+s1m/DGejWdmb+kdeLx3y76h08GVT16zsiPBztyMFuL7N6PH0rHNJ05sRoH03nt6e+/Zl/7myWuueXKNKAvHOYHdL8qCNA9DmoKxgzWgojVtp3cws/H+57GBjrevOiL6FX+SNcteEHOXStElpvvpfrwy/S79bepHJps+kg5n8v3inFOFVC0leoJkpoTsAi5hX4JkIQW0Y02CCZN5qKkjHSuPMGHw7Y7Q3QKZBsKEOnpXtqUOkwwiNXKNBsewDLvA/dBeYCkGEvf6ZDsCbViAFn6E1v98TQaNNbMow3r0IQZc/LfFGch3GeQh2XqQBGkuGold6MGlItyGJCuppJbOLAukRdpgIWsmmVIfPIKW/mLb5x899sCNdSrrsms+XYpf3kufSE9HL2n8TT07FtYu/ezPe2ddhW4ZjtfO5v7MNQEnIJV5Mn2M0pPYsVRwJHqmrF6JmKyejejPtyncMpdFqdA7qgrK6mr9mJPTS2AQPlqeOnmCuQHZdROV48YWFegdOXKDvdD4TzyJrj/95+FaDNG/NwD/CFO3ilU8INmBAJnXyEl+RUT0KxiQcSlWLCEuYXGF4sz9JEPi3WQWDV+mHWS9Yg1VFaCt1c0REXdoB7MUYmKpUDeYU6ASK68CRBmM8FE+pH2G1RcUOsksa54DdciRJoUGY2TJHlLjS6KIDjsld5EgHOzoQxFxQqjLKYXhkMFkj2q8dg41X5Vfhmrf/elB1yKX3f4vnMT/xBclTqAd7u/RRUiLnmw7gff3WMrxm+98O+AJBZ1uVPgKUr9yCH93iBb63kgP2O1w6bf41TNpexguqkfUyb5X8ZkBj8eBntv4yqtIc/CgGGuWeBtoKvRckIoSb1ROIrfJkhDYvfxA0hMOkcWuEB8L8OZjYBEHreas0r0NVk4J/FdDIjgkAObSJIthD7qbDSaroTeLXVLsJBMzkSZEGUcqiilTXOZyRs/u6cWPKUnhzJo2Mg+cW4S70b3D+f8DFXZH+RT7Q9KmHYXA+w5jDV7Evi+0rzrMDKamHO7tYIW21WsSc+PlJfYp5eJr6nYSuURfo21r10q65pd9KFs6oraU4ej30wFaSM9Gt9C1aP1wjc9C6J8I9E4AEOIicVaW6I/y1SQJCQ6sEyADBE3Da8kb2QJBCBEVkg4iTpWRGjJbuEEJnD/HUxIVk+B8QJdUl4qTlUJ2sWo9RmbHGpXIKE7wzJCLUlLebJbmyMW8DhcyOULSZ3wGOWfkjiLV4cuu6JmRGP+7rha0Bydann6obu6YjmCNMXtGovFo19GjL20r0smC2pDia/yno8wP/0I26YPP/0ar0i0f7Fi1Zdn8qWsEtBRdfXKmc3xsfsOk/FzyFt33kKdANtpYn/VpyvHtSfjAUmEfMuay1gyWSHJDap/yKDeZB5pZkcAzotaRrEhQJBDXPZnPAlPNyjZYRQjREL9dLZbTVYmF3S6xnFvrioADbQRjTVCC1KNFpekWa9q6uhJ96DV2zfE38R/ePI5mL1+yYjH6RqwL6WpfxVF9iSGBo452dh7dGAxuHKJACLra1kh2FX2DXmP2wLNaqWF8y5Jm+8uEs8t+mUSIdnI3v7D+5gPr6PfmbNgwZ/a6dRK3AFsZImu8aEeaeqnQhQyIVHwu205CfGBuQ6ez0R4iu5iSis7XtNGJjl58HCfQnuOkr4+vah+uVz0nhxJpoQUmK3UyHUKDuFfEoT4pJzQcv8yjCsWc0DSKTIOzCLwvOGgpIApp8YNC6gNJZwkorAoaWQ4+KwkhDWpyyXlNPpzXSBGyc7k+v0AKT6l/j2yaz+qklyAadfYwJurmuZqcjE5WaLlFQwlp/2n2/S6CeqCIa/oS9bYyv31KxektzJ5Ugu2JkyNNX5+kXxJ3tFJOsD/14pwcT4iomD8oxfhEXzJv5KyQYtGlFOfnPMPQar1BlcnyhfRGKf/hcHrJ3CmS4wiLhY2ZoghONrxz+FO/rM5/+sZYhaOSXeIZAi/zFT8KrXlyZe9AH0tJW9mOFLXT799pdeWgRmUZXcX7/adeA9R+EholbYgusPgH+X7uMdAEJ2DP6Mws+0KBLPaQK9qDc1FvohFZArEP0hodrlKxcI5KWgrFo5p6qWjfpKNYwA2KhJ4ot5xjKdrs1ZUhNg/RYB7cXpqEpkgWOSbmjWkwFwhcGw9NVvPxKuhHUDbqeesdtAjR22j2EXwSb33rHXwvTm07yryLLkOPoYXHuCP4wd8/hP/4++tRVd8tqPnhWy25yr5b8UvTp91qYXVoTPnlyNKyyBev66BfeQtvw6n7afZhuPGSd95CVyBmG00/BDe+640/oIUfcO/gX+EZ+P4PGHqlgArxJ1bzhodR27K2sNG8Yfo0/NQyy2x0qM53ZQv++6LyS8T5nQbgO+tBuk3iKjpmUVzVwnBdKiL6wBD2wQD7oDPkA09Bg1/QX6za3b9hwwSFYu6kKfjF34oMJA/djW5EuvRiwkbM9Ut3r+3uRr6tD7whkpFznEcLRCvOuEPk9k6x77gJu577EcmfpY+ni/6O51y74GmL1nDdU1ePNuOx9G56K+49smUFfmrG6OF6WnH+O030UqukHQh9iD5MJZg92I9eSOvpv9N++isJPzjw+78Dv5/kHIrJ2pGc6EgUBcTZq/5AsoQghaVIqxsscEjLSJC5BnqiijG9WJ7mIiEKAARzzGGWhXShoD5EwMFllyOaedVSy/Kjc99W1vr3u6em/FPcy7u1xQ8fZz77/PQdB1q33996UN1S9tRSfJA9lZMbOc3V18sCE8Ke2xyOGVM1vjl///vzJGO55rXlmT4awYUzdXy30BF0a3o2zadDxDZleB1lhbG7RfL5JJYd0Uu2EHg2laKOsGJpXopiy4Fso0LhdPN+NAHNPjLMC6VYvhN6ZboYY8sVCO+wib3CO4d5WpYUYysh7MwJfALV8FnaZ2idwebyiHqTS9Yt05Fa9+copLVYnW6f5HsAk4/q3HZWZzSoaUBMuUmcNEEC4i4nC4MuQzHAHRK9x5/KnkSFaBqyDywY+Ovad5/c8jdk+w2KfrZu3Wf4nd88jn/72SaWHkKhLnxyM0jgTPTYY8jyyBP4j0+u/fKJBX07960/DjfrQLHjN9/wMf794xEsdIGaPJJpK/qG3SzijxZaSxBIJRY/aYJk1RkST+SAo2oIEpHKC/1wHZeU43ayGZu1rnMOIBPdsm7/xnUHmNID60R8OrBu4/51Ga6CvpHPznxPPjA5UkumMgAWKISkxhqEbysYUVUlfRufq0nqpJiT7WdAaM98r+zn0ChseHbDOniQm1+4ed0IpNy/EZ7ks2HYHLEuAcm2GSleKWa/1eKiRYR1S19mlolTzEDawwHkkaZXnvWiVrahVyduR6idpdrgIdFLbSvPloGiovYt2pm2uFWvz7FOmand0s6K9Z+nd7HLT98h6fsslpKNI34gYJuYxCc1g01VzFU2W+qeqqZX6v122mGuNtMOu78+wxVCzB62izw9SBDRa7aLlHxKWFUkn831iesZOalmajCPVLfJxBI9krFxiWMpzcgma/uAJ+Umy8doM7maAilXY8jL5Gps9gvmanQaUWw1NLypFz1A7bYUmoOuR3NS27al8KP4JvxoKvYWakN3ora33sK78Qq8+1r0IHrwL3gLc7t4etvIS9KFaAtqe/11/BS+Gv/mzTdpGkjKevQYnpmpUxjiDNwA2CgvFaFiFF8oZqNY0VJVBUkmSiNmSElKlEqyZBaJxV1Tkywhi83pVSFp9RvwaeziIpykopYE+qVq1fMS4Zw9H0XrUJCsxunyueRffE2v+PqLdTe81uFddODSQMfrN6zr6mEmTEWa2+9AhtZGpudfqcfKPjJUvO/JU1T2VO5eO7COHVqdmD49sdrQNLnFOz8Sme9tmdyEd6Zs+YHQtIuCgXzmT5tpDaIdjqza9TUbN2bslZ/zAM+yUFXECgOLt5IFBEjz1NBOUR+doCHBQDIksaFgzK2P6mjiaxNVNBciNeuSXfDdseORr39qcfMbd/XxfN8cpwYVRi6au3o0M/uXzvg1E9El/WgSYh99Bu+b6Jo1b8GM8cWbL/hu5vlngL2dDrJXROytSVxZJ7P4kpziSCmWUqwZNJmViN5c0lTmwAr0k8MRr6enKGzl9Vb6tvQ11vpym8KKUpgFP2fQpxuV7zWj99C7Zm9xXn396d/VlRVyZnoK3WLmCsvqzDiCq85bg1APlmVQA1KPQOaTRrGjqi4Y/Ti3gqDAUucWChzqku0Y6jovZlhI7lkg3vPsHMsMq/75VH2yNAXgjIvZQch1qotmV13EbM/M7lx5mNme6j5MUyeBBtxxMiUMf+vKDnwEhYe6hJE6rAGPrpiaQA3aMjpsCoimyT9Ch/MkHSbYkyfqcI6adUqoY7KJK/cqXcXnq3AknMm3ikt+BkUtdjmBrXkkiNyWRrMzWpnG/aCp/enYyjeR5t63JE1+8x78jzdXonFoA3oEz2U24xvwrvS9RJdffgWuuuee0+nj9yHtGyuGdRku1t6D532Bln6V4TgnmRDbL9ovIE+A2NgPkJA5J83bVxF7SBam0obFbt3JbL//fujBid9u2sS8uq6uWbQJx9l+br845gXgcwyaST/pxfhgvljJQfx+iiy+++/Dzw4XA/YlmCxxeE62relnZqdfa191UaK+JkGGhouLArFG1jy0/0d4syMu5mrwSfkR7gn4XhfJRMXc0swyaYol4sSZ3iR8pCBJWQW8r1A+hTx7mo0d7S9NbbFYrlLRqlx741qvRjs4eRVqRa7n8tzYnf7v/tajEYv3N5NeakvoGyc8tadPRf/FlG1fO8GWc8vklegm1It8eU78Bh7/iNj+M6O5zYBdVniOUsSK6GWSfJGzCKoC+dCKvggfzXvh0MRTP1LG0iw10BY+/1CSRad456EXRj83/LZbw+ccSvrh7dxDe9X+XH3pC4daT/0WTmbDJXvzmHx9KTjNe12sE06NfnHIK57ya/aWkA/D9XtL3Tn60kH4gP1W+60uTq3V1QzCdWQDp0a8CVfAhiyZ2ZDDsDnq3Lx8p8vtLymtGPkP/aeTfEMeSqpkJLplGl7tTe9hImRsbYiR6aPDwk7ng6LGPMGoj0GGkMwU03tYB61xgA0jG/bm4/iwVBNR4yixoHttDpkd/XcN2lGtdKS/Yeo8dtxfjmZbegcGei3irt3zCHIfve76P+BPUt/j3UY7a/dY0TTMx+3KWjRdnCutOKvL2YDHPipEjaOmUp3UFdQiigxTEEZrkThaZEXfICFYc2CkZgjJK0GhOQqgi84iMTx+jrZBzyrUljxfobO4IhiOVscbm6bNJnGaGbqGLHvtqOaWKYnKuZeJqh8sgyuL8yol0NOcS6YBb4+K4ZrMMWMy6zxuD1kfk0Znz7mcDKkIYmXRGE2KTch1Yj0eGHIfqzeRu8CRBrDTaEBRPRF8A1yxsfhav6ZzStf+tkW+QF7RVTcpc9Y9s7X8jue+QTcBA/iostaquQO19i4PhhORZ+770w8Pbi9QIAVqMRdOf6naFI+sYXtWfpK0sd4CfN9BYf5NwXUbFVj47D106Y9zr1rqmgyQgE9+/N03kfHWyOU3voEm373CoOjpcmbbPJ0tFw89s30iuurV8OECFn/H/r4+YYtMzlubDtRXWN17gyVmZPgvrb/zdMjScef26mCu6Sm24gQ+qlym8k6tRo8gs6XDWDF05mlUZlNcmm8P2ruk9X3YetkOka8WiCswnoscEd6fM8yFI2ReqZaUUyGDHXbsxv3PP7+fFucibty4kd2ybt3pq6Xtz2xgRIlIeP0kIXLU+RzODjLTfM7+GyUOVzzC/lsl+0/mL1qHOZzDLQqB0ZbhcKIXckEOR+r8TOB8SAAQkxDtQkTumjeRDpUh7evEqL+9DX/75p/QLrQe9+HOC5K5adKHV7yB/3HfW/ipt6558+9fAPnb9dXIXJxZwtXs83G16uzSSEbi3IXOLpgpPR2Y61D7qsOpw0zsMBhtoW0NzQLW3ouvTHURky0Ish0ES4nhTnVJOEsxYLMPK4q4o+DF5wEvFuu7PGR1Opm0gI2HAfst48welINiHjASMmRAzcYEurpK4bAzDY5aOQrlTk5zG+W1jlTn1OcZF/KlPkUvR9BdU4076Xn4hGzp6cAk4/yDhTXy44rCInb5RKOAfigqVAxZO4+e3vPRp+8vsjbRYwZS2sy608CVvqEMVAnhegVn65CNx0i0S1wvyl4AWpyjKqypGVnTJyfdAvAi9klcNhwhUCMxVVHv5yh/XBgSUJZx/Lr0YFkt7aibv6xn+0AvPZCe8TD+qmPydY48F00bSB4O3TSwnNluTcyrLUvT8zctqi/OwVtpI03hQ7MmjH5++rgnfbrhda7geXdceC1TiU6dVz0oMhuWEpeMpYiv/Z/k2jBSrjUCif+NlOvhOjKHV/JNiFxTCvA6fBeuIwvrxP8iAo5J/SrwGkLJQijDa2anR/AaQmlErgJy/Q/8B5Dra9C4v6Cr/4LnDRObe9OoE92A5pwmxOZPb4OPcu6zRC1247lgPG79mV/mQGKkJUS8ssw6ruJ8feKXDcpIu0mLNYEkyhYbqhVl/+dNWfoyykJelPXy0qUv45P4Y3zyZeYy/An+16vLlr2KlMiNFIeWLj0kytNw31oysT2zQJJl5FusI/rVKPUr0MakkSx1SPpV7FW9may/C9bign2KSMWFhrN7L2Ac0Bf7EM3vPUPtvaAp+PMNe3mM9+3L1CWDHDmgHzQkO6lHI+VIjrgRixLX0M+PnsZ8IDKz8mmj0xNqmfsQh4e2IqBY9+Ah8QUP0fenH6mRJC2a3lWLzyAacWQ9S3ornMb3k0uI/CJEK2zsTnE1KJ2YedOKqyqR8LJYCX224kb0DIfjWZ6YwzxcfaM5V3JjTOSMOVlef/qzePmPDVkXIfQ+u/x9vDU3K5HekchS0zvx68XRaDEaFW/Xxb8rLz/RoL5I8+WXWkHQirrUBxzXBZzASObyq0ntlvh/tKjIKIn/O0tSrybLINCS03ouLoDOokxtGf2XgoJ0Xlkts2P7jvsfQFlRtw19YAqa0Ac2dyw1t7eXeaG3NxMv4wzn5Y6ZLCYL96bwyNwxWSf+oOyP3HFqvDg3vkn8P2MU0optCnZ4brye1tPiQvX6TM6HlLnDDhPjxCoT2ImS8l2yTo+cc8E2GhNt09ma+Hnzf9upZNx+1ZbK61e5QzdXz1vc7A831264/97YqZ5ah/X9rtvbSnP0OdM6r3JPaRzXudXqVGYXB+Z9U5qfx2Rl52q1FeWzmKX4GfwaPiNUqy3F6F15ljJH03eFM+6PFcpYb9OaKbXzqwwqry46pb2+uWtyeVipr6n+1Ulm9Jg3Zpb+9uLGXS/f0r1LoWxqOijN+R3hP0q112e9yLORoKpfKKsmsxRI8erPPMrUcTqefpX8seTl5w7mF8/QS/alX9xPDeeqzvt+quoC60UP/523+H0RMzsFfktqgJkxYrH7Sc88w7j27cM9+/cP5wjlH3L/D2VvAthUlbaP33Nzs7Vpm5u1W9rsadq0afambdJ9X6AtLVCgQMGCZV+kQNGyiIgsRXFh6QhqdXCG0ZsWER2cKSouo1HRD9BRZgaXGfUDPsUd2uv/nHPTUlDm7w/a5N6bm7Y55z3vedfn8cCfjvIySbja3RBmUpwofpLoRHmYSIoFl0HydLzxoEVyAUYh0FuMGSgRadDzBQYBkOvk1dbXWgXK1jet5eXWn6Kt1a1iryCspw3ULPan9Lbh71qz2J9mUTSo7eXN6AWf2CagavL6THBLZv0EG0jM9NOGWQilbpYh6uoQXMvzub2G4/HAnAzQAEAjgTAfAXrE9Qbwzzq1upn3AHtl5L0wux/cAgSk4xS4FcwNr23iPTzyABoXMgFaBedHLqDeaxLuTaN6WACHH+oALk8GaN114ExgL9gH9o2CcpPEKBgTiUvdR/vIL8O5GoR7mIzDkIhHPDoYix4On1yhVhHqay1QCKEKN25xAwqXMWqVlHh1vARldIoq2mQafiG+taaIlxc/U+s0DXekb9q4IlnD33D17VSLjJXGikSSTGpeehx4z2G1KtlyScLV96ozNVRPRhz4UC11N2dhXBlhxK7qwtk3PWGGlkUW4US7tRpRWcBfz7Wv0KN9QkiCAQ34HhMNv+ERnQk8fNrk4Rfz7AqBCDquAqDg2Ysybc7hy8NfO22Z/WTvyAUU2EDf5PnxZ+fLEthjFPwHKuPL+akFap2SPQnylDp1wdVYqpu9cnUz+LF/Wz9IhQ9X36O6geDq5vrRC2gNRv0cI5wl+BNcey6iiKgnZiCMHTiUQRLpFQHSKgRWK7E8BEcI1NfabFDmhVBF8B5xHzqKyzhxAR1U5HIBPkFtgQCeKhQg+9Sct4Z2TIhL0Wo9Kp1IFKOWz2YLPvqoOb8uu7JOB04pJ0wZWbjkYKIyTjlh8s9LFh1IUIKTKmO8Ji9piVJlbPEuBvZCs1V3sqiounpI932M3ysxnTTFKxSN8AlknGJPKaJ0tZXZYplcbkpIN/vya20fgROzZzbnr5+wY+gt8rE4ZeLBJQuHp0yEvyPhwKIlxM+TJ4DaRoXEc9LUqHBOO8n+K71AN1RdXVR0MpF9yjZZugT+cKNKuUT5Cz/B/Ct+guWX9lTadfaU4Xo/QW+6mT3F+QnInkKdByaclPjvbgK2/F9hD79K7gczOtjwr8d8//0gvnfMnnoFND/J9ncAN/gGr9Vu8l9wn5RHetzQkuJ6MnAhig68rXNko3a2O8G6ujqdy5NIsi6SbdOxGp2ueirYCe5trdbpSDZ11AbrJs/BnwcNcF+kYQ43n2D8pmpduw68pdOxzkSvS1ddDW5nN1X36XTgE10betBVt7JL2OVTI1hRLuo8qgX0cXkBrEGg/SKRyBQ2QaBkdqP/pwfM36vEUbNKSbYs0zQ8Rxn5G0AV1U9ZOf2j5homkV+NkVgFuromcC+4t6kOt0O2owfwhRN+RLCB7YEf0QkV1hvwNY+O+1lP8i7xfviV3mNwnzsL3It6VTDslNPDm8V2ZWWBrW67243gpZxO+y8wMTyRujLU73OE3RNmFRyUGXGjDTGac+ORYOvw9+Nzbui+l/hn+Wd/rVaglu3Cdkf3jfddX9sy/D38yQKutuWarYRwgfS4CkyIcYE4LxxnYUNCEhVqyDkv6ZoXDiVmdF727d27D8zVkF9Yc3OtI2rNZc44YnUqNZupMXp5W70mDZupHv2ddwmj+PG47yCSlfGMml/jToqs5MfQAkuxFvG2FtjIK/BYYCs4n2NIAcNSTZIKDKcYc4ZN488N/l/8fHr838kff6IhWWtRkXWE1PAeTSY/xscpyWRYI2WpFEMO78McYwpLqROvP1eNfoZrGCa/jl5yA2LJr+CTcD9nlJMpD2oYwORjPiaMQ8q4UDEREUaJChcGJs2ASkYYDgVQMJqjagpluKBbITWYcbOLkGZi/jt7k8mNYPm9qCHNIFSpXRE2NESXVkAiw/wm9E48MkFV/rxRL5XMk+WLgprKv+mNUopaUCwRB36N+mlGvFFb+7pREZVovUSmxlsTTLf8LU0hVYoU9BeJQiqOs8ki3FtyYjLRQdyF6ocEduYWKH9bsPzVhJkaaWgh1+lzN/zQNQh6XOFnFtLPxgm86vopc+aP9nYjXgyX00hAJYoItygC7mlQe3BFVPgJipZXpXZicAVUpI1wNVVCDufYEvn2RbBgskhkVuBuBGhdCHRwt/dRBC0VmjF8IjTUsgDeNb0WuN1ZxlNycUxer7L3sz/2vd4Ibvk02pYu1iRSCmGcSCLmC10dZUr54lSxsbHenhEb55v2oFDI4ylSHpTS9XVGs5hSWIN+sTKapPTRmnh626yptuPe19krt4MFAj3xMyhgau1OJS85x9hTLqVorVEu5Nnt1iJjIvnGQfZ/EJcYEMK/ZBdYBER9feyP7O5bzoJkjSIpUZwg48XyJSJJrCja2ZEbEIkoiSjOEh/MC8z3TnlbWFORlvmHJHJKW6bV68kLFpXGy8RK6JuS4OrRpKhEntag5SmnbeP/T6t7MlvNfsN+/nnx1HWP2VvLeJt0RW63VSHkZTmpBEniaH7/beFE/tvQXkonFhBcLnEUrRtFy0/Iv23gwuKElAFDoSTyJyZ96PkCz3ffcpcNUkY/FBLxfmLEQ8SzBNxDk/SG9LHI9S+uoHD1Dc4mSkLKdVDzylHbuEBthpuPU4WwY+BCNVuk5fxyG3/AVs4vUzrYIUfHKRNQjXw78iOQWU/fksUezzzGd2fwLRlufjxVYbtaml5GgafYLTi2s6Z1AdwN4f9G8BR4tG2EnHYks7g48yFbQYHteg6YBNQjDD8/wTGuSTHLQBJnz6pkUHCDlMdNGi20QmAw6WgBRWq+BivOrjr/lwOLgy+zT74bSB/uIy+/yD53imw/zf7+peDSg3/5521nwW1fJw0ftOWdJi8r32afhTZL9M/TRbmCcgKhhjsRuqsqFfgsZgEP4Qvh3RBtYwJuH0NI2Ny+jyFG0EU7NDCMum0LXtfnKIU5yV41GQbf1jlJylOvrVGwTlZkNmbEjpAq8uhisjopxZRAUuXFCXUa1j/yiSi+mnwmxy7S9TtEScMnDFZoV7NDzhryszpnQox2ZC4oiI+OSr1amwz+oWGDygTwdmGJhkpg2wF0FaWRWjCMJyCCVkQi6v7ApX96VBd448G+PNv5RhIq1lzbx40ktJFz4XmYJNID81gCGvT5HVf3CsLwCfvePz8l/FAgRNoaQb5h0io76i/AIEJCAGIShEd1rNWU9m+bnn1BkqXYk57GWj0aqDJtw1ey007b3Gy8gk9vSc8aGRjFHP0e7gH9XH6IWIZnWBcO0aiTX4MBsNUIABInjMB4cGmuDCwOHpnCjEmKPBtkPI4WtDFQlStoRuYPmeLgGY1aFRkJtCQ1Oi7jGKcYJT1Dco7SwIRBT0B9pvPiQ2hSjiJxaLkj/foP7qAaN3xwO3vx5RPsl43ssUb20kvr/17f91Ff3+JFv6Ma0cFHvAk/E3/v6fn7+peAjL3w0pZNXbtfBvLb2ScW9+3/+4EDf98PHyO9gz8v46di2Ub46rlEKfQn9nE5XKbEhQp3rE5UFluBGlkZFxyECVinxznRp091ogFANrMBQxlFYVRw1PdkcTJlYYSIWcaRVFQ5GRvK0CPa0FAC3PSeJXkiSQwtEyLcuaIyeMGabne5c/xZ2NjWJ9OyQgn0deJUJovN4Q3W4qHycPUrFporYoFDRQvUYw3lZmlklMCv3MYVKKPbeGOj2vtW7/33w4fduzsbVza3+HMb4VPzSrJr9IX771/Q6M9tbs71NzasxE8d83bunHeggieo2Devt3fe/vLhK+UP5zc2oUwoFV7V1LSq8epfrr9nX8XwlYoPVjfCl/hTAuiOxkjt2ShnZSlc42jPLOQ6ZnUINAL3xFp0CFJDiorTCwW07CgRnWrwBUpvSk9pwgXIHAkEhj+B2iDIg/tjLE8o4MJNFjMu1b8ZayUYtjrucZYaEuMkVFZyxhQF0OemCbKrF+XekRTXvn5TbmadVykLFon51tRoieimbJbJDl9HdOykwJJyydBhc0WaKNHaXKmLjX9y2ksH7rCoZU5r2jvvx0lEMUKxCNu5Twl7+BegDKLskQXH9yN+mBjzZtE4bzkuOW/B27bRhJgOhbHIY/V5jWoakXsJbn8PGOFnM753hyj+mZa8UvYSu4fWVdQOb9m+sLAIOPbULXyEPfcubxl7nD17Zv36s8DyiMMvCvxuHk/yj9jYkaNbl65caTIP3719uwe8qrzjTGQfJIX7BPuhPvMiTyIFFACzRY4R3zAAEPK6ffxYwFfxKTXiYjRBRxrNAF+l5nHY/wIJyKfb/f3bt+3x+P6x0GffGKdkw++yP0gkW9hNOQU8lwTkAEFXbXZmHlDnFtHsSXg7e/GVx7p0xueWFGX2UP1XTvuDEqu9FEw3ZdUpHd1/XF0LeH0f726VdKx7YFHL/rn/eaOhXDI/h5/hD0iKzM3sMY02l+LJrRG8f1z/zCeioW+VwFUPYPgQVFrLAV16uCabRlKB7dsLjTwXb58tF+UnAtbhjvA8koDqGWrlPBvYGwb7rIFrnEgoX5WMarMjOXYNV5stDUdKDGhFigDad0ESEZ+RyMKLJUnaVrzgrr98dN9LIPZMT1NKStP6M+zXL73IfnN2fXMq+cZ9H72weUFRBp0yqecM1PN3gdiz6yelpk5Cd+GYZGQdKaH0uIlCaH+7CES1UjGG5FFlD1UjD6iiBIpSkRh3OxWKCYFEm27PySe55SSVBxHhjXd0NUHb02iGMmakcPTEbETJI69v7JQ746MTI18gV+mcPigDlxs+uDjy73cqX/kU2WwPvPY3aEFe2Q8WxpuNj4AwOP9EtdVVu5OdxM7ZZlTH2YCInHI+YDQVvTxy/tMsRZyFtIMehybJxz7KRhkl/wBg3apl7LdhMszex/6nYYlL0fx0993gj9++Du1CAbZS799bWS70x85tR2Aik1qiHJLhppgJFdv0ZUXWVYGy6K9Ko9d9mZjjSD6zOnrklR7d52JeBL8xwpOlICyEB6MiuwmkfqrGsYkh9jAiVAX1c6hEhNHIC6MIfrTO5sgNVl8bOGCkVOpIyQyuyDRFRi4FxJJ46AQyFPYeGzuB+bqxgysIKqZzrd8DKRB/NeHo271fswPPPscOfL0DlIq0mgfBIXBsb6JManAnbWJXsZvXNwQS4gr/l7S/HjQZc4+w9JkssTIRsKDdoUvIZl9mMxMF4S8mbV30zXNw6J76mWhdosx/essGcNc/nwX1X/fugD//aV2B0B09vZV2Z5kEcRMmRmcp2fPFZcqKgjvMgfy0Jf7iHyxpoq4P9DZb8okl1Mj/LU8+IxGPyvp7wun8N4hMQkOgojpTeMCUjgrzTWpxBmCy7CE7l+6mdFqTV0Z7vNCJQd8czpHaCNCj2aJUqNSocgD6MtA9AVGgEkwAvCvsirrFS3qs61ctfuLxjyVsKvui5/CcqsNbHC6P3PRyzyn2cm7P4T88Dj4HckfzSntc3d0l6q5/PZJtjgMbZ85+c7U4jdp2WiMRde2m+iMxsJegf8oSSYSDKCGyCQxO5DnDFISZgJMpkDK+MOOzY3gijw8aK24/U0AP0N6SMXZAZHKiAggz2kfV/Eg0BpmeyA+LaEEfl+woAGJ0DTH1YmAxvO84eJO6u0nTyB/kvsYlSxq32smugw7H8OHu7uHDDjBJ23N/a3XTLH2qI/7WyXUFGo2ZnzzyBnkwOUUcZeTBSbXwjSpFrCSG12dNYnVFRcC3TVTcXlx9qjXJmpYE/llYyOqSWMP9DxabbU63KjrPYYhXyj2qQ+wXpC4zZ/3uj1V0DE+n/5R5JMvK8VeY4Jish/rcSuQTRQRCSVCO4fJHh5lorrcsh8MhiyY4XAAb/axIrkw2pts56CaUH2TknHGi5KiCoQuKa8ZwcyQliAKUIAXjrBG40AkxR6OkOtqhSY8UMVvwi6zpORS1/u8g+8ncqt51Dz7JvnL1eAfPSFmLWpqbkkvBgFrGbma7sngT+ynKaxNnJMqlJPtZpuJ7nTMZvpdfkJGV/Ryo+7/tIsa0+G/s1+zTS9trgwk8j2MtNTE6ms1jiXrw1Lfs27lGa7EokfZmloCXQfA2P6cLXhKZ+GfhWGiIdmIh0QWSCWYZAngEzOpxdVKoQWxOmJkjRQp1oLZtvhMayaXhgZySRfAotIbzCF8curicc/2SpdDnCykoVCj1vOi7oUfQZYppy4pliqVMmzRUR/5EwcNQDvnT8y9OvPQtrpNKlg6KksVyaGFLB6WKOHnGoAw9ousadJ1i6qSDJXXF8IVa9DgAX75WMcVI/QPwNnQk8hOFEuiSyBTJmpyS2rq260qmno28UnddnVQKQp2MTUhC5URzaKbBHyqthjN8K2JlWAYPZuKpRrgHXrkuAuVoMfNIC0JBEBIgCfAVmPDH60vBzJGIb8YrgwZABvCYvBa32QNtAj3f4zbA5aRUKfkI10etQIF6UqnyOU1q1CHgDpI+OdSVJrmTI6mPBSImhpwL5s+TMKKGuP1tcYqTMh77B5C7+35w78aFS8J1d5WkR+Xe0SLkFVPKof6gczgUD+bTYimIEarZ15TSVppiTwhFPEDyBCQPwQIBkE5tntvdm1ZUbhaX+2eCqZRAIlhXFZei7RaJRCRoZA+LBFFX7FDVWDKk0qtHwEkyeeTTrJX3SehprQ8/4n/00O/zhbF11Baw4dCm3aeCPKWkXhQl4meellJSyT/8FJR3XmxqnFQTA2JId9gw986nChZVZcewVfESSSZ4lDJJKmsGrrOHfcQUbA/7cHdFhC4jB4shRy3t5oJJiODPjailBXyZDUXOoulQZhayllOhEjsSrSYcBg4uaCDekhkpbR5nNWdReJsnpLhFLUL1DU0gjkbNGSnXEmjnPPM1sEGDMhNauhU9R8/+vPl1djfc1smEL/qzsyZXVRfl9pb1wFkT/PF+rdq6gLrIHrveMr6LPftMT/l+9if2AfY+UHtR8llSmnb7HWaTZw/I4PNIwWJx5lR9nELWf+kG36AE9VQIEPcAQpiTjsHKGcJMmhN1aga4sUCq20BwXmeAflbAlyaa3TnFeFRkIW8uGhVn8RgF7a95D0iF6y1oM84CASi0KJKmUrvtwM0VvHE7GNeDcTP/gUzI3DF3m1VBxxrKJpu80zQP/kCSS5sm+Yv96oKMUn1g4o531+67qdvAFjXczRdLOsup+Pw5WZ4Tktgo5YRl/hhtqZmX4M5KWPDqvhkRW5Pi+GQicXbUHuZFpqye1AAd8IHpYBG725YCDOy5wW/Y18njw128rSD7HVsBKGB/OMGM9oTahUfhz1ERJsJO5OGKEI4BUx9GKUvE0J5tx9xWmPMyFKPAPaCDSrUEtQAwabJQqilCJRAJwZgtcAXjSjGPjw9SSOjZ+3iIXhJ6CyotMnQMeqFIVE+erl66rJp8p55qZHsy+exznz3I/vxgJtsDBvg9715+t4e/QnFyw8bXFG154K68BqV6wx1KsGyBFd6cCTbY5mv7utu3FSwu7O4DBtdkp3OyC5T6q6v9QNDa+s/SsrIIbqFws+B1qNc9RC2xBO77dXA1jeJrJeHuwUG+NkmUEYlQ88ODVnyKsOMRntOgF5/m4SbDCviG0nCoHrW84coLnt8f8lrhUYoeHlUg+cvxM3k0EzEbVFpM4sS3uFEzLD/SF33zS3quQOskiD1ZKqpPKdTqBVESnkCfWpTcICglu+ALL5eIa7UFoy/Ao1pxCdn1MnxHSeQdKp60Iz8wkffolhMntty2NGade82kLr9I5O9qWpe9IWrp1ZEtQ0NbVi+OXetZ3bwKvbCqebVnbexingq9o2vx2Dvu/Laq5tkb+wL9RAOxcbQv0Gxngi40WKVOtD6rXEhp1TtH+wUbx/ULon7HbExIjAg8oXdSMdZD2AQHNDcbKjJzugelAEJJFfAkWFRbz9WpZtKywqh0Q4bbk1tUXFP7W/sKfRiK0YuR0OBijhgkKH2C0tw3XBYK/l87DS/s3TChqMCywtTgL+4uN/bUDqzZS2rrazbW3WnqSpqSX9JTYeyuPtxdX///3HL4+3v2Wg0VwcaW+kPVxVse3npPTf3EkmDj1Bp0Wj/5Oh0ZB+fEhOdDh2v/uf4d1K9DhFS6G8q1CKjzuOyCliIAYpP05qEubEwnSRvo/dCgXQTuG/OudrOLkaondX3drfffb3ruOYb3ELsUXvqxrw+I4G27IumCn0Zeeqh1zpaD/gUPsX7wKpSZqp9lULf0EDT86yYRtyJ0hil2Zh5XyzzrDNOOy5eJ0LwpcNXEwD8vEaXqsf3IM8tQ0oNE/YOUDfg4ljb83yhXQaWMO1Z8Lo5nzOtTYRsbriEPh3YrQCzN6AsV2qsiuRIZqkaOAkb4o6qiGjSbSspcycWq2Md/b3X8aeQ1Vc7vwEowC5QsSUspCGxN099595dL2Xd7lSaJw1Pp60iQxi30VXocElNCmsekpSl+95z2NSK+VG/0gCRRY1lGdf1Xs5b+2cKPlnZ9yg78tXI6byG7+U9FZp1uVfGDQDEA1j8kUTawn12doLIsqQ+8sj8IFVlsvnfd+joLn3RL/N40Zb7Z6zXnK03+3Jj4pQ0xEvh7YiTzN6y/NS6KSlRLYhpW8p6pWULxpNLOykns3wflE/4K5gPZMzJqaiQXFeZfEIRxD7INxWloBICllqsRZBAcKC/0r+UWFB/nocFGgaMk4IscyX3yyNH3W7eyrSvObXrk/o6Hs4Jn2lum7d90rottdW29EgaCTR2+3NyTnS+wop55Of7clzuHKDZyjTzSW68c0ReBNdWtpoQnP7tDPLgNuKZVgdvLRwxrmnaN7ACv1vvfap/jymd14HlxdeD19jnufLJLAv5czx1H6pw4TEElYYQ+Zi5xJ+41jIvsSUxmBLMgCQq8M8Jyo5MyDg6BSnkGXZWFB2RK5JLKssQZjIxD3UsPM+lcv6AIV9KLpIg42WPHKFVmGTYfQtFK+JwE9U5mGrKiZAqlaDT6GuFCgVZRLNBibEyERqjTqnWjtUGEFGtzs9bkcUPbWAMU0Cw2H1hBvbDiALtHsut79l/f7RSxfeAvDwINkB8Afzmw4mrJyodJ6wkQO/RX9ityheN+h+N+hWbFysceW0kOOTw7v7/33u93ZvrD58+DjBUHDqxgbexXL57Ycs8Lp9GdjtG6hZ8r4ZhZ4czLMCpXyjU9EPnb4frmFjyNFzwixh1X1bRxGtl3+vSbe04yuV9+CWqnbdw47coH0zaapm0ku4Fsy8Fz7OvBXvbSyOaN0/gZrT09reNynyjrng3t1k5sq8HZcGHrNWmMkXrMdHVgZGvGw/lSESPWAY3Yo/xEncFoykZWhQeh0jMpsmcESVpzmhVvAvDPlz0THa8hTLabxn/H9xsC1/iycB/mc9LezGw78j5YBo6AZe+/z+5k69mdoGg5yF5u1LCLNcZNW7axl25usR1E7ztzhu1la9kd778PnoaC/U9wH6LEYbdv38bZWaafzwrvFABoY80mNkA7ayAWZRgK7MxUO7PUzqyFg7TRHtqE1GEBNCwYs5+ZSg/UNU1GXFdrl0KPbP7iDmzAewUqTkuiNDCFXGgBVpm4rBuzRWITgiKv3QeV39iNiKv1F3eOu5GrnsHVU8BswXdkUNHSlKaUmW0Nk97aBYhXF05LsmWp3TElIp1YU1w/p7XBc899s+9kr8yqPe7nZSptynjuHfAV79bdswB5Er4l05Zol+dLUmI02SUps6c1olci76FsqgylSqRJmaiLvPDDO//+qa6wuH5BjWPX+8vYBz9dekfnXn26QifSNOQnJPom9lqi5ckx1ii/MGVKSn3xxJxkJe331lZAhy2d1ErNieAzg1UB/z70itTv3WWJViRKTXHuqIQSn4VMmMBd5t7AS5WaEsFPU1JTRZrIC73nixprC2ZkJse4i96aYKmbGuER4WTdTTQRa7CkO8IoWA9t5Qo7MyHM1DqRrCORnzQO+DPioTRDQQ+ooUaBvkmWB8u0xYGontOxST1gyshCPncFNHWg55ZgzAwUVDWh1TCBDnmq4Ss5MqbuJoKvdvv4qSSXBrIIVS6lywMnlM8VYsm9XKG7UiE0IW5EzuKxeAxKwX/JhBzJBN/2LZ+ZXO65bf6WrY+umLuXBovms3f98wN25/ubloL2tx4D1rPrNSx9sKVbtLylpadz24pZhWUJN10qd+9ae77YY00w2t2tW7oeeki0dnr/Xz95Hywne//w0h2n2dOPL555rtzkF9F1/k0N4j17eFnumtG610phhqARV/w1EDOgnhkoiFSxifCYZ2M+jgk4dKsJMxopNDAxWZ3yDOKeI0I5BXDkAREzqRnZl+nQ2HyGjmtsapnMjTAjRyP/jFk5pXX6DHSHhsPWxd3reFWgcJWXjtRXIDYbr8uL4Dk4ix1VYeQB6C+rkSUpN8PRdzlVuEDDLEfBYBTDQAsPmpzjiclXztyzlKLEosNbLp7uqN+WP0HpP8BaeU7bfn/Z7D0zN2ooQwp1z58X1PIn72nWbXhUJHpy+65XF2gqGhTK40G1cqJfqqzfQh4CrhOoQPYEGwb5lw/rPBRVtgSkDjw/U2+oX/HO+l1pkiS7iOL7LfZjSy62BpN1HdZcHfuPsk1NvI0LOh8Qim6jEle+kUCda35omZS6m30Z1bMOATf7ZiRWngFlfwVcBcJI3TNBiwU8MfCgT2QRI6JtOxALwb1kObti5BOyGMwfed5IdpILLsVFycXsMfa4mJbEfU12gkVkEds3cpSsBjtGnucLWAasAaXDJnYLyAALh6+gfu62A3wxiGUvi/kHQD57Gt6QAtbAGyaCRaN+q0uQBv1WPtFMLIQWwoAWSYMT+yPpcOIXYWQ7fRjRqYT0WdAIltGG8kiVDYKr8wEEzU25uOAS6uHGBD5qWRzApLqoDtSiRxOmRpkNhE7CyyI98AvhzJtwOgthYqei/d0MzFB/OnHENwJUzcsCwOIXsQe7g2awaqEjnk/JFAZVfrozWjA3rYBSTmDKo0WJMXSWVlTmaKvgxbmbQO6iuvKgJCYJAMDjk46yINsu4mcZCo82QlfhUhclEotFNZ0tCqlErMzVJ6UYRckiqSiK+j4z5+oIM431BM1Flwxmc3xKlIgEtDAjhf1GLBK4LcmxVC+lq3F9kua5dTYwfvgdWCgSxwgstTrSrc+M1xgqpcmHSnwLdovZVRK7Z8rsoFciFislIpJPkjwqki8Z038IYbeV6CBOYR2YH0YhmZowssPg0ptoZ1rwPCA1OC+iBgfUBDLF1DpoikGNCB1oRL9UhGw46AhOkoZc0RnMtDAzjSNusziZW8LMDOeA7xb0Np9dnBGaD2eyogg6gtH8pMSMTEeyp6YVqcfQpHqoRBtaoIKcRoek6SjQU1MKZ9ynnnsLXskJ0LiIJjzT2ud0oMU+kQ45XPDuFtkzOvv0tlmoF5Ix00zmzcJCbp3L7EPAZtB28iF3SYGaPnDNWQQUXQBtPJSB5dwXFOlEjDd5qJKYgy1HnhZUykqD0uC5aehIBJKodLGkMqO+y5eRcKlRKaWqyqyeBd0lzVKrxXPrraCzoryZ4jcU0bWT/eZmhc1CG6bQlNUIlva19/W139xIWT7kdWidy6d0R4nFajGc0rSumWVJ8Up7e+v2gE4k7qj2BAWCao+vVDgJ/L5bsji4gpK0sxfRT+3ru8ajxc2/n2iB/hyae++oRV5nZxrDKHWAZn3yuM0vgnA9Bc5ecWTzc3GJA2Rdh9LRTNTRhTHRhNpgzEhwOItLJ7Rg2i1ZKHei/7/sdwalSwF9PPikwmsUt6CaLbpf2fVcHp2F08Gcp//fNj1S0Ua1dsZX3AOEO5aZZk3fWqtVIVjHBew9/0JbX89ScMvbeOtLGPlcyn65QqKs2TB7kmNB7+f3ZsTefPPbvnbF8jhFXHLXuqnHA8esjab6cy/+C29+T76MN7+OeZeWO0zKVutxx+/duPZMfF0/HepJshAZhIMIwF3wV7vrcOeHC8ka3NyRrMFnNfzOA5GjsVfQ1RtKO3/ah9D81wYD3QH471h3d3cg2B3oRufB5wKBMCr8pAhU9zlMoLpP3t5580byA8FAIBgMHAtw3+hrHL5kDNelMva3AtyjgoCJEYOo2QR9kO5GKtzcxf7j6tamtWAfzxW0juyzBkjizTc58oBpoGB1M4tZBhA2KNhLXOd3ZBElRAX8j6QxYyxGXDlOAn2cBFZBCfRBCTwKJTDNXlrBRZYykFNBJPhLy2/qVERkTQ2HDdlVOs+vCJjHINfxLDydGnig2rmZcJnAt0v+Hc+ylwEJfAvY+84ieepaADrPYnnSsV19V9grh9r62CtLwD8lH9xcmHoWn3vIWbXn3Llt246+h4Soe/AtLEQrVoTKwBvsJiuY9PrIhaqEds43FLFhQbngArSd9hFMsR0H5uwIiAyF3lDKKrj38lNcysotZbKHQvl81PJPDabmow7+wNOXvkaZqUEtOh3UoUd446DTnS3PGICP4/r14Yso9aT1E89mO935qVqdfizjdBRduXYB55tS7dDQCmIyPbgLB0muTAcVsyB3BIGBZYEIuDEmVUW4IAIhiZ+DpI/LVaiCfAtpwiUKIip38yw6TiiNVhjFyTNmAPuxIx8qlVM73T2dEyUCHpAIVVFJlEFM5U+al57jitVLdeUaqUgQ1byq2kLleaMCLdP/uG11g1cYY2Z/ZodHnjhVOpeyvfrEOlW632hT6fLsQ30HDkokf386xP5lntMq86XJ7Wn5xsqUiZJFzRllqSqr77HHK1tWsj88NGn/vA2Fr349RFrNfKNYaJt252PPvzYfpO3dU/JK4TORuhpurSgxauUoLgMIM4DjDEjgSuoAgUulmWQ6FJfhx2jsMoxICWh3kKd2qpwuGgfgdVpartMmAIDYcix6s95AY7KhZcm+hvmFcpU+ThwnlpA9w6tGXj3E20z62V3XXomN45WDpeCp6asLNNAMYa8oJGT3yIPDFLmYNxH6uI2RF4BAKYnEIKfDdagnVhJ34aqXpRipNC+MGgMT4Uq8DfcHFsHNXhoJsVNSlLwpkoY6MScQwp1YBT9fEfp8pJ/ppI/GJKaYxc6laBdQotwyEVoqhi9G+xk7jeoI82SDcoO5E71eTg8SlHIOznIheHqcq4fbMmb48sHxwOgy3khlBio/iCW5fI4qkrXHcAV2ZPUZcHkYtA2DIPJ6xKEyR6iFFFgkR/9zNecGtPFXK3u/BnXHHCvW3L79q+0exY6v2CPHWspu39d5YlsjeKImJy3dEAvc6gU1i3aYzDkZVG4O7565U0pyg4FPH5jXOdft1ifXeW36mLT8J+d5/Aq5w5cxybdzQm2pQRfMXbv2kRc3TF9G9T64bubUF9hDP9wnLdr1w71r1sye+wKYDM8aJ/WeHH7RWZVssIMZOseM8rwksyIKxMUl2Q0Tahfd2tQwWWNMdzhKLN66+JjANqvJoVMkJculMdHpidnZwfK2xTObcx1lnj9cH1cuIvKgPBaP6w9ScSWeJXC+pIgnoMjPqOhCMYaEcuYWFKJ5EKMgGvEr0WYUYqCQFwQHlBQip8hnDpIotYuozIIAoaPE8vC0CM03CUSDP1Jvbv8DoBTSqicWWmZ7OoUiXaokSWissdbpFQlinaV0sV1mty1fuqDeLOYpFEC+52YRa3bBPa/JlAfu7T63MZpXwP5vTe/K1St8aXOa02lrg33SlHxR7KJHGLvNEOtvXlWg1Gv1LsN1dpCeKCA2j0a8PBg8NQ3bw5G4V+G4uJcTjlwBRto2OxFWL2qC8IcZ/1gcDOEoOuPhmBr8jIMe0CUaUTQgQ/YsX5CklZo8+XjDSrOjwtBodbwmhTAYHU5/wW8KhsnVPgOHeYkl1sCVq3BVtsLfGhSrOfFydfwrC1YFizreknwX//WT7+/Zzl769x+/1Pzm6Bh5ZmiI6d+7f2oLcyS8Z8/5CyDttWegzMX+HBQSgnsIH1GNqr0x/WREtafwgjwcuOKqN71YhlCMikdyzcMYNBIKFxfkx30guNVPRilTHi8Rl6V5/TG5+ZLUFJvWpy+iDUkxqao0cZqPzs19GKgrnpjeLpOtvqP/0JzW2JgDdeyDV61UMl/nL3jY4/XzeXRsftFBj9dLqpZl18yO58fniMQJd9ybqJcBSh6XIpSYzIaYeOWUuzIKRNKAb31a2g/fg0SgHXw2zfS7nW/N/fc8OfnshDhf4MLtd7A/VJdEibO9H93eA+QEcUP8FHViVoxKU0SCMsZJUEROEOtcSjxnxxiMljQsFkk4OEpAx9T62+QhQvH0W6f+P+RrIzn4+zfHQRsO7T4UiUunUt2CbgIKLN4hEDZVKsZBTQgzCifG8wjFcgoeIZ/SnJqFAkpHlK+Hy3CjuQ4nK+9aOPf2L070bp+YZ1NJwfNsOfu9xDn777w1IwvvLCxdlabtBJY2q9qV9iT4BFjAh+sXn6gibojf9RCv4pGGnos1zOTameWYZ7wtjADjsKrDm9d6PPxwzaoxvvYcFLt2MpVhZnWYqZSGlsDzwjBTKA3p8dww0VKENme2hzbASZrjgB/J5WdW0yF+ot8fWlKJnNdkaUZmbmnKxLZblyNlWUgPCqwN2OHRyxgjnMrcTPi2DD+znEZR4Bq02vVGh8tTSDS1zFmHbmyjUZFDyuh29ytl0FzBgsuZAn1VYWQTg984YWGWK8aq1TBSD97z8M1c2fTYVY7AWYGuIr4T9MMiEzK6I960ivrVw91NpUbn1s+3SLR/7JoQiC+/6993i60XddaujvrGWpWp3r0r12cpdaW7FbSEVscnpUmizek2Z1FzYWGZNt1Wl5sdl2w01RRaDIlxMXHRMjoxOUl5U+lb1c1kUvdc2u7Jza/pZkwieFhiqGaP25w5eRpLhqN4vt2oj1XT5oQMVSJcPTFWTZJBbk6NksYntOYFM9LVyTHRPGjw6UwuSZwsJk0fTSuVo7EmC7RxuiJYlMhCG489eQ1xMsRHFkyUn5HRIYnUj9hNEGoVrhD1EnJaQJC4QsLII+VSgi+j4XRZzl8FTuof7N4wuPD2N9+9y+5sbv4aeABxLszu/Qd5mv0T+103GAFOssUMN6ylV/+1YsX/gna2j/co+wbLWwc3ydZPQC8QmYkb6ma80C9CEp4VxiCkUISdGPbccAZ180M9gnDNow2oeEibwTUdWLMwyjmKRUcTGf6b+d58DwZ04MIZikipvZKTDChh9E3jG32ZjgyTbNPHH8fwEtL05VXtXZllviRjyk1n1bkl1mKcOPXyQ5cnJiqlSsdDHqkqSVudC2pvXM81xNbReLweRQCR0VIVHg3G197AwoUziKNh+box7i0Eb55JhxJr4HMAxZkEUr05y5FTWFGFxycdOjYhcxai4aJxjD45wZIZKECeI1MlG/BU1Pj/W7wC2o8pPK4eAYeBLeAXfiTgDFOf2aD9byGK/BjvtO4tVQ/1RCX1xuRVzl7C593yK+GJ4e68W4M2aczBO55hL9/53yIT20ry5/1hxURjCy09HOPp72J7bgxNgB3zdJKY/iWnRtdEJX8frp1OI3IQkgyFs7MJWNIy7YwHjrrfjgo9iFBCHM7vo6ohCR0t43jUoX/IeOjBVKM5ZTS3ihofgyAA3ByfpFmgpBW42yGAmrzQpSyArl3D5tRCm/wkmPDnHUB8YqWmhN3I6tmNJRL6RVAN7gKVQ2JpMdvDprA9QXGM8L2zZPnZ9947PXL09HsfzH1+RdmS+2rC2bYF27YtkPNlIHXaQy0tD027aDS2dXW1xURFxYA4Dpxz05IJEydOWHJDDFSP2d8qiQ2jOza0/IrCEQrwyO5dNW73NnKEAi5pqAAe2cKMbWxHr4YS6ELcCzq4TTAF0J4W8C1p9mxpTiUaLJsspE1CUU1P0ZjtZzBm2IjcwG/a62UKVINFurNIfSyQS3ExJc+slquUUhS0d8N1+1vNgKOZMw6eOdiWmdkGn2YcY6RKS9IHovbLEkYioiVU+W+3A1/99tWHp0x5+LXLr6En9gUwV2R0siumvAoenTKJPUiSFKXHvvEbwib+G4Qc2g5c76V2DI/n13ovFeRPjGF872UyBjAc33sJHR/D9b2X46/8au8lhzr0y6ZLqiqda7qMd6Omy+Hjv9JqWWmroMAfRlstF00h2ba2EbL5+XEtlng9lQpdglYiiogljAg7Ph590lGEf5OdiT7DEE5GArccJ+YgkEQj0D8e5hkNaVENaGxcjD4iD6j7C5fByHW0FYGK6Gg3in4mAB0tJaFuMVhWHl3NXzp9xkoJuIddRS4QgR0xeTteB1u/OwU3HJGCv6dl2fKmKQsX/TSZ+jr82nA/+UFl4m720kgpeRE6UdBwG+2hmC78URAgNISV8BDlxFToEaFZysS93tV2Zgr881vtTN0ZpikcmobUQSaFcp42zDLCiP1MtexodILeGSibOCrNnCJAVojPC82MOKDHNFWxQEjIzF4boFKAQAKM8tFoO7RSCAFX48NdgLrDggqEOC5epCtQq80lsOGDY2DShR2XMyWuGXf07NYliD3Vafc9/foM9vTZ+B24+0DDxO9gv2ePsZ9MpPvbO7rk8sfaO1byNgBNYv1yWlqu0YoSDq9KzKCt2hNAZdWk2B5nP32iCuzoY6/uWvTHM/PfqJWYNu4qo5L7q9NA2dYZ7Jts0fsnN2vrn8CPQNw4VUE/2AQfFbt5szNMQnp5fYmY8mi6mASh4mNtOnvhJY3VqqGeAAmPRWRjuuAzOMYJhB/6B6eJAT/KdWnCcBmgjJfEjloNA1y/USVUQqO+ehbHiFAVCfBlfBUeWykJQyGh4Ccmb+j5wOOX3kSXGY+UcQ+FtMKfGN0QI5QOioR58ozBXPQ4AI/HlZfn+onCKEIoStDq3J7cvPEYnL96GUf5sqQR9lmjH0NEhQJlUGat0iyumMMnwKSKPjniDtFyeVYMFy/k4VfGvWCHAi0ldND85CFaESBHIMzIxkV1NiKR2XhOW0zVU8W6IvDA388frF7VuYf1tCiNIqvxg6b4KmGJLgD2fXD+MTqT9bG3BVqUVcJS7TaQWqRsKdtw+8shv85yQuf1aUGB1tnfD6LOLsxMkDb89IrO0wIKtc7HHgOS/0wXTVzJfsc+18gOab28D0FSY2Prxl0O4gafLhVqLT9xG94htOFQptfpZHR2xuhClZO4x2ggUYoSXIlW1DWTO0pdr3aiYlPURwqttywphmWF+0QeXPdeLS17li9NTEnm0OGZLDoksCIloNOiYiXCbHHcdFfAgS/MTAO9LLlL7cIhAdqAkDDgVooObl7XHLQtWNApennFYQkV3HLrutfm1MeLXr+pwgdKa+6c9hE72TOygexpmXffZnYLuGVbfbSZ7QUDPTfupYjfrpKovcH7rfql91sd8X7RHik12AMFZRVjDvCz0GrNCQTLyn+bC4wArMZB/mYADHsBPR45rVMa4HCgjMpv3Rnv1ClP6+JJRbxeH39aqxz5VKNcAJ465+gET/12l7kzXn9aqdUqSfh4Ol4vTEwYuYXsOBhnZpewX5MLRh7A+gBAnbsA6oN0Ihva+HqCiUZ064j12YCr41EpPBEqgBtEyJqJWRiQZjT6OC8Pdf4KKIt6PKU3onJCiW41pTb75FmYfQNTe6NwEbJRLWap6PM37gTy2cqWvPzGhtwudvD3Il7VRGDu+x1In1jFOx736cfsHvZ3H38aF61nQwfE4eKV9wBDfQvIhqPnbK6vb2b/9vDv2Lea68kldx5XiNbfpk/LbW5e3dB3SBIwevOnT8/3Gqkjy2+ZO/eW5QuYOy5tmMK2xS8iB5Jt9vJyuy05yZZVAZ9H/Zww1SgIQ9kxwlFAta+GMb4ezs7XcpFKtFdqUd6RT42Rq3g4gwhKhYVLninpWKB2exGlMHZyteYp94f/Fb5/yr7NASvb37h5X7h3SbhzU5j9OPz9Ungdvrx0L/FzDW+HNThveEXNz3tXPKclvx6J0h5ZsfOttyK95dfZirlEENrJDTdIeMkvJbx0VMKjkYRbXb68QEHRmIxDv4NIy3Ln5Afxxf9/MeepfWq+2kTbgcfEp9VCvocPHTeLkudTC9Uen/K3Cngpy8KfJwHRypdHHme/py6SHvAin7+4b/dBHfPbRXzn4k7RaWoFUIkaL19ZwX5JzTnNHKMYigKGokDx+cPVh6/DQ0aYVVYik/ARhcREopVYgefai9mydThwg6qdp42LUFdy8z4djmIl3HMKpSg2rdSlpWeiUStqmIyHkvaioRQBZWp6prOycWqEE01eU4uCrrmyZ8SEsaCo/FeBrngerUml1o9CqQrNcq8MxyopHnSFHT6ZySeTCwxaudelVQsFfBJBIBYAFY3q6dC2psaFdmqST/4KOFY0OAG60tXSmFUfV+Wv1UjiwrT1i0OCjN/NYHd3iCiK/wJ4jlrjOrif/WrS9FnAeoF/J/vJttce3trspY/EVrLD70XxBbGTaphVrgpxHvuJ69fRNpNXVBeJLFvLc++1yhL+DT48BiyNguBnT7QPX4S/BEx7gGJfZD8qFjgSXqcGFgGS3VTYWVyg/JD9hB+dlqSKEej/FkvFRksF7KN/BqqILcjNmZCIIZSYVyJjrKfQYGeSMe+RhiOS0CRjCJxI92AUl7YBhEVAyGVqWigAKrg5ET6dHKDcFUCAEKQlgZfBnkm8xF4qX3jh1BLw9rqnD38B7lx5tbKDPPj8G/tJBsz1fDBEhtvmkf8GopRuNjiyj/3uMfKz43NGPg8oEwAI8ytHHiX9jVeT7n/sS/DwRm6dgigRQfVinE0dlDU/UUM8RTD59sHYBBPcTF2oRKWYCyNAMYvGUA9CDPUQgzJYTiR5MsxsjqgydE5UlqyBj1zLQybGTkQwEqjaJS3MWKSoORbZxx4n48YuYS4OJOJQRAyCKRdI/P6QGvXb0Cp4pE+iOerl4nxo9fPEpbhOkB7M8PlTI+yU0M71+HBLSSpQwEOeW6+Uq1HRKzw03HisGj0WyhUuPsddiQGWoBWgEUejPShazMQ7k5Odzyg0yQkJyZpjtE6rVGp1xyU8o4GmTUlRJzTkuc6+vs4cO81+PzirNgEM94rFvbvF4t3naPocmCSVsofP0coPwKsKBev/QAmP3oBHntMJCadJiUYzYtBQe97Zozh8MVmsiOCgj9OZWYQb2wVNxDRi/aje9OHcYrqdyXIhJzqiRqf/Uo3OGFWjcUiNZtgdHn+gqGzipCl4/ef5oPWpTjHhwGs6De2mSVNaI8525UTcIP9svMbuKiipaLypmiWkQaBNAdJYoDXzFGqu89ciMPicHIa6yzmKpY6qTuSqVACNLwye7kYExdzlm4ZQf+z5CIj+sWHDP9gfP3K0SywZfY0izQsfSZ56fkLp04vmbWssl5R/VjU7a3vRsgeCfbwoCUUZvfWdLZWTA5K79B2BrJsr5R8BdW7jxnPsMHwEM3q7VA73bYmU39/ouGdy88ifWnTLn2skdfdM9rS0saeilIkCIUVJNyya8dYjq9oOKbl6zKeE0/kXCDvRSEwnbkHRtyjo5YWZFjsz04UqueY6mSDiXgFMB54crvNnEoatZ6ZIQ23wqD3MtEsR0AeTGA7NgxM2ZRKUb38uZqtsowclMXkIy5lplw0UFRuxqzutBS6KcsR7H6RDiQR8NsuOJhvTsry41w/rkQjko0utchYAhALCfaE8MFS/SGkjcTdaUJupQO7GaLSoABD5GV6c2I3lQWcii+eN0AUZRomLDHqDfn5D3caWrrnV1rXW6gKN84lA+R53TslDdFycx5P7v2taDve3sRf+6o6Lo/ewnY5iuSE90RdfK51RJ/L37dufszi386m3e0W9b/3pVv9ndUvr671+Mli3tK4OPvc9tHbVnrwcX6ycxP+08cm3VdZ/u/vzx6P27b0rRrS4MT5+SLmpb1/UE2zG3hkZsXwBD/CAAIgkMQme9vtvubctR6XKabv3wb7Ozvq6hQvgU98Cbr6i+KmCXtwTEoR++jvYagyGGRFmhM8d7forx0xvBhw/hY5INqqpAai4Gc4gFzXlcUl7k5NRcklNqNHSpKh/gilBFOlQ86E9OMSLpDGU9IA9240m1Clj0v2h/DRsxEhlCUlavdhXgJejKMiFCOX0oC8nD2U64R7MxPpD8eXwBY2fMdBHVAWFJQj5hSmWMSn+UDZydwjSnOYenXYamnUuHW4JQvOr03to1XXnAcDh4ajHAHCICGAOGXnendmybTKYGHwM4dY8FmSZg6XTrztFoDgdLRgKZzLP3YzQcrgv/r6+8uHqknVzA3sQbs5BsEPLHXxRsR/B4eQ3Na5qarrSsaqxcVUjLxU/XecDIVyCWmIy8TTWdNk4ktgcZqqdqJBiggvlmfKcaB9F+m7KOEPXiXsSmVLO9IFLsE4aaoRHCNFgzHWcipLLajyWoUpUHMl363Cyvo4eNASCUq7gblDgMeWhkslMhIFggRNT3gyXm8/pR4kqqCQz1YEIJXuCzpRxU8XIdyNudtRWFKGKQJWx0GvXQaMo0uyI+vD0HKqmG/mk8MTkdo0CGd0cnadeJBAka3S3+RyN09J6pyULBKJ6tucI29PzOFj8uCdzYux27fbYiZmerqJic44JVBSjYEqy+abK8JHlk0W1FdVUlM8kkbRJqitqRZOXQ1+VXDd16rpyj0kkMkE12GbOyTG3ec0Wf06kZgfhSZwlUqAGdOLeJJ0LIWPBbV7M4XSPds2KE5G882NiVZoUU2aWPTJo0K6FTifmH1H7EMIhwjak0TB4aB3gXtZFzoUWEAvWgtiilsCuU+ve+/G9dUWNxexBqpO7zPYXtxSd2gV2vMB+A2JeIDehqOLa8vK1695ds+bddSO3I0hIEMd+zb2OjmxBeEVeXIw/i/rnKFGeoA9aPxUYSZeCbjH0C2WWLNKGsBmiAKBdSi4zgRxIlAhEoQKLe6wwBp9mkbi0En2OzCQQB578sR3kX/zPqRR6yxn2MvvXJ95h936zBnxwpHVLXbGfbtuVtyI1y3BMJI1RxKc3ZmYeS6Cllvi0tBS1UkGeeJsdeOGc6Y2TJLiy9bvnbs9SJg2yLPsMG+TJAvUac1KbJj6jpmTkDTCsNCqlKp4k01jDasBwWq5ELFFGpST7JKyGs++ITBGfvwyz/5jhGptIzCB6CCbLzuSEGQIZZYow02xnNC64jnDPQCImWjGgl+IwnZ0FrqL8MJPPdd7PcCLjLehEjQUhQSJOXIfyEYFY3cQGpOncdKi0Ge1WzQpUeqx0ufMDDWjhlNKhOAMGINUhayEA4JjhnQl6oYDW4RSrYfRAYAAKXKIEtyePAdEkWqA06DgWIVS3gbwPJcrky3HFEhcBVZLHly8snMBzL65y+qac7B9ZBAxgqckU3AN9saXKpAxPLvjQnpH17s7FviWzA+f4/EUt3oL5ZC/FN5rSXt96R9idkUuSH5CSkW89MTFdDa4GeZyKJMslReYnljbmLpogirlz1qHnrr4IZlH8mbWHyUxgofiVuVNL2F3uByonzKFIe+PmiSZTEbV2XjDvUOPU5fOq8v9kU2vJtoMjS515s9I16jJ5VMz1OTwHUUQ8NKr7CjDomiw8oJeh8Jg+XpwBtR8uRRrTe4mY7JpJ4XScE5HHMk4uamZ0MrlwUxtL8aFypUSk/bKhakuB88TX2fGOhNDpGK9sQKAvRI1WgVx4TwGCX8vGsbRkV84vdVwENAF4XEoORRYvYqHFg0xrvGJNHrUPvRYALqzYbgafAN4+4vFuO76ls9zjv/v4NjJQ3pnjY7YM3X1z7ISHt2/3eEDljLu3tAWNxqDHwx5r23L3jO06Hby+fXsbpojDPI0uoYvqgL5YXISnMcrFCMNMrBOxSSA3hsteizlumlFaCY6zm5JyzxdA9cX/ZQd45oug+sKX8GANe/jyZTDp4sXI82hvDoehlw09pxKinriXGMhBEWoe7orKx/CB1jHkPBuugcrFNVBoroLYnbJgdyphbCurxvCCGC3P60DRPpJnNFnTs+wYLy8B+kiDMbFaHTqpRtuZSi1LwpZERQ5Wt4QiwWJzGYuuh80btQS50gcOGY9bRvD/LzD10NTRY6aCaQw/D8Hm7RI5Pa4JMxcurXo4Hu3zu8SuzMmrpaLXG6/h6TWvxHB6uf4mnnsURQ/D5/UHa2enpui0ertzwdeccfG7wln5XpuJzwsGwKM3QOtBW4Ev4HDz8rjT0dxLlHAztOkqsQ3eQSwFZsyTqTS5XExDODRtidPJxGC9VgRNOSczy874oYJbhuehGtoWHKABFAsh15LByUQePJI7mRlhpgk+SpFwIJCkRIR/iKAfp8Dz2U7kbXmdyOFCTu78MDOf45/nOmwXcdzGy1HPRjVX1ymkB2pqsXqsxwmAPG4SC1EYK0TPQORcfoyw9Uxzy7SZs+ZynFUhVQ5cmAaU4NKkZKPQdkg3H/5AE3LbQp1L4DsWoXZJIhTTAGc+hk/Q8vhEQ1p6RU0zLhAtokPSJHjXLNmAN2+uP0LTjcUBV3oio5+Gsx5BTFThnt2xc7jcSegKeMYJB+rnjSXhPaox4EXj2BFvvGkZkRdkBgqEzcHwjODu3rd27q6Y+mbf7p1QSjKb72l+8yA+3B+evK0lcxSGkeweB8cI5YcMQ/lpacn1I7l4uOLLxCRjRTzbVvEwdw4ejT/45ejJl8gGXQBSyvuQqPWVsx8vCMxdV/JlxdlVjU35fmR3oieBKdCILdJbVjcgU/Q6XZxCWIgWrIvNOJKRiM0bKce9M+ZoJ49xbxs5NYtYeJJRBSPfz2hxB69Rxgjg1CSa/yvuSoRjjxtGNGI3TUJQ3f3d3f3gga5DXV0tjTe16f5+qLv7UPfaP6yFX6OY7r3QXosiSoAURxC1LiYqzOQ4kTK0ulD4PMs5iiwTE2ZiuD5lCw7WIC2V4USFDTYniq1jhKdPoPLD2bREnGDOE/3E+Iee/9p54jh32YnTaSYxSkcPGk0GOdyipIMup1ue8fxL8RemYJynPOlgbp5fnjEAH8dV0MPbx53B98An4lk46SaX+1piDfziCk60OWLQ/iYsQPuZF9kk2qwc7DlHcQ2NjJR+lhDpLRk2hzeyuUG3yTkKhoHMvBRBKkjhubS01GSJdIuSqG9DwceA21oeNvViyeZ7hxa+v6l8W/fmPw9tv7c4ShorjhMq+NX62bvf2Qr+w4b3bDn0ZNyXSezmv34MZAcPfMeenFPtXP/yvsWvPTiVPH7HezvrF4RXvPPI869OiYnX0BZ5TuyljvsXe0EliK7S6W/p6YUi1n/4qwqTaXE3yLh4YKCh5aF/RXBbuVijGseHXXDnqSKGiAEH2neoMOO2IwMgCeG3cD1Jg1ppQAQNAyjC1ZwIO5Gm0mNlZR6zJFCrSFkYgbZG2pZqoEijsp8BrcGKtJMZlawkoZpLJkU2oFDa0EUffYSyO9yoq4kpkw0IpQE84G4HJqAS2nxl2KGlB5TRxdjMsCJtloB5qkJGlA6PT/FfS337vMYxJEG0N5EcfzLUP2REz+jlbp+KUONeUmjzZQEeKiFKIaHdLMzi/R6kPvlXUFR2HPgHb3uF/d+9vexPJ3skAx/eMbm1u5vRFLeXl7dnhm3AdWbZN4cvgyf6L1J7P9JqgeG5W4e2N33xDNnefx7s+D378ZP/HIh5G9T89SEge/W2ziMjO8rZl3gHnlrXzaxl2VmlZfbssuHOb5afYd+0vfk1Wc2/0K/9ECw4cqlx24nO4+x50+3n+9uvz4nGERqoWxzQz0WFlhZcNYNQG5zw5AwCdELlQ3BeOPMO70wo2qDEVLYhJSrAUsejwbVAM45J9DNpNL7AOGSMcjxEwygdDq3DRc9KrJ4tkeLGDGi84fJnePS3nRS7829/23mV3Pk3shsc7dy+7eWnH2cWzK31WCq7yqckWss7PI294XAvdQXft4P36pq5j9qptFc2Pn7EVVlgoA8pDL5c6w31d9XEUaxBK6Eb7kR5HqhyAkjNQCFkAlJksCZi3SPDQJPX7NpC+ME56zV7rFDIw6kgKJC1CCmnEDnwiWW4OiibPiqQaVIs/nIufPmM1mS0unwRFAU9HKqSSjhU5VAZ0wMef5mfK26TRKuJFA3UAtmuXBQICCU64V15NzF2+XgzQ0BuTo/bDjilIIw0wCKdoLcD7JPgggsflsybW739y29bZrI69/U0Ntx96oSkizetsbiu7/srRaakYGHV7OkldbmmoiXLfndTM/jdTYdmrO7aU+xRSg1rDu+RlAV8cVLzXf2nuiaVzJndMD93nmf/KCbGPmGrQMAhoSBkYLkM9xdA74tMBD6EShdLCoMghRQISdzKYQe4GQTxtFLCausyX9K6Hp3RnTZthW/a62ef2ZZg7y/o79/dSTunFdtiFclPNymltDU2Q0wnaBzJs3Jnsh9VUuXzNDXpZnYG21xU7k6z8Y3BwW+BEHjvA/yZJkHB4j/OTaHjc2rnONnDKtVSf795zt7nGrMd0bIPm0br65aBCxiXGvmsLcRAUsSi1o5xtoyhUGvGUKh1ERRqjr/lBpRpIqRNQowuCFPa+N/RpK+3fK9Hib5m1d4MCnqcvRr5LAJop24jdIQJ6mqChiITaUVQc4BhUKK4zcdnwfQmJrFA91BBWktXQp8uzaqjOjSa/Xb35DXxDyVPT766TwdkvFJSOnyC3Q0WkX3w8S9puj7N2sk56X06dHerZn98V4vL3pecfHWvrpxXOPJ/wydIKXs/uZ/rH6fw/uGC+wfquColahC3Yg4Xra61M+IzjIpLxqjEUPWbcwojKKBSLrSsAVxZtJbDAfC4I04FVjoolQ41j1onU2eRJnekL1yJMJr1ZosZeOW6WPLw1NtXMd0PPr/lLrB60+bn7yu4bcWq26cetqWw/XPZFezyuezBFNtuwJO0r9o1C6wypZ34aijNZEob+upEmomXNEcCyOhZu/hr2BPPzuyoWbW1fYtsdlFVjs+XU1U0W7aldPGc2pqOmc+CAk3aCy+kzWOfO9W0869/TNZb/H6LPjmJex555z1QtvqvOzm99SJ1RPAloYD6mUgCAlItTyFRDAiYjUKeWSggzHCRIDwlzcurb7V+oGE+v3PoOT/7vZ899fhr5kAOKDE7l3eYnX6/oJ3d1MRevmf44sL7LIYykN/PExzos4GtxabE4aPLO83e5QsVNKcrqW6oK9XQc6zBVWNZcPwd4yxMG87lDsrENrh3x4VRqDMUH2mDs9FwO4C6TCYbkBtwwiCOZqgIiwaiIsD5fTOJMNUEJPxSw7kQFHAVtnGARErL3AdEe1f8z74ZW2+9dTDJzEsavPXWrf2mKLkqVhuXGd0YFSuNEfKULasc5cC+l72yb9re95b3geCdm8HB8zR9np21+U72xcPz5qdkZSVmqwqkq2Ji6Ohy9rWhbeWj63i+iBB4iHgo+5lEIoFqsREuWgQgNxQHTQFGhrSuzuNS6nhIgFB0B0oQ6jHX6YVJAPFbIyJPpcHD86ESxFTAe+IY71GF+GX22DRtgtXD5vpNGrtfzh57WaxTHhMQhyViyXDvsVP+pDyQk5fkB2+Hw2TLuT/lOJPjvdMXas6NlLCHDx/uO/bmm7x9SzyeJRFuuQjfahKuXKKJgXjMbDdGf+gYXy2j1Hl08Nsw2nrsog0At/PyMY15K/vcyFPssbamtWH+3qupvb28fb29mO0z3NIVhv9WN191IUJbfhSYzvaD6aN1Hfx9gjD83QkEMZ6Pm6fjwV9kUut8BotO2JxLdee2TPZ3D3d3+1sA2Uqen/lxFXusuj+/qSlfoPS3IPiKFn8v+kUEETXGx3CNt4/rpbZD23GMwc9tRxvtf2Hww/9dHgOCCwfw2Be5JofXuDZmjg8uTIWHCfTZUNPym28iYA7gQscdYB+Lv+GfdSPRX7hjXgf8AvtG9s6Dz+HhcMeortonQiYvYobOJvKIB3E8xxweMPNQcMzsF2egPiE73hxkYY5vJ5or+M/HqwkDomB6Bi6Hgzx2R3g0AiPiqHisGuSCK3AN/KDWZE7lIv2h2DhkXiHmBsaLIp1EyJ4B7Y9kvUGD7nDRIYfXf73pBT3kMXJMeIxAsa5lSmVcdMmgHxfvH2WF/d4fH1QERyrhQ7z/e0Ssd/cFEH/h7rsvsJ9fKBsExGBoYw/PUK1JS9Ok2HB/OG9fS1fgBb//hcD/t4rQv7fgijs6GH/8Z9gM1LJFwU1TVk5bC3rXBeTOQDnw2m07hg3soPoUlCshdxUJQ1ad2Vzb4AxZa+ZsAwwVER5Qk1OTF3QDgYCBkZm9K6znxAy6uILJHNJ1smbUYwZ6mg90bro4K+jSHTtGYNnPCDrmW5WdD7yzGXQ4LmilIziQ2HRjGzenszCEFYVYKHZE9/VHdShahBSF/WFouNrmxVjAqK7CqK8nwCzILSMj4ccopy4uYPrvqiEXl4CEkmzMv9esPo66fnqurnp+eg5Mp2M2zC13FdS1Nv51cO9fY2tdwewNt2Q1ufnai1XYhbgZefkt/r2QkZKR6CmXFhFl5uJzYOQpjiwp3VBYCBkzZPx3iy2S7TiwBjBhYJAHn+9vZi5sLgxaVAtqKKmwgzdnMrKBTzuRY4TufgWWV0ygFpOAIquG5GxXqav9nxo72/e4ykjs+Pelr+RIq42QtNHfDxrMTdxqdmfWqNjyiEgY8EhL8LPwinJ2WrIrnpBVYJflMmcMkWTsFZGQOMuoMn/a03RpkbxZJ7L6Mv68MmFlVjKLVq+7ES0sIizIz8nMyc+WoiMGnYfJAJYXpsC8ocygwwDKACLg9eEbxK9tkDm7QQaS1gXOggqwjcoyoLgUtoSsAZMH3yprz4hY/KcAOk0CVMpAL4ZPqg4qZwoqCqpODtTaefFfwaWzGnZMDPl78k2TVFUVFVVVk5jldfz7H3/58rjfV696R2ZFReYOSLnP9V+frZUtCdjesQXNqgiBryDkAzYzxVlUzVRAi5SBnWh20Fnw4JudGIVAG96BCHRfIXg/I4uaujko4IFNI3YWLg5DA2kHGTEx94mZjCKMPrMZBTeGionHxCXKGfuHuIcGpucBE4FOBhubaVhGv6QhsK90vJ2ReaNDmJi1y7+bywv//d7rYVt8tLxelkXK5N8dFsmbH5fmlxjGx/tYcEmXW67bstHeNVjAzzF3zqSEEAMlHkZmDU0VG0t916m/re08/I55GVmw8Ek4+0VcsdXSZubZmu6luSGIhZ8vH3oWLdNDYNnKCSyxORmhK+oYCxkLrHT+Xg86y1j4rx96fw0wjf2PZPvL1ggsdW0ZGITZxOwZgd4VM1cFj8mCdgADvQ1iC4F2Y8Nuq1YHb0RjB9eIDLBmqbqkhI3VTUauIFFzB0Y79QpWDiEeVlZOJkYvv7Nx6bkinPKz/i1rz/9owK/GNinLQIVPg1VaUldSjsUjsiUqyslBj/Gyo5Vk0L+PD63tJbqF/MUUjJSC3T0FOK1sbjd0MyYt1BAvTgn66CBsxs4jxSXNImweY+XN+LclLq4lTo+BAQBViFnvAAAAeNpjYGRgYADiovRLZvH8Nl8Z5DkYQODKnRRvMH1/hc3/j//WcFizvQFyORiYQKIAX2sNeXjaY2BkYGC7/G8JAwMH2/+P/7dzWDMARZABox4ApBAGpAAAAHjaTVQxaBVBEJ29v7d7nmIhgiGFCCFVyiOIxW8NFiI2qU7R5oOtZbCT1L9KkdoiYPGRIBJS/jpY2BzaSEoJKUIKBUk2M2/mbu/DMLszO2/evtn7Femv+EzkPxFN3hGFH9kXT4ncV7Y1NfrF/hX7t+olVy7TP6mtOOx31McFr0nXYcrrAz53llK5z/sXnH9MLjbpOhzxfsbWe7FT27OPtfKKLXlZx13mttA9sE+sX8fWkJP6itJ1/JguPOekH2ybnJybLJWbrKsCfJzUItekqzDPeMVDNamPPyn4GXpQPFSPmm+02t8TfOTMJvv7tj9n/NfgfYcxa+Wn5+ReJePHe+zfp8S8kx/hTI70vtCB7wvt5lRw3Gm/lKDTNmpuCafwh1bLy3wH0afcUjzEGsXr+ZZdXrul5vsY7rpQnWUtuoffFAQPMebm5+Cms6dhNrh/WLEe+4bVisZ87sRmesj8rd5PNSdraFuIHtanVVzgSC+fUrwiJzjSp9zTd4V8l/Ub+m5RLXXFMZtoumFv/Vg5A6NTE0y8szrrIu8FM+XaKtBtzLhTfpif5HXG2q+xWJ210fdmcfs24herYY0Rf0PPyu/2/k/t7JTW4Td0Hx5ljOG9SfwJU5uZfpZnjLvotWOxUQ7aLPAdKt+/mO2Qj89Z35ejunakRZvvjdh/ejDkGsvtjvKjvqKjO8ta+Q+j/4xGefVv1f47nMXqQnXB3IluAP7dou4AeNpjYIACEzzwGSMTYwVTA9Mr5gjmBOZZzKdYeFhsWBawsrFmsR5h42CzY5vFdoLtFbsYexb7EfYHHDEcHziVONs473H5cQtxG3Hv4uHgseC5xivH28b7hE+Pr4ZvCb8Gfwr/Lv4vAiYCuwTOCfwSdBDMEpwnuEnwiuA3oTfCccKThB+JcImYiOaIThBdIvpATEisQlxHvEdil8QdSRnJFMkjUmZSXVLfpKWkV8iwyYTJzJB5IOsnu0D2kJyG3Dz5DPlvCgUKExTuKSooblG8ptSntE7pgtIr5STla8rvVJhUjFQyVOaoXFDNUX2h+ketQ+2e2j91HXUH9TUafBqrNB5psmnKaJZodmiu0JLTCtKapXVL64s2k3ae9gMdB506nRU6T3RDdJN0K3S36P7QO6W/Sv+a/hODEIM+g2uGeoYBhgcMzxn+Mwoy6jO6YsxjrGA8z/ieCZ9Jiskkky2mDKYJpj/MMswmmG0xu2T2w1zKXM/cyTzMPMt8ifkVCzYLLYsVljOsJKyCrDZZ3bPmsG6zcbE5ZStjW2e7xvaFXYu9kn2VA4tDl+MZpyCnR85szmUuUi5PXE1c37kFub1xV3Pf5THHM8pLyivJW8ZHxuear5Fvku8vvxP+agECAQsCvQKPBVkE1QTPCH4XkhKqFDovLCzsVLha+I2IDZEukQ+ikqK2RAfF6MR0xPrFKcX9ij+WsCiRI7EiyS3pU7JG8pNUntSqtKR0q/R1GWUZlzItMpuyuLJcsrZl82T7ZVdl38ipy+XJTcvdlKeRZ5e3BAQBAjvJsQAAAAEAAAEvAIcADgAAAAAAAgABAAIAFgAAAQABJgAAAAB42n2Qy04CQRBFTztoojEsXRAWE/ZOUFRAXQobEY2orEXlEQcGcTQx8QtcuTB+k48v8G+807ZkZGE6PTlVdevWVAPLvOJhMotAQfeHjfIFx3NkCRx7rLPrOEOekeN5nnlyvEDe5By/sWK2HL9TNA3HH2TNo+NPlozr/fLImRcuiBjzwIQBPfrE+AzFtzoDzexxpW8sxVjKY0U97gg5V8ea/rVozw6n7NOmKUrrV2c60jV/pnamaGKnRlL5f9yPaCmTcDrblzK2G4y4n3YElG11KNdreSaarrKhnDt604BNeyuUFFXVt0dN02s0ONSkA1GTk3/3aCvqyDWymt/JdfuKvhwSja9TsrUK26pW9d0Q+5qa7FHmUi5daRPXWF4Tt3t96tviRtWBKsnbhd+FY1J3eNptVgWY5LYV3l9jGM/M3l4uzIxtk7u9XKCcpr2UmVmWNbZubMsnyzs7V2amlJkZUmZmZmbmNmVu2iePvUm/r/PtWrIe6MH/3vMKW2l/V1y2Ml35Pz+c4x4rbGUbGAbw4CNAiCEijDDGBKvYhrWVy1cuxXYchB04GIfgUByGw3EEjsRROBrH4Fgch+NxAk7ESTgZp+BUnIbTcQbOxFm4Gq6Oa+BsnIOd2IV17Ma52IPzcD4uwIW4Jq6Fa+M6uC6uh+vjItwAF+OGuBH24hLcGDfBTXEz3By3wC1xK9wat8FtcTvcHnfAHXEn3Bl3wV1xN9wd98A9cS/cGxwxBBJITJEig8I+zJCjQAmNCvthUMOiwQbm2MQCB3Af3Bf3w/3xADwQD8KD8RA8FA/Dw/EIPBKPwqPxGDwWj8Pj8QQ8EU/CpXgynoKn4ml4Op6BZ+JZeDaeg+fieXg+XoAX4kV4MV6Cl+JleDlegVfiVXg1XoPX4nW4DK/HG/BGvAlvxlvwVrwNb8c78E68C+/Ge/BevA/vxwfwQXwIH8ZH8FF8DB/HJ/BJfAqfxmfwWXwOn8cX8EV8CV/GV/BVfA1fxzfwTXwL38Z38F18D9/HD/BD/Ag/xk/wU/wMP8cv8Ev8Cr/Gb/BbXI7f4ff4A/6IP+HP+Av+ir/h7/gH/ol/4d+4Av9hKwyMsQHzmM8CFrIhi9iIjdmErbJtbI1tZwexHexgdgg7lB3GDmdHsCPZUexodgw7lh3HjmcnsBPZSexkdgo7lZ3GTmdnsDPZWWFTqvWdO3d2665uXe/W3d16brfu6dbzuvX8br2gWy/s1ouW6/re5bpnrycbo6NMNybNeV0PZ3IRa24SP861mLVce/Ze7ItcN0lQyVKo3Cu1lSP3iCUvZOIXTa1EUEtuRDaakposV2lmvYKrfFXwUshcKCNymXRv9f6GG5mMq7ypO0q7784nhSq3XvyM9NrlUcc7ao9kUdmFV1tuvEzm1dg9OobInS7pTS2Np8qpHrtHR/fdae3F3HlIW54k/oZKpPYyXUgvV+UsrJSwjZEBt5aLLMj5Qjd26IKiKQxeIcvGF5kUs4FcyGDp18Dy1BMZt8FU5wldnPOiGuZyam2myqgyOjWyrnf5bZC8QusrD9cj44LmGFfbnbuGvFYTJ9+/RG1kEz0vQxdttSGjWOtZwc2s9khrGpG9srRKl4NYb4Yte1ONmqrXEDTV/xizO5i2TEObNUVcN5XPc2nswNR1wJN9TW3H7jonHqt0VPFKmirnJYVJ8mlYETfdOFpKO85BwSu/zigBw15wUCjhFY2VA9FUZECueeJCyZ2d/oZweKsyXcpx7ytdxcQ8oDSmkqKupjJu9IIyU9uIG6PntRDzyVaciD2kJDp/2kvdBQOh0xGdqANy2uS5b7XO6/HyoC54nkfLoJBslMsNmbdRdTeQpqBWacnzsCU0ledoPrE31XhpflsQvpFVvogSZaRwrkSt2zzOZVg1ManKPOdQWGfNdJrLYd0oK3gtB4m2Xq515bceBHNV0gVBzOuZtKHQReVKsVVOdoZTbeYUolHrOFFjPYh5yiiU9ZwUZiMHZEVJJ+yS5nX32B0WulRWG4+StQid/WRmm8q+CKwhEPr7GypkT+jEWSX8XKeqbNPQsYVuT6JUaboKCh2rXPqxaeosKHhakr30P9dm5lecamnYekT8y+R0SgJSS+VDhok6kJuVpoqmPcEoqQUhilKxVZoVCQcUUG0SJhKfqrOWvioJzZRCWSZtgmOqr3Aquc2kIeeElZt21K2q3PArQ/EIDVkmlxGlerWeK5Whe7i8+7VuysR1NjEb9riLtiAVbOi8KWSwBMmkh7IrodYCV0REdIYshdyu1dPaZrXrQXY85bXt8jdxe5cq97JVfzsnLZSofkrqGH6a61iGqiTpPB9SLzG2UjJqN9SX5PIo5mZ55ODmWYrgZJrrecUNScl8skFQ6JudZxKlh4T4mixOCTIykWWYxITVSm6rK23VdNEnu3sNLQHLSrOaUm9s2jKlNPkpb1I5pKylDU/l2CnuBLd1At3rcMqFdIEeE8imUyUEFbc/58TBhFjrqR0327+/BUgSR63jdGmxxdONAU+IeDHghEMhSuGnblyEidGUgM0hFalx82iSXmWiBI5RNiNB0q7sTEKdTlfVoiXsq6KKICIpBdStc+qaxq9ni0pu3zru4ydEzaNCprxtUe7+JLDU7XIzaSX6+4ws6W91SbpSuCLEcsupuGlMiAPSaD8x1LiHbsyQadQ1VMnnUsU6qPiCGupaT+mzQha4xhLEjaAGMXagL2hQkZlEokGnNoekMo6p8QQ0t3jNRy24W2St9aTezlQR2OKxAwyxCp7I1eVRP4rr1gVJyKc5pzZVGMvMzbcdVyH0ymh4iJkZOWWxIaZs6LbWSLm6JG11AFcIxWqqddqbUkcbM11aPrNydUnum0CL31aTw3xglfM7sJTubOEXmvpMm3saPVFslJy6pjoUNIrKxFVGrqr2IyYq5bxuJxYN6II6SRi78WgWA/rM8Vzhe7GkMutHaGC0u2hIYpfkiyqb9Juz6Qvsv6ZkCG0AALgB/4WwAY0AS7AIUFixAQGOWbFGBitYIbAQWUuwFFJYIbCAWR2wBitcWFmwFCsAAAABWLn3vAAA"},function(e,t){e.exports="data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 10 10' width='10' height='10'%3E%3Cpolyline points='1.5 3.5 5 7 8.5 3.5' stroke='currentColor' stroke-width='2' fill='transparent' stroke-linecap='round' stroke-linejoin='round' opacity='.5' vector-effect='non-scaling-stroke'/%3E%3C/svg%3E"},function(e,t){e.exports=function(e){var t="undefined"!=typeof window&&window.location;if(!t)throw new Error("fixUrls requires window.location");if(!e||"string"!=typeof e)return e;var n=t.protocol+"//"+t.host,r=n+t.pathname.replace(/\/[^\/]*$/,"/");return e.replace(/url\s*\(((?:[^)(]|\((?:[^)(]+|\([^)(]*\))*\))*)\)/gi,(function(e,t){var i,o=t.trim().replace(/^"(.*)"$/,(function(e,t){return t})).replace(/^'(.*)'$/,(function(e,t){return t}));return/^(#|data:|http:\/\/|https:\/\/|file:\/\/\/|\s*$)/i.test(o)?e:(i=0===o.indexOf("//")?o:0===o.indexOf("/")?n+o:r+o.replace(/^\.\//,""),"url("+JSON.stringify(i)+")")}))}},function(e,t){!function(e){"use strict";var t=["sanitize","whiteList","sanitizeFn"],n=["background","cite","href","itemtype","longdesc","poster","src","xlink:href"],r={"*":["class","dir","id","lang","role",/^aria-[\w-]*$/i],a:["target","href","title","rel"],area:[],b:[],br:[],col:[],code:[],div:[],em:[],hr:[],h1:[],h2:[],h3:[],h4:[],h5:[],h6:[],i:[],img:["src","alt","title","width","height"],li:[],ol:[],p:[],pre:[],s:[],small:[],span:[],sub:[],sup:[],strong:[],u:[],ul:[]},i=/^(?:(?:https?|mailto|ftp|tel|file):|[^&:/?#]*(?:[/?#]|$))/gi,o=/^data:(?:image\/(?:bmp|gif|jpeg|jpg|png|tiff|webp)|video\/(?:mpeg|mp4|ogg|webm)|audio\/(?:mp3|oga|ogg|opus));base64,[a-z0-9+/]+=*$/i;function a(t,r){var a=t.nodeName.toLowerCase();if(-1!==e.inArray(a,r))return-1===e.inArray(a,n)||Boolean(t.nodeValue.match(i)||t.nodeValue.match(o));for(var s=e(r).filter((function(e,t){return t instanceof RegExp})),l=0,c=s.length;l<c;l++)if(a.match(s[l]))return!0;return!1}function s(t,n,r){if(0===t.length)return t;if(r&&"function"==typeof r)return r(t);if(!document.implementation||!document.implementation.createHTMLDocument)return t;var i=document.implementation.createHTMLDocument("sanitization");i.body.innerHTML=t;for(var o=e.map(n,(function(e,t){return t})),s=e(i.body).find("*"),l=0,c=s.length;l<c;l++){var u=s[l],d=u.nodeName.toLowerCase();if(-1!==e.inArray(d,o))for(var f=e.map(u.attributes,(function(e){return e})),p=[].concat(n["*"]||[],n[d]||[]),h=0,g=f.length;h<g;h++)a(f[h],p)||u.removeAttribute(f[h].nodeName);else u.parentNode.removeChild(u)}return i.body.innerHTML}var l=function(e,t){this.type=null,this.options=null,this.enabled=null,this.timeout=null,this.hoverState=null,this.$element=null,this.inState=null,this.init("tooltip",e,t)};l.VERSION="3.4.1",l.TRANSITION_DURATION=150,l.DEFAULTS={animation:!0,placement:"top",selector:!1,template:'<div class="tooltip" role="tooltip"><div class="tooltip-arrow"></div><div class="tooltip-inner"></div></div>',trigger:"hover focus",title:"",delay:0,html:!1,container:!1,viewport:{selector:"body",padding:0},sanitize:!0,sanitizeFn:null,whiteList:r},l.prototype.init=function(t,n,r){if(this.enabled=!0,this.type=t,this.$element=e(n),this.options=this.getOptions(r),this.$viewport=this.options.viewport&&e(document).find(e.isFunction(this.options.viewport)?this.options.viewport.call(this,this.$element):this.options.viewport.selector||this.options.viewport),this.inState={click:!1,hover:!1,focus:!1},this.$element[0]instanceof document.constructor&&!this.options.selector)throw new Error("`selector` option must be specified when initializing "+this.type+" on the window.document object!");for(var i=this.options.trigger.split(" "),o=i.length;o--;){var a=i[o];if("click"==a)this.$element.on("click."+this.type,this.options.selector,e.proxy(this.toggle,this));else if("manual"!=a){var s="hover"==a?"mouseenter":"focusin",l="hover"==a?"mouseleave":"focusout";this.$element.on(s+"."+this.type,this.options.selector,e.proxy(this.enter,this)),this.$element.on(l+"."+this.type,this.options.selector,e.proxy(this.leave,this))}}this.options.selector?this._options=e.extend({},this.options,{trigger:"manual",selector:""}):this.fixTitle()},l.prototype.getDefaults=function(){return l.DEFAULTS},l.prototype.getOptions=function(n){var r=this.$element.data();for(var i in r)r.hasOwnProperty(i)&&-1!==e.inArray(i,t)&&delete r[i];return(n=e.extend({},this.getDefaults(),r,n)).delay&&"number"==typeof n.delay&&(n.delay={show:n.delay,hide:n.delay}),n.sanitize&&(n.template=s(n.template,n.whiteList,n.sanitizeFn)),n},l.prototype.getDelegateOptions=function(){var t={},n=this.getDefaults();return this._options&&e.each(this._options,(function(e,r){n[e]!=r&&(t[e]=r)})),t},l.prototype.enter=function(t){var n=t instanceof this.constructor?t:e(t.currentTarget).data("bs."+this.type);if(n||(n=new this.constructor(t.currentTarget,this.getDelegateOptions()),e(t.currentTarget).data("bs."+this.type,n)),t instanceof e.Event&&(n.inState["focusin"==t.type?"focus":"hover"]=!0),n.tip().hasClass("in")||"in"==n.hoverState)n.hoverState="in";else{if(clearTimeout(n.timeout),n.hoverState="in",!n.options.delay||!n.options.delay.show)return n.show();n.timeout=setTimeout((function(){"in"==n.hoverState&&n.show()}),n.options.delay.show)}},l.prototype.isInStateTrue=function(){for(var e in this.inState)if(this.inState[e])return!0;return!1},l.prototype.leave=function(t){var n=t instanceof this.constructor?t:e(t.currentTarget).data("bs."+this.type);if(n||(n=new this.constructor(t.currentTarget,this.getDelegateOptions()),e(t.currentTarget).data("bs."+this.type,n)),t instanceof e.Event&&(n.inState["focusout"==t.type?"focus":"hover"]=!1),!n.isInStateTrue()){if(clearTimeout(n.timeout),n.hoverState="out",!n.options.delay||!n.options.delay.hide)return n.hide();n.timeout=setTimeout((function(){"out"==n.hoverState&&n.hide()}),n.options.delay.hide)}},l.prototype.show=function(){var t=e.Event("show.bs."+this.type);if(this.hasContent()&&this.enabled){this.$element.trigger(t);var n=e.contains(this.$element[0].ownerDocument.documentElement,this.$element[0]);if(t.isDefaultPrevented()||!n)return;var r=this,i=this.tip(),o=this.getUID(this.type);this.setContent(),i.attr("id",o),this.$element.attr("aria-describedby",o),this.options.animation&&i.addClass("fade");var a="function"==typeof this.options.placement?this.options.placement.call(this,i[0],this.$element[0]):this.options.placement,s=/\s?auto?\s?/i,c=s.test(a);c&&(a=a.replace(s,"")||"top"),i.detach().css({top:0,left:0,display:"block"}).addClass(a).data("bs."+this.type,this),this.options.container?i.appendTo(e(document).find(this.options.container)):i.insertAfter(this.$element),this.$element.trigger("inserted.bs."+this.type);var u=this.getPosition(),d=i[0].offsetWidth,f=i[0].offsetHeight;if(c){var p=a,h=this.getPosition(this.$viewport);a="bottom"==a&&u.bottom+f>h.bottom?"top":"top"==a&&u.top-f<h.top?"bottom":"right"==a&&u.right+d>h.width?"left":"left"==a&&u.left-d<h.left?"right":a,i.removeClass(p).addClass(a)}var g=this.getCalculatedOffset(a,u,d,f);this.applyPlacement(g,a);var v=function(){var e=r.hoverState;r.$element.trigger("shown.bs."+r.type),r.hoverState=null,"out"==e&&r.leave(r)};e.support.transition&&this.$tip.hasClass("fade")?i.one("bsTransitionEnd",v).emulateTransitionEnd(l.TRANSITION_DURATION):v()}},l.prototype.applyPlacement=function(t,n){var r=this.tip(),i=r[0].offsetWidth,o=r[0].offsetHeight,a=parseInt(r.css("margin-top"),10),s=parseInt(r.css("margin-left"),10);isNaN(a)&&(a=0),isNaN(s)&&(s=0),t.top+=a,t.left+=s,e.offset.setOffset(r[0],e.extend({using:function(e){r.css({top:Math.round(e.top),left:Math.round(e.left)})}},t),0),r.addClass("in");var l=r[0].offsetWidth,c=r[0].offsetHeight;"top"==n&&c!=o&&(t.top=t.top+o-c);var u=this.getViewportAdjustedDelta(n,t,l,c);u.left?t.left+=u.left:t.top+=u.top;var d=/top|bottom/.test(n),f=d?2*u.left-i+l:2*u.top-o+c,p=d?"offsetWidth":"offsetHeight";r.offset(t),this.replaceArrow(f,r[0][p],d)},l.prototype.replaceArrow=function(e,t,n){this.arrow().css(n?"left":"top",50*(1-e/t)+"%").css(n?"top":"left","")},l.prototype.setContent=function(){var e=this.tip(),t=this.getTitle();this.options.html?(this.options.sanitize&&(t=s(t,this.options.whiteList,this.options.sanitizeFn)),e.find(".tooltip-inner").html(t)):e.find(".tooltip-inner").text(t),e.removeClass("fade in top bottom left right")},l.prototype.hide=function(t){var n=this,r=e(this.$tip),i=e.Event("hide.bs."+this.type);function o(){"in"!=n.hoverState&&r.detach(),n.$element&&n.$element.removeAttr("aria-describedby").trigger("hidden.bs."+n.type),t&&t()}if(this.$element.trigger(i),!i.isDefaultPrevented())return r.removeClass("in"),e.support.transition&&r.hasClass("fade")?r.one("bsTransitionEnd",o).emulateTransitionEnd(l.TRANSITION_DURATION):o(),this.hoverState=null,this},l.prototype.fixTitle=function(){var e=this.$element;(e.attr("title")||"string"!=typeof e.attr("data-original-title"))&&e.attr("data-original-title",e.attr("title")||"").attr("title","")},l.prototype.hasContent=function(){return this.getTitle()},l.prototype.getPosition=function(t){var n=(t=t||this.$element)[0],r="BODY"==n.tagName,i=n.getBoundingClientRect();null==i.width&&(i=e.extend({},i,{width:i.right-i.left,height:i.bottom-i.top}));var o=window.SVGElement&&n instanceof window.SVGElement,a=r?{top:0,left:0}:o?null:t.offset(),s={scroll:r?document.documentElement.scrollTop||document.body.scrollTop:t.scrollTop()},l=r?{width:e(window).width(),height:e(window).height()}:null;return e.extend({},i,s,l,a)},l.prototype.getCalculatedOffset=function(e,t,n,r){return"bottom"==e?{top:t.top+t.height,left:t.left+t.width/2-n/2}:"top"==e?{top:t.top-r,left:t.left+t.width/2-n/2}:"left"==e?{top:t.top+t.height/2-r/2,left:t.left-n}:{top:t.top+t.height/2-r/2,left:t.left+t.width}},l.prototype.getViewportAdjustedDelta=function(e,t,n,r){var i={top:0,left:0};if(!this.$viewport)return i;var o=this.options.viewport&&this.options.viewport.padding||0,a=this.getPosition(this.$viewport);if(/right|left/.test(e)){var s=t.top-o-a.scroll,l=t.top+o-a.scroll+r;s<a.top?i.top=a.top-s:l>a.top+a.height&&(i.top=a.top+a.height-l)}else{var c=t.left-o,u=t.left+o+n;c<a.left?i.left=a.left-c:u>a.right&&(i.left=a.left+a.width-u)}return i},l.prototype.getTitle=function(){var e=this.$element,t=this.options;return e.attr("data-original-title")||("function"==typeof t.title?t.title.call(e[0]):t.title)},l.prototype.getUID=function(e){do{e+=~~(1e6*Math.random())}while(document.getElementById(e));return e},l.prototype.tip=function(){if(!this.$tip&&(this.$tip=e(this.options.template),1!=this.$tip.length))throw new Error(this.type+" `template` option must consist of exactly 1 top-level element!");return this.$tip},l.prototype.arrow=function(){return this.$arrow=this.$arrow||this.tip().find(".tooltip-arrow")},l.prototype.enable=function(){this.enabled=!0},l.prototype.disable=function(){this.enabled=!1},l.prototype.toggleEnabled=function(){this.enabled=!this.enabled},l.prototype.toggle=function(t){var n=this;t&&((n=e(t.currentTarget).data("bs."+this.type))||(n=new this.constructor(t.currentTarget,this.getDelegateOptions()),e(t.currentTarget).data("bs."+this.type,n))),t?(n.inState.click=!n.inState.click,n.isInStateTrue()?n.enter(n):n.leave(n)):n.tip().hasClass("in")?n.leave(n):n.enter(n)},l.prototype.destroy=function(){var e=this;clearTimeout(this.timeout),this.hide((function(){e.$element.off("."+e.type).removeData("bs."+e.type),e.$tip&&e.$tip.detach(),e.$tip=null,e.$arrow=null,e.$viewport=null,e.$element=null}))},l.prototype.sanitizeHtml=function(e){return s(e,this.options.whiteList,this.options.sanitizeFn)};var c=e.fn.tooltip;e.fn.tooltip=function(t){return this.each((function(){var n=e(this),r=n.data("bs.tooltip"),i="object"==typeof t&&t;!r&&/destroy|hide/.test(t)||(r||n.data("bs.tooltip",r=new l(this,i)),"string"==typeof t&&r[t]())}))},e.fn.tooltip.Constructor=l,e.fn.tooltip.noConflict=function(){return e.fn.tooltip=c,this}}(jQuery)},function(e,t){!function(e){"use strict";var t=function(e,t){this.init("popover",e,t)};if(!e.fn.tooltip)throw new Error("Popover requires tooltip.js");t.VERSION="3.4.1",t.DEFAULTS=e.extend({},e.fn.tooltip.Constructor.DEFAULTS,{placement:"right",trigger:"click",content:"",template:'<div class="popover" role="tooltip"><div class="arrow"></div><h3 class="popover-title"></h3><div class="popover-content"></div></div>'}),(t.prototype=e.extend({},e.fn.tooltip.Constructor.prototype)).constructor=t,t.prototype.getDefaults=function(){return t.DEFAULTS},t.prototype.setContent=function(){var e=this.tip(),t=this.getTitle(),n=this.getContent();if(this.options.html){var r=typeof n;this.options.sanitize&&(t=this.sanitizeHtml(t),"string"===r&&(n=this.sanitizeHtml(n))),e.find(".popover-title").html(t),e.find(".popover-content").children().detach().end()["string"===r?"html":"append"](n)}else e.find(".popover-title").text(t),e.find(".popover-content").children().detach().end().text(n);e.removeClass("fade top bottom left right in"),e.find(".popover-title").html()||e.find(".popover-title").hide()},t.prototype.hasContent=function(){return this.getTitle()||this.getContent()},t.prototype.getContent=function(){var e=this.$element,t=this.options;return e.attr("data-content")||("function"==typeof t.content?t.content.call(e[0]):t.content)},t.prototype.arrow=function(){return this.$arrow=this.$arrow||this.tip().find(".arrow")};var n=e.fn.popover;e.fn.popover=function(n){return this.each((function(){var r=e(this),i=r.data("bs.popover"),o="object"==typeof n&&n;!i&&/destroy|hide/.test(n)||(i||r.data("bs.popover",i=new t(this,o)),"string"==typeof n&&i[n]())}))},e.fn.popover.Constructor=t,e.fn.popover.noConflict=function(){return e.fn.popover=n,this}}(jQuery)},function(e,t,n){"use strict";n.r(t);var r=n(133);for(var i in r)["default","core"].indexOf(i)<0&&function(e){n.d(t,e,(function(){return r[e]}))}(i);var o=n(113);n.d(t,"watchDigests",(function(){return o.b})),n.d(t,"getLocals",(function(){return o.a}));var a=n(55);n.d(t,"getNg1ViewConfigFactory",(function(){return a.b})),n.d(t,"ng1ViewsBuilder",(function(){return a.c})),n.d(t,"Ng1ViewConfig",(function(){return a.a}));var s=n(111);n.d(t,"StateProvider",(function(){return s.a}));var l=n(112);n.d(t,"UrlRouterProvider",(function(){return l.a}));n(220),n(221),n(222),n(223),n(224);var c=n(2);for(var i in n.d(t,"core",(function(){return c})),c)["default","core","watchDigests","getLocals","getNg1ViewConfigFactory","ng1ViewsBuilder","Ng1ViewConfig","StateProvider","UrlRouterProvider"].indexOf(i)<0&&function(e){n.d(t,e,(function(){return c[e]}))}(i);t.default="ui.router"},function(e,t){},function(e,t,n){"use strict";var r,i,o,a=n(12),s=n(2);function l(e){var t=e.match(/^\s*({[^}]*})\s*$/);t&&(e="("+t[1]+")");var n=e.replace(/\n/g," ").match(/^\s*([^(]*?)\s*(\((.*)\))?\s*$/);if(!n||4!==n.length)throw new Error("Invalid state ref '"+e+"'");return{state:n[1]||null,paramExpr:n[3]||null}}function c(e){var t=e.parent().inheritedData("$uiView"),n=Object(s.parse)("$cfg.path")(t);return n?Object(s.tail)(n).state.name:void 0}function u(e,t,n){var r=n.uiState||e.current.name,i=Object(s.extend)(function(e,t){return{relative:c(e)||t.$current,inherit:!0,source:"sref"}}(t,e),n.uiStateOpts||{}),o=e.href(r,n.uiStateParams,i);return{uiState:r,uiStateParams:n.uiStateParams,uiStateOpts:i,href:o}}function d(e){var t="[object SVGAnimatedString]"===Object.prototype.toString.call(e.prop("href")),n="FORM"===e[0].nodeName;return{attr:n?"action":t?"xlink:href":"href",isAnchor:"A"===e.prop("tagName").toUpperCase(),clickable:!n}}function f(e,t,n,r,i){return function(o){var a=o.which||o.button,s=i();if(!(a>1||o.ctrlKey||o.metaKey||o.shiftKey||o.altKey||e.attr("target"))){var l=n((function(){e.attr("disabled")||t.go(s.uiState,s.uiStateParams,s.uiStateOpts)}));o.preventDefault();var c=r.isAnchor&&!s.href?1:0;o.preventDefault=function(){c--<=0&&n.cancel(l)}}}}function p(e,t,n,r){var i;r&&(i=r.events),Object(s.isArray)(i)||(i=["click"]);for(var o=e.on?"on":"bind",a=0,l=i;a<l.length;a++){var c=l[a];e[o](c,n)}t.$on("$destroy",(function(){for(var t=e.off?"off":"unbind",r=0,o=i;r<o.length;r++){var a=o[r];e[t](a,n)}}))}r=["$uiRouter","$timeout",function(e,t){var n=e.stateService;return{restrict:"A",require:["?^uiSrefActive","?^uiSrefActiveEq"],link:function(r,i,o,a){var c=d(i),h=a[1]||a[0],g=null,v={},m=function(){return u(n,i,v)},b=l(o.uiSref);function y(){var e=m();g&&g(),h&&(g=h.$$addStateInfo(e.uiState,e.uiStateParams)),null!=e.href&&o.$set(c.attr,e.href)}if(v.uiState=b.state,v.uiStateOpts=o.uiSrefOpts?r.$eval(o.uiSrefOpts):{},b.paramExpr&&(r.$watch(b.paramExpr,(function(e){v.uiStateParams=Object(s.extend)({},e),y()}),!0),v.uiStateParams=Object(s.extend)({},r.$eval(b.paramExpr))),y(),r.$on("$destroy",e.stateRegistry.onStatesChanged(y)),r.$on("$destroy",e.transitionService.onSuccess({},y)),c.clickable){var x=f(i,n,t,c,m);p(i,r,x,v.uiStateOpts)}}}}],i=["$uiRouter","$timeout",function(e,t){var n=e.stateService;return{restrict:"A",require:["?^uiSrefActive","?^uiSrefActiveEq"],link:function(r,i,o,a){var l,c=d(i),h=a[1]||a[0],g=null,v={},m=function(){return u(n,i,v)},b=["uiState","uiStateParams","uiStateOpts"],y=b.reduce((function(e,t){return e[t]=s.noop,e}),{});function x(){var e=m();g&&g(),h&&(g=h.$$addStateInfo(e.uiState,e.uiStateParams)),null!=e.href&&o.$set(c.attr,e.href)}b.forEach((function(e){v[e]=o[e]?r.$eval(o[e]):null,o.$observe(e,(function(t){y[e](),y[e]=r.$watch(t,(function(t){v[e]=t,x()}),!0)}))})),x(),r.$on("$destroy",e.stateRegistry.onStatesChanged(x)),r.$on("$destroy",e.transitionService.onSuccess({},x)),c.clickable&&(l=f(i,n,t,c,m),p(i,r,l,v.uiStateOpts))}}}],o=["$state","$stateParams","$interpolate","$uiRouter",function(e,t,n,r){return{restrict:"A",controller:["$scope","$element","$attrs",function(t,i,o){var a,u,d,f,p,h=[];a=n(o.uiSrefActiveEq||"",!1)(t);try{u=t.$eval(o.uiSrefActive)}catch(e){}function g(e){e.promise.then(y,s.noop)}function v(){m(u)}function m(e){Object(s.isObject)(e)&&(h=[],Object(s.forEach)(e,(function(e,n){var r=function(e,n){var r=l(e);b(r.state,t.$eval(r.paramExpr),n)};Object(s.isString)(e)?r(e,n):Object(s.isArray)(e)&&Object(s.forEach)(e,(function(e){r(e,n)}))})))}function b(t,n,r){var o={state:e.get(t,c(i))||{name:t},params:n,activeClass:r};return h.push(o),function(){Object(s.removeFrom)(h)(o)}}function y(){var n=function(e){return e.split(/\s/).filter(s.identity)},r=function(e){return e.map((function(e){return e.activeClass})).map(n).reduce(s.unnestR,[])},o=r(h).concat(n(a)).reduce(s.uniqR,[]),l=r(h.filter((function(t){return e.includes(t.state.name,t.params)}))),c=!!h.filter((function(t){return e.is(t.state.name,t.params)})).length?n(a):[],u=l.concat(c).reduce(s.uniqR,[]),d=o.filter((function(e){return!Object(s.inArray)(u,e)}));t.$evalAsync((function(){u.forEach((function(e){return i.addClass(e)})),d.forEach((function(e){return i.removeClass(e)}))}))}m(u=u||n(o.uiSrefActive||"",!1)(t)),this.$$addStateInfo=function(e,t){if(!(Object(s.isObject)(u)&&h.length>0)){var n=b(e,t,u);return y(),n}},t.$on("$destroy",(d=r.stateRegistry.onStatesChanged(v),f=r.transitionService.onStart({},g),p=t.$on("$stateChangeSuccess",y),function(){d(),f(),p()})),r.globals.transition&&g(r.globals.transition),y()}]}}],a.a.module("ui.router.state").directive("uiSref",r).directive("uiSrefActive",o).directive("uiSrefActiveEq",o).directive("uiState",i)},function(e,t,n){"use strict";var r=n(12);function i(e){var t=function(t,n,r){return e.is(t,n,r)};return t.$stateful=!0,t}function o(e){var t=function(t,n,r){return e.includes(t,n,r)};return t.$stateful=!0,t}i.$inject=["$state"],o.$inject=["$state"],r.a.module("ui.router.state").filter("isState",i).filter("includedByState",o)},function(e,t,n){"use strict";var r,i=n(2),o=n(12),a=n(113),s=n(55);function l(e,t,n,r,s){var l=Object(i.parse)("viewDecl.controllerAs"),c=Object(i.parse)("viewDecl.resolveAs");return{restrict:"ECA",priority:-400,compile:function(r){var u=r.html();return r.empty(),function(r,f){var p=f.data("$uiView");if(!p)return f.html(u),void e(f.contents())(r);var h=p.$cfg||{viewDecl:{},getTemplate:i.noop},g=h.path&&new i.ResolveContext(h.path);f.html(h.getTemplate(f,g)||u),i.trace.traceUIViewFill(p.$uiView,f.html());var v=e(f.contents()),m=h.controller,b=l(h),y=c(h),x=g&&Object(a.a)(g);if(r[y]=x,m){var w=t(m,Object(i.extend)({},x,{$scope:r,$element:f}));b&&(r[b]=w,r[b][y]=x),f.data("$ngControllerController",w),f.children().data("$ngControllerController",w),d(s,n,w,r,h)}if(Object(i.isString)(h.component))var k=Object(i.kebobString)(h.component),A=new RegExp("^(x-|data-)?"+k+"$","i"),E=r.$watch((function(){var e=[].slice.call(f[0].children).filter((function(e){return e&&e.tagName&&A.exec(e.tagName)}));return e&&o.a.element(e).data("$"+h.component+"Controller")}),(function(e){e&&(d(s,n,e,r,h),E())}));v(r)}}}}r=["$view","$animate","$uiViewScroll","$interpolate","$q",function(e,t,n,r,a){var l={$cfg:{viewDecl:{$context:e._pluginapi._rootViewContext()}},$uiView:{}},c={count:0,restrict:"ECA",terminal:!0,priority:400,transclude:"element",compile:function(u,d,f){return function(u,d,p){var h,g,v,m,b=p.onload||"",y=p.autoscroll,x={enter:function(e,n,r){o.a.version.minor>2?t.enter(e,null,n).then(r):t.enter(e,null,n,r)},leave:function(e,n){o.a.version.minor>2?t.leave(e).then(n):t.leave(e,n)}},w=d.inheritedData("$uiView")||l,k=r(p.uiView||p.name||"")(u)||"$default",A={$type:"ng1",id:c.count++,name:k,fqn:w.$uiView.fqn?w.$uiView.fqn+"."+k:k,config:null,configUpdated:function(e){if(e&&!(e instanceof s.a))return;if(t=m,n=e,t===n)return;var t,n;i.trace.traceUIViewConfigUpdated(A,e&&e.viewDecl&&e.viewDecl.$context),m=e,S(e)},get creationContext(){var e=Object(i.parse)("$cfg.viewDecl.$context")(w),t=Object(i.parse)("$uiView.creationContext")(w);return e||t}};i.trace.traceUIViewEvent("Linking",A),d.data("$uiView",{$uiView:A}),S();var E=e.registerUIView(A);function S(e){var t=u.$new(),r=a.defer(),o=a.defer(),s={$cfg:e,$uiView:A},l={$animEnter:r.promise,$animLeave:o.promise,$$animLeave:o};t.$emit("$viewContentLoading",k);var c=f(t,(function(e){e.data("$uiViewAnim",l),e.data("$uiView",s),x.enter(e,d,(function(){r.resolve(),v&&v.$emit("$viewContentAnimationEnded"),(Object(i.isDefined)(y)&&!y||u.$eval(y))&&n(e)})),function(){if(h&&(i.trace.traceUIViewEvent("Removing (previous) el",h.data("$uiView")),h.remove(),h=null),v&&(i.trace.traceUIViewEvent("Destroying scope",A),v.$destroy(),v=null),g){var e=g.data("$uiViewAnim");i.trace.traceUIViewEvent("Animate out",e),x.leave(g,(function(){e.$$animLeave.resolve(),h=null})),h=g,g=null}}()}));g=c,(v=t).$emit("$viewContentLoaded",e||m),v.$eval(b)}u.$on("$destroy",(function(){i.trace.traceUIViewEvent("Destroying/Unregistering",A),E()}))}}};return c}],l.$inject=["$compile","$controller","$transitions","$view","$q"];var c="function"==typeof o.a.module("ui.router").component,u=0;function d(e,t,n,r,o){!Object(i.isFunction)(n.$onInit)||(o.viewDecl.component||o.viewDecl.componentProvider)&&c||n.$onInit();var a=Object(i.tail)(o.path).state.self,s={bind:n};if(Object(i.isFunction)(n.uiOnParamsChanged)){var l=new i.ResolveContext(o.path).getResolvable("$transition$").data;r.$on("$destroy",t.onSuccess({},(function(e){if(e!==l&&-1===e.exiting().indexOf(a)){var t=e.params("to"),r=e.params("from"),o=function(e){return e.paramSchema},s=e.treeChanges("to").map(o).reduce(i.unnestR,[]),c=e.treeChanges("from").map(o).reduce(i.unnestR,[]),u=s.filter((function(e){var n=c.indexOf(e);return-1===n||!c[n].type.equals(t[e.id],r[e.id])}));if(u.length){var d=u.map((function(e){return e.id})),f=Object(i.filter)(t,(function(e,t){return-1!==d.indexOf(t)}));n.uiOnParamsChanged(f,e)}}}),s))}if(Object(i.isFunction)(n.uiCanExit)){var d=u++,f=function(e){return!!e&&(e._uiCanExitIds&&!0===e._uiCanExitIds[d]||f(e.redirectedFrom()))},p={exiting:a.name};r.$on("$destroy",t.onBefore(p,(function(t){var r,i=t._uiCanExitIds=t._uiCanExitIds||{};return f(t)||(r=e.when(n.uiCanExit(t))).then((function(e){return i[d]=!1!==e})),r}),s))}}o.a.module("ui.router.state").directive("uiView",r),o.a.module("ui.router.state").directive("uiView",l)},function(e,t,n){"use strict";n(12).a.module("ui.router.state").provider("$uiViewScroll",(function(){var e=!1;this.useAnchorScroll=function(){e=!0},this.$get=["$anchorScroll","$timeout",function(t,n){return e?t:function(e){return n((function(){e[0].scrollIntoView()}),0,!1)}}]}))},function(e,t,n){n(226),e.exports="ngRoute"},function(e,t){ +!function(e){"use strict";var t={objectMaxDepth:5,urlErrorParamsEnabled:!0};function n(e){if(!L(e))return t;z(e.objectMaxDepth)&&(t.objectMaxDepth=r(e.objectMaxDepth)?e.objectMaxDepth:NaN),z(e.urlErrorParamsEnabled)&&Z(e.urlErrorParamsEnabled)&&(t.urlErrorParamsEnabled=e.urlErrorParamsEnabled)}function r(e){return q(e)&&e>0}function i(e,n){n=n||Error;var r="https://errors.angularjs.org/1.8.2/",i=r.replace(".","\\.")+"[\\s\\S]*",o=new RegExp(i,"g");return function(){var i,a,s=arguments[0],l=arguments[1],c="["+(e?e+":":"")+s+"] ",u=de(arguments,2).map((function(e){return Ve(e,t.objectMaxDepth)}));if(c+=l.replace(/\{\d+\}/g,(function(e){var t=+e.slice(1,-1);return t<u.length?u[t].replace(o,""):e})),c+="\n"+r+(e?e+"/":"")+s,t.urlErrorParamsEnabled)for(a=0,i="?";a<u.length;a++,i="&")c+=i+"p"+a+"="+encodeURIComponent(u[a]);return new n(c)}}var o,a,s,l,c=/^\/(.+)\/([a-z]*)$/,u=Object.prototype.hasOwnProperty,d=function(e){return F(e)?e.toLowerCase():e},f=function(e){return F(e)?e.toUpperCase():e},p=[].slice,h=[].splice,g=[].push,v=Object.prototype.toString,m=Object.getPrototypeOf,b=i("ng"),y=e.angular||(e.angular={}),x=0;function w(e){if(null==e||Y(e))return!1;if(U(e)||F(e)||a&&e instanceof a)return!0;var t="length"in Object(e)&&e.length;return q(t)&&(t>=0&&t-1 in e||"function"==typeof e.item)}function k(e,t,n){var r,i;if(e)if(G(e))for(r in e)"prototype"!==r&&"length"!==r&&"name"!==r&&e.hasOwnProperty(r)&&t.call(n,e[r],r,e);else if(U(e)||w(e)){var o="object"!=typeof e;for(r=0,i=e.length;r<i;r++)(o||r in e)&&t.call(n,e[r],r,e)}else if(e.forEach&&e.forEach!==k)e.forEach(t,n,e);else if(B(e))for(r in e)t.call(n,e[r],r,e);else if("function"==typeof e.hasOwnProperty)for(r in e)e.hasOwnProperty(r)&&t.call(n,e[r],r,e);else for(r in e)u.call(e,r)&&t.call(n,e[r],r,e);return e}function A(e,t,n){for(var r=Object.keys(e).sort(),i=0;i<r.length;i++)t.call(n,e[r[i]],r[i]);return r}function E(e){return function(t,n){e(n,t)}}function S(){return++x}function C(e,t){t?e.$$hashKey=t:delete e.$$hashKey}function $(e,t,n){for(var r=e.$$hashKey,i=0,o=t.length;i<o;++i){var a=t[i];if(L(a)||G(a))for(var s=Object.keys(a),l=0,c=s.length;l<c;l++){var u=s[l],d=a[u];n&&L(d)?V(d)?e[u]=new Date(d.valueOf()):W(d)?e[u]=new RegExp(d):d.nodeName?e[u]=d.cloneNode(!0):te(d)?e[u]=d.clone():"__proto__"!==u&&(L(e[u])||(e[u]=U(d)?[]:{}),$(e[u],[d],!0)):e[u]=d}}return C(e,r),e}function O(e){return $(e,p.call(arguments,1),!1)}function _(e){return $(e,p.call(arguments,1),!0)}function T(e){return parseInt(e,10)}o=e.document.documentMode;var j=Number.isNaN||function(e){return e!=e};function P(e,t){return O(Object.create(e),t)}function D(){}function R(e){return e}function I(e){return function(){return e}}function N(e){return G(e.toString)&&e.toString!==v}function M(e){return void 0===e}function z(e){return void 0!==e}function L(e){return null!==e&&"object"==typeof e}function B(e){return null!==e&&"object"==typeof e&&!m(e)}function F(e){return"string"==typeof e}function q(e){return"number"==typeof e}function V(e){return"[object Date]"===v.call(e)}function U(e){return Array.isArray(e)||e instanceof Array}function H(e){switch(v.call(e)){case"[object Error]":case"[object Exception]":case"[object DOMException]":return!0;default:return e instanceof Error}}function G(e){return"function"==typeof e}function W(e){return"[object RegExp]"===v.call(e)}function Y(e){return e&&e.window===e}function X(e){return e&&e.$evalAsync&&e.$watch}function Z(e){return"boolean"==typeof e}function Q(e){return e&&G(e.then)}D.$inject=[],R.$inject=[];var J=/^\[object (?:Uint8|Uint8Clamped|Uint16|Uint32|Int8|Int16|Int32|Float32|Float64)Array]$/;var K=function(e){return F(e)?e.trim():e},ee=function(e){return e.replace(/([-()[\]{}+?*.$^|,:#<!\\])/g,"\\$1").replace(/\x08/g,"\\x08")};function te(e){return!(!e||!(e.nodeName||e.prop&&e.attr&&e.find))}function ne(e){return d(e.nodeName||e[0]&&e[0].nodeName)}function re(e,t){return-1!==Array.prototype.indexOf.call(e,t)}function ie(e,t){var n=e.indexOf(t);return n>=0&&e.splice(n,1),n}function oe(e,t,n){var i,o,a=[],s=[];if(n=r(n)?n:NaN,t){if((o=t)&&q(o.length)&&J.test(v.call(o))||(i=t,"[object ArrayBuffer]"===v.call(i)))throw b("cpta","Can't copy! TypedArray destination cannot be mutated.");if(e===t)throw b("cpi","Can't copy! Source and destination are identical.");return U(t)?t.length=0:k(t,(function(e,n){"$$hashKey"!==n&&delete t[n]})),a.push(e),s.push(t),l(e,t,n)}return c(e,n);function l(e,t,n){if(--n<0)return"...";var r,i=t.$$hashKey;if(U(e))for(var o=0,a=e.length;o<a;o++)t.push(c(e[o],n));else if(B(e))for(r in e)t[r]=c(e[r],n);else if(e&&"function"==typeof e.hasOwnProperty)for(r in e)e.hasOwnProperty(r)&&(t[r]=c(e[r],n));else for(r in e)u.call(e,r)&&(t[r]=c(e[r],n));return C(t,i),t}function c(e,t){if(!L(e))return e;var n=a.indexOf(e);if(-1!==n)return s[n];if(Y(e)||X(e))throw b("cpws","Can't copy! Making copies of Window or Scope instances is not supported.");var r=!1,i=function(e){switch(v.call(e)){case"[object Int8Array]":case"[object Int16Array]":case"[object Int32Array]":case"[object Float32Array]":case"[object Float64Array]":case"[object Uint8Array]":case"[object Uint8ClampedArray]":case"[object Uint16Array]":case"[object Uint32Array]":return new e.constructor(c(e.buffer),e.byteOffset,e.length);case"[object ArrayBuffer]":if(!e.slice){var t=new ArrayBuffer(e.byteLength);return new Uint8Array(t).set(new Uint8Array(e)),t}return e.slice(0);case"[object Boolean]":case"[object Number]":case"[object String]":case"[object Date]":return new e.constructor(e.valueOf());case"[object RegExp]":var n=new RegExp(e.source,e.toString().match(/[^/]*$/)[0]);return n.lastIndex=e.lastIndex,n;case"[object Blob]":return new e.constructor([e],{type:e.type})}if(G(e.cloneNode))return e.cloneNode(!0)}(e);return void 0===i&&(i=U(e)?[]:Object.create(m(e)),r=!0),a.push(e),s.push(i),r?l(e,i,t):i}}function ae(e,t){return e===t||e!=e&&t!=t}function se(e,t){if(e===t)return!0;if(null===e||null===t)return!1;if(e!=e&&t!=t)return!0;var n,r,i,o=typeof e;if(o===typeof t&&"object"===o){if(!U(e)){if(V(e))return!!V(t)&&ae(e.getTime(),t.getTime());if(W(e))return!!W(t)&&e.toString()===t.toString();if(X(e)||X(t)||Y(e)||Y(t)||U(t)||V(t)||W(t))return!1;for(r in i=Le(),e)if("$"!==r.charAt(0)&&!G(e[r])){if(!se(e[r],t[r]))return!1;i[r]=!0}for(r in t)if(!(r in i)&&"$"!==r.charAt(0)&&z(t[r])&&!G(t[r]))return!1;return!0}if(!U(t))return!1;if((n=e.length)===t.length){for(r=0;r<n;r++)if(!se(e[r],t[r]))return!1;return!0}}return!1}var le=function(){if(!z(le.rules)){var t=e.document.querySelector("[ng-csp]")||e.document.querySelector("[data-ng-csp]");if(t){var n=t.getAttribute("ng-csp")||t.getAttribute("data-ng-csp");le.rules={noUnsafeEval:!n||-1!==n.indexOf("no-unsafe-eval"),noInlineStyle:!n||-1!==n.indexOf("no-inline-style")}}else le.rules={noUnsafeEval:function(){try{return new Function(""),!1}catch(e){return!0}}(),noInlineStyle:!1}}return le.rules},ce=function(){if(z(ce.name_))return ce.name_;var t,n,r,i,o=Se.length;for(n=0;n<o;++n)if(r=Se[n],t=e.document.querySelector("["+r.replace(":","\\:")+"jq]")){i=t.getAttribute(r+"jq");break}return ce.name_=i};function ue(e,t,n){return e.concat(p.call(t,n))}function de(e,t){return p.call(e,t||0)}function fe(e,t){var n=arguments.length>2?de(arguments,2):[];return!G(t)||t instanceof RegExp?t:n.length?function(){return arguments.length?t.apply(e,ue(n,arguments,0)):t.apply(e,n)}:function(){return arguments.length?t.apply(e,arguments):t.call(e)}}function pe(t,n){var r=n;return"string"==typeof t&&"$"===t.charAt(0)&&"$"===t.charAt(1)?r=void 0:Y(n)?r="$WINDOW":n&&e.document===n?r="$DOCUMENT":X(n)&&(r="$SCOPE"),r}function he(e,t){if(!M(e))return q(t)||(t=t?2:null),JSON.stringify(e,pe,t)}function ge(e){return F(e)?JSON.parse(e):e}var ve=/:/g;function me(e,t){e=e.replace(ve,"");var n=Date.parse("Jan 01, 1970 00:00:00 "+e)/6e4;return j(n)?t:n}function be(e,t){return(e=new Date(e.getTime())).setMinutes(e.getMinutes()+t),e}function ye(e,t,n){n=n?-1:1;var r=e.getTimezoneOffset();return be(e,n*(me(t,r)-r))}function xe(e){e=a(e).clone().empty();var t=a("<div></div>").append(e).html();try{return e[0].nodeType===Fe?d(t):t.match(/^(<[^>]+>)/)[1].replace(/^<([\w-]+)/,(function(e,t){return"<"+d(t)}))}catch(e){return d(t)}}function we(e){try{return decodeURIComponent(e)}catch(e){}}function ke(e){var t={};return k((e||"").split("&"),(function(e){var n,r,i;e&&(r=e=e.replace(/\+/g,"%20"),-1!==(n=e.indexOf("="))&&(r=e.substring(0,n),i=e.substring(n+1)),z(r=we(r))&&(i=!z(i)||we(i),u.call(t,r)?U(t[r])?t[r].push(i):t[r]=[t[r],i]:t[r]=i))})),t}function Ae(e){return Ee(e,!0).replace(/%26/gi,"&").replace(/%3D/gi,"=").replace(/%2B/gi,"+")}function Ee(e,t){return encodeURIComponent(e).replace(/%40/gi,"@").replace(/%3A/gi,":").replace(/%24/g,"$").replace(/%2C/gi,",").replace(/%3B/gi,";").replace(/%20/g,t?"%20":"+")}var Se=["ng-","data-ng-","ng:","x-ng-"];var Ce=function(t){var n=t.currentScript;if(!n)return!0;if(!(n instanceof e.HTMLScriptElement||n instanceof e.SVGScriptElement))return!1;var r=n.attributes;return[r.getNamedItem("src"),r.getNamedItem("href"),r.getNamedItem("xlink:href")].every((function(e){if(!e)return!0;if(!e.value)return!1;var n=t.createElement("a");if(n.href=e.value,t.location.origin===n.origin)return!0;switch(n.protocol){case"http:":case"https:":case"ftp:":case"blob:":case"file:":case"data:":return!0;default:return!1}}))}(e.document);function $e(t,n){var r,i,o={};if(k(Se,(function(e){var n=e+"app";!r&&t.hasAttribute&&t.hasAttribute(n)&&(r=t,i=t.getAttribute(n))})),k(Se,(function(e){var n,o=e+"app";!r&&(n=t.querySelector("["+o.replace(":","\\:")+"]"))&&(r=n,i=n.getAttribute(o))})),r){if(!Ce)return void e.console.error("AngularJS: disabling automatic bootstrap. <script> protocol indicates an extension, document.location.href does not match.");o.strictDi=null!==function(e,t){var n,r,i=Se.length;for(r=0;r<i;++r)if(n=Se[r]+t,F(n=e.getAttribute(n)))return n;return null}(r,"strict-di"),n(r,i?[i]:[],o)}}function Oe(t,n,r){L(r)||(r={});r=O({strictDi:!1},r);var i=function(){if((t=a(t)).injector()){var i=t[0]===e.document?"document":xe(t);throw b("btstrpd","App already bootstrapped with this element '{0}'",i.replace(/</,"<").replace(/>/,">"))}(n=n||[]).unshift(["$provide",function(e){e.value("$rootElement",t)}]),r.debugInfoEnabled&&n.push(["$compileProvider",function(e){e.debugInfoEnabled(!0)}]),n.unshift("ng");var o=Qt(n,r.strictDi);return o.invoke(["$rootScope","$rootElement","$compile","$injector",function(e,t,n,r){e.$apply((function(){t.data("$injector",r),n(t)(e)}))}]),o},o=/^NG_ENABLE_DEBUG_INFO!/,s=/^NG_DEFER_BOOTSTRAP!/;if(e&&o.test(e.name)&&(r.debugInfoEnabled=!0,e.name=e.name.replace(o,"")),e&&!s.test(e.name))return i();e.name=e.name.replace(s,""),y.resumeBootstrap=function(e){return k(e,(function(e){n.push(e)})),i()},G(y.resumeDeferredBootstrap)&&y.resumeDeferredBootstrap()}function _e(){e.name="NG_ENABLE_DEBUG_INFO!"+e.name,e.location.reload()}function Te(e){var t=y.element(e).injector();if(!t)throw b("test","no injector found for element argument to getTestability");return t.get("$$testability")}var je=/[A-Z]/g;function Pe(e,t){return t=t||"_",e.replace(je,(function(e,n){return(n?t:"")+e.toLowerCase()}))}var De=!1;function Re(){ft.legacyXHTMLReplacement=!0}function Ie(e,t,n){if(!e)throw b("areq","Argument '{0}' is {1}",t||"?",n||"required");return e}function Ne(e,t,n){return n&&U(e)&&(e=e[e.length-1]),Ie(G(e),t,"not a function, got "+(e&&"object"==typeof e?e.constructor.name||"Object":typeof e)),e}function Me(e,t){if("hasOwnProperty"===e)throw b("badname","hasOwnProperty is not a valid {0} name",t)}function ze(e){for(var t,n=e[0],r=e[e.length-1],i=1;n!==r&&(n=n.nextSibling);i++)(t||e[i]!==n)&&(t||(t=a(p.call(e,0,i))),t.push(n));return t||e}function Le(){return Object.create(null)}function Be(e){if(null==e)return"";switch(typeof e){case"string":break;case"number":e=""+e;break;default:e=!N(e)||U(e)||V(e)?he(e):e.toString()}return e}var Fe=3;function qe(e,t){if(U(e)){t=t||[];for(var n=0,r=e.length;n<r;n++)t[n]=e[n]}else if(L(e))for(var i in t=t||{},e)"$"===i.charAt(0)&&"$"===i.charAt(1)||(t[i]=e[i]);return t||e}function Ve(e,t){return"function"==typeof e?e.toString().replace(/ \{[\s\S]*$/,""):M(e)?"undefined":"string"!=typeof e?function(e,t){var n=[];return r(t)&&(e=y.copy(e,null,t)),JSON.stringify(e,(function(e,t){if(L(t=pe(e,t))){if(n.indexOf(t)>=0)return"...";n.push(t)}return t}))}(e,t):e}var Ue={full:"1.8.2",major:1,minor:8,dot:2,codeName:"meteoric-mining"};ft.expando="ng339";var He=ft.cache={},Ge=1;ft._data=function(e){return this.cache[e[this.expando]]||{}};var We=/-([a-z])/g,Ye=/^-ms-/,Xe={mouseleave:"mouseout",mouseenter:"mouseover"},Ze=i("jqLite");function Qe(e,t){return t.toUpperCase()}function Je(e){return e.replace(We,Qe)}var Ke=/^<([\w-]+)\s*\/?>(?:<\/\1>|)$/,et=/<|&#?\w+;/,tt=/<([\w:-]+)/,nt=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:-]+)[^>]*)\/>/gi,rt={thead:["table"],col:["colgroup","table"],tr:["tbody","table"],td:["tr","tbody","table"]};rt.tbody=rt.tfoot=rt.colgroup=rt.caption=rt.thead,rt.th=rt.td;var it={option:[1,'<select multiple="multiple">',"</select>"],_default:[0,"",""]};for(var ot in rt){var at=rt[ot],st=at.slice().reverse();it[ot]=[st.length,"<"+st.join("><")+">","</"+at.join("></")+">"]}function lt(e){return!et.test(e)}function ct(e){var t=e.nodeType;return 1===t||!t||9===t}function ut(t,n){var r,i,a,s,l,c=n.createDocumentFragment(),u=[];if(lt(t))u.push(n.createTextNode(t));else{if(r=c.appendChild(n.createElement("div")),i=(tt.exec(t)||["",""])[1].toLowerCase(),s=ft.legacyXHTMLReplacement?t.replace(nt,"<$1></$2>"):t,o<10)for(a=it[i]||it._default,r.innerHTML=a[1]+s+a[2],l=a[0];l--;)r=r.firstChild;else{for(l=(a=rt[i]||[]).length;--l>-1;)r.appendChild(e.document.createElement(a[l])),r=r.firstChild;r.innerHTML=s}u=ue(u,r.childNodes),(r=c.firstChild).textContent=""}return c.textContent="",c.innerHTML="",k(u,(function(e){c.appendChild(e)})),c}it.optgroup=it.option;var dt=e.Node.prototype.contains||function(e){return!!(16&this.compareDocumentPosition(e))};function ft(t){if(t instanceof ft)return t;var n,r,i,o;if(F(t)&&(t=K(t),n=!0),!(this instanceof ft)){if(n&&"<"!==t.charAt(0))throw Ze("nosel","Looking up elements via selectors is not supported by jqLite! See: http://docs.angularjs.org/api/angular.element");return new ft(t)}n?Et(this,(r=t,i=i||e.document,(o=Ke.exec(r))?[i.createElement(o[1])]:(o=ut(r,i))?o.childNodes:[])):G(t)?_t(t):Et(this,t)}function pt(e){return e.cloneNode(!0)}function ht(e,t){!t&&ct(e)&&a.cleanData([e]),e.querySelectorAll&&a.cleanData(e.querySelectorAll("*"))}function gt(e){var t;for(t in e)return!1;return!0}function vt(e){var t=e.ng339,n=t&&He[t],r=n&&n.events,i=n&&n.data;i&&!gt(i)||r&&!gt(r)||(delete He[t],e.ng339=void 0)}function mt(e,t,n,r){if(z(r))throw Ze("offargs","jqLite#off() does not support the `selector` argument");var i=yt(e),o=i&&i.events,a=i&&i.handle;if(a){if(t){var s=function(t){var r=o[t];z(n)&&ie(r||[],n),z(n)&&r&&r.length>0||(e.removeEventListener(t,a),delete o[t])};k(t.split(" "),(function(e){s(e),Xe[e]&&s(Xe[e])}))}else for(t in o)"$destroy"!==t&&e.removeEventListener(t,a),delete o[t];vt(e)}}function bt(e,t){var n=e.ng339,r=n&&He[n];r&&(t?delete r.data[t]:r.data={},vt(e))}function yt(e,t){var n=e.ng339,r=n&&He[n];return t&&!r&&(e.ng339=n=++Ge,r=He[n]={events:{},data:{},handle:void 0}),r}function xt(e,t,n){if(ct(e)){var r,i=z(n),o=!i&&t&&!L(t),a=!t,s=yt(e,!o),l=s&&s.data;if(i)l[Je(t)]=n;else{if(a)return l;if(o)return l&&l[Je(t)];for(r in t)l[Je(r)]=t[r]}}}function wt(e,t){return!!e.getAttribute&&(" "+(e.getAttribute("class")||"")+" ").replace(/[\n\t]/g," ").indexOf(" "+t+" ")>-1}function kt(e,t){if(t&&e.setAttribute){var n=(" "+(e.getAttribute("class")||"")+" ").replace(/[\n\t]/g," "),r=n;k(t.split(" "),(function(e){e=K(e),r=r.replace(" "+e+" "," ")})),r!==n&&e.setAttribute("class",K(r))}}function At(e,t){if(t&&e.setAttribute){var n=(" "+(e.getAttribute("class")||"")+" ").replace(/[\n\t]/g," "),r=n;k(t.split(" "),(function(e){e=K(e),-1===r.indexOf(" "+e+" ")&&(r+=e+" ")})),r!==n&&e.setAttribute("class",K(r))}}function Et(e,t){if(t)if(t.nodeType)e[e.length++]=t;else{var n=t.length;if("number"==typeof n&&t.window!==t){if(n)for(var r=0;r<n;r++)e[e.length++]=t[r]}else e[e.length++]=t}}function St(e,t){return Ct(e,"$"+(t||"ngController")+"Controller")}function Ct(e,t,n){9===e.nodeType&&(e=e.documentElement);for(var r=U(t)?t:[t];e;){for(var i=0,o=r.length;i<o;i++)if(z(n=a.data(e,r[i])))return n;e=e.parentNode||11===e.nodeType&&e.host}}function $t(e){for(ht(e,!0);e.firstChild;)e.removeChild(e.firstChild)}function Ot(e,t){t||ht(e);var n=e.parentNode;n&&n.removeChild(e)}function _t(t){function n(){e.document.removeEventListener("DOMContentLoaded",n),e.removeEventListener("load",n),t()}"complete"===e.document.readyState?e.setTimeout(t):(e.document.addEventListener("DOMContentLoaded",n),e.addEventListener("load",n))}var Tt=ft.prototype={ready:_t,toString:function(){var e=[];return k(this,(function(t){e.push(""+t)})),"["+e.join(", ")+"]"},eq:function(e){return a(e>=0?this[e]:this[this.length+e])},length:0,push:g,sort:[].sort,splice:[].splice},jt={};k("multiple,selected,checked,disabled,readOnly,required,open".split(","),(function(e){jt[d(e)]=e}));var Pt={};k("input,select,option,textarea,button,form,details".split(","),(function(e){Pt[e]=!0}));var Dt={ngMinlength:"minlength",ngMaxlength:"maxlength",ngMin:"min",ngMax:"max",ngPattern:"pattern",ngStep:"step"};function Rt(e,t){var n=jt[t.toLowerCase()];return n&&Pt[ne(e)]&&n}function It(e,t,n){n.call(e,t)}function Nt(e,t,n){var r=t.relatedTarget;r&&(r===e||dt.call(e,r))||n.call(e,t)}function Mt(){this.$get=function(){return O(ft,{hasClass:function(e,t){return e.attr&&(e=e[0]),wt(e,t)},addClass:function(e,t){return e.attr&&(e=e[0]),At(e,t)},removeClass:function(e,t){return e.attr&&(e=e[0]),kt(e,t)}})}}function zt(e,t){var n=e&&e.$$hashKey;if(n)return"function"==typeof n&&(n=e.$$hashKey()),n;var r=typeof e;return n="function"===r||"object"===r&&null!==e?e.$$hashKey=r+":"+(t||S)():r+":"+e}k({data:xt,removeData:bt,hasData:function(e){for(var t in He[e.ng339])return!0;return!1},cleanData:function(e){for(var t=0,n=e.length;t<n;t++)bt(e[t]),mt(e[t])}},(function(e,t){ft[t]=e})),k({data:xt,inheritedData:Ct,scope:function(e){return a.data(e,"$scope")||Ct(e.parentNode||e,["$isolateScope","$scope"])},isolateScope:function(e){return a.data(e,"$isolateScope")||a.data(e,"$isolateScopeNoTemplate")},controller:St,injector:function(e){return Ct(e,"$injector")},removeAttr:function(e,t){e.removeAttribute(t)},hasClass:wt,css:function(e,t,n){if(t=function(e){return Je(e.replace(Ye,"ms-"))}(t),!z(n))return e.style[t];e.style[t]=n},attr:function(e,t,n){var r,i=e.nodeType;if(i!==Fe&&2!==i&&8!==i&&e.getAttribute){var o=d(t),a=jt[o];if(!z(n))return r=e.getAttribute(t),a&&null!==r&&(r=o),null===r?void 0:r;null===n||!1===n&&a?e.removeAttribute(t):e.setAttribute(t,a?o:n)}},prop:function(e,t,n){if(!z(n))return e[t];e[t]=n},text:function(){return e.$dv="",e;function e(e,t){if(M(t)){var n=e.nodeType;return 1===n||n===Fe?e.textContent:""}e.textContent=t}}(),val:function(e,t){if(M(t)){if(e.multiple&&"select"===ne(e)){var n=[];return k(e.options,(function(e){e.selected&&n.push(e.value||e.text)})),n}return e.value}e.value=t},html:function(e,t){if(M(t))return e.innerHTML;ht(e,!0),e.innerHTML=t},empty:$t},(function(e,t){ft.prototype[t]=function(t,n){var r,i,o=this.length;if(e!==$t&&M(2===e.length&&e!==wt&&e!==St?t:n)){if(L(t)){for(r=0;r<o;r++)if(e===xt)e(this[r],t);else for(i in t)e(this[r],i,t[i]);return this}for(var a=e.$dv,s=M(a)?Math.min(o,1):o,l=0;l<s;l++){var c=e(this[l],t,n);a=a?a+c:c}return a}for(r=0;r<o;r++)e(this[r],t,n);return this}})),k({removeData:bt,on:function(e,t,n,r){if(z(r))throw Ze("onargs","jqLite#on() does not support the `selector` or `eventData` parameters");if(ct(e)){var i=yt(e,!0),o=i.events,a=i.handle;a||(a=i.handle=function(e,t){var n=function(n,r){n.isDefaultPrevented=function(){return n.defaultPrevented};var i=t[r||n.type],o=i?i.length:0;if(o){if(M(n.immediatePropagationStopped)){var a=n.stopImmediatePropagation;n.stopImmediatePropagation=function(){n.immediatePropagationStopped=!0,n.stopPropagation&&n.stopPropagation(),a&&a.call(n)}}n.isImmediatePropagationStopped=function(){return!0===n.immediatePropagationStopped};var s=i.specialHandlerWrapper||It;o>1&&(i=qe(i));for(var l=0;l<o;l++)n.isImmediatePropagationStopped()||s(e,n,i[l])}};return n.elem=e,n}(e,o));for(var s=t.indexOf(" ")>=0?t.split(" "):[t],l=s.length,c=function(t,r,i){var s=o[t];s||((s=o[t]=[]).specialHandlerWrapper=r,"$destroy"===t||i||e.addEventListener(t,a)),s.push(n)};l--;)t=s[l],Xe[t]?(c(Xe[t],Nt),c(t,void 0,!0)):c(t)}},off:mt,one:function(e,t,n){(e=a(e)).on(t,(function r(){e.off(t,n),e.off(t,r)})),e.on(t,n)},replaceWith:function(e,t){var n,r=e.parentNode;ht(e),k(new ft(t),(function(t){n?r.insertBefore(t,n.nextSibling):r.replaceChild(t,e),n=t}))},children:function(e){var t=[];return k(e.childNodes,(function(e){1===e.nodeType&&t.push(e)})),t},contents:function(e){return e.contentDocument||e.childNodes||[]},append:function(e,t){var n=e.nodeType;if(1===n||11===n)for(var r=0,i=(t=new ft(t)).length;r<i;r++){var o=t[r];e.appendChild(o)}},prepend:function(e,t){if(1===e.nodeType){var n=e.firstChild;k(new ft(t),(function(t){e.insertBefore(t,n)}))}},wrap:function(e,t){var n,r,i;n=e,r=a(t).eq(0).clone()[0],(i=n.parentNode)&&i.replaceChild(r,n),r.appendChild(n)},remove:Ot,detach:function(e){Ot(e,!0)},after:function(e,t){var n=e,r=e.parentNode;if(r)for(var i=0,o=(t=new ft(t)).length;i<o;i++){var a=t[i];r.insertBefore(a,n.nextSibling),n=a}},addClass:At,removeClass:kt,toggleClass:function(e,t,n){t&&k(t.split(" "),(function(t){var r=n;M(r)&&(r=!wt(e,t)),(r?At:kt)(e,t)}))},parent:function(e){var t=e.parentNode;return t&&11!==t.nodeType?t:null},next:function(e){return e.nextElementSibling},find:function(e,t){return e.getElementsByTagName?e.getElementsByTagName(t):[]},clone:pt,triggerHandler:function(e,t,n){var r,i,o,a=t.type||t,s=yt(e),l=s&&s.events,c=l&&l[a];c&&(r={preventDefault:function(){this.defaultPrevented=!0},isDefaultPrevented:function(){return!0===this.defaultPrevented},stopImmediatePropagation:function(){this.immediatePropagationStopped=!0},isImmediatePropagationStopped:function(){return!0===this.immediatePropagationStopped},stopPropagation:D,type:a,target:e},t.type&&(r=O(r,t)),i=qe(c),o=n?[r].concat(n):[r],k(i,(function(t){r.isImmediatePropagationStopped()||t.apply(e,o)})))}},(function(e,t){ft.prototype[t]=function(t,n,r){for(var i,o=0,s=this.length;o<s;o++)M(i)?z(i=e(this[o],t,n,r))&&(i=a(i)):Et(i,e(this[o],t,n,r));return z(i)?i:this}})),ft.prototype.bind=ft.prototype.on,ft.prototype.unbind=ft.prototype.off;var Lt=Object.create(null);function Bt(){this._keys=[],this._values=[],this._lastKey=NaN,this._lastIndex=-1}Bt.prototype={_idx:function(e){return e!==this._lastKey&&(this._lastKey=e,this._lastIndex=this._keys.indexOf(e)),this._lastIndex},_transformKey:function(e){return j(e)?Lt:e},get:function(e){e=this._transformKey(e);var t=this._idx(e);if(-1!==t)return this._values[t]},has:function(e){return e=this._transformKey(e),-1!==this._idx(e)},set:function(e,t){e=this._transformKey(e);var n=this._idx(e);-1===n&&(n=this._lastIndex=this._keys.length),this._keys[n]=e,this._values[n]=t},delete:function(e){e=this._transformKey(e);var t=this._idx(e);return-1!==t&&(this._keys.splice(t,1),this._values.splice(t,1),this._lastKey=NaN,this._lastIndex=-1,!0)}};var Ft=Bt,qt=[function(){this.$get=[function(){return Ft}]}],Vt=/^([^(]+?)=>/,Ut=/^[^(]*\(\s*([^)]*)\)/m,Ht=/,/,Gt=/^\s*(_?)(\S+?)\1\s*$/,Wt=/((\/\/.*$)|(\/\*[\s\S]*?\*\/))/gm,Yt=i("$injector");function Xt(e){return Function.prototype.toString.call(e)}function Zt(e){var t=Xt(e).replace(Wt,"");return t.match(Vt)||t.match(Ut)}function Qt(e,t){t=!0===t;var n={},r=[],i=new Ft,a={$provide:{provider:p(h),factory:p(v),service:p((function(e,t){return v(e,["$injector",function(e){return e.instantiate(t)}])})),value:p((function(e,t){return v(e,I(t),!1)})),constant:p((function(e,t){Me(e,"constant"),a[e]=t,c[e]=t})),decorator:function(e,t){var n=s.get(e+"Provider"),r=n.$get;n.$get=function(){var e=d.invoke(r,n);return d.invoke(t,null,{$delegate:e})}}}},s=a.$injector=b(a,(function(e,t){throw y.isString(t)&&r.push(t),Yt("unpr","Unknown provider: {0}",r.join(" <- "))})),c={},u=b(c,(function(e,t){var n=s.get(e+"Provider",t);return d.invoke(n.$get,n,void 0,e)})),d=u;a.$injectorProvider={$get:I(u)},d.modules=s.modules=Le();var f=m(e);return(d=u.get("$injector")).strictDi=t,k(f,(function(e){e&&d.invoke(e)})),d.loadNewModules=function(e){k(m(e),(function(e){e&&d.invoke(e)}))},d;function p(e){return function(t,n){if(!L(t))return e(t,n);k(t,E(e))}}function h(e,t){if(Me(e,"service"),(G(t)||U(t))&&(t=s.instantiate(t)),!t.$get)throw Yt("pget","Provider '{0}' must define $get factory method.",e);return a[e+"Provider"]=t}function g(e,t){return function(){var n=d.invoke(t,this);if(M(n))throw Yt("undef","Provider '{0}' must return a value from $get factory method.",e);return n}}function v(e,t,n){return h(e,{$get:!1!==n?g(e,t):t})}function m(e){Ie(M(e)||U(e),"modulesToLoad","not an array");var t,n=[];return k(e,(function(e){if(!i.get(e)){i.set(e,!0);try{F(e)?(t=l(e),d.modules[e]=t,n=n.concat(m(t.requires)).concat(t._runBlocks),r(t._invokeQueue),r(t._configBlocks)):G(e)||U(e)?n.push(s.invoke(e)):Ne(e,"module")}catch(t){throw U(e)&&(e=e[e.length-1]),t.message&&t.stack&&-1===t.stack.indexOf(t.message)&&(t=t.message+"\n"+t.stack),Yt("modulerr","Failed to instantiate module {0} due to:\n{1}",e,t.stack||t.message||t)}}function r(e){var t,n;for(t=0,n=e.length;t<n;t++){var r=e[t],i=s.get(r[0]);i[r[1]].apply(i,r[2])}}})),n}function b(e,i){function s(t,o){if(e.hasOwnProperty(t)){if(e[t]===n)throw Yt("cdep","Circular dependency found: {0}",t+" <- "+r.join(" <- "));return e[t]}try{return r.unshift(t),e[t]=n,e[t]=i(t,o),e[t]}catch(r){throw e[t]===n&&delete e[t],r}finally{r.shift()}}function l(e,n,r){for(var i=[],o=Qt.$$annotate(e,t,r),a=0,l=o.length;a<l;a++){var c=o[a];if("string"!=typeof c)throw Yt("itkn","Incorrect injection token! Expected service name as string, got {0}",c);i.push(n&&n.hasOwnProperty(c)?n[c]:s(c,r))}return i}return{invoke:function(e,t,n,r){"string"==typeof n&&(r=n,n=null);var i=l(e,n,r);return U(e)&&(e=e[e.length-1]),function(e){if(o||"function"!=typeof e)return!1;var t=e.$$ngIsClass;return Z(t)||(t=e.$$ngIsClass=/^class\b/.test(Xt(e))),t}(e)?(i.unshift(null),new(Function.prototype.bind.apply(e,i))):e.apply(t,i)},instantiate:function(e,t,n){var r=U(e)?e[e.length-1]:e,i=l(e,t,n);return i.unshift(null),new(Function.prototype.bind.apply(r,i))},get:s,annotate:Qt.$$annotate,has:function(t){return a.hasOwnProperty(t+"Provider")||e.hasOwnProperty(t)}}}}function Jt(){var t=!0;this.disableAutoScrolling=function(){t=!1},this.$get=["$window","$location","$rootScope",function(n,r,i){var o=n.document;function s(e){if(e){e.scrollIntoView();var t=function(){var e=l.yOffset;if(G(e))e=e();else if(te(e)){var t=e[0];e="fixed"!==n.getComputedStyle(t).position?0:t.getBoundingClientRect().bottom}else q(e)||(e=0);return e}();if(t){var r=e.getBoundingClientRect().top;n.scrollBy(0,r-t)}}else n.scrollTo(0,0)}function l(e){var t,n,i;(e=F(e)?e:q(e)?e.toString():r.hash())?(t=o.getElementById(e))?s(t):(n=o.getElementsByName(e),i=null,Array.prototype.some.call(n,(function(e){if("a"===ne(e))return i=e,!0})),(t=i)?s(t):"top"===e&&s(null)):s(null)}return t&&i.$watch((function(){return r.hash()}),(function(t,n){var r,o;t===n&&""===t||(r=function(){i.$evalAsync(l)},"complete"===(o=o||e).document.readyState?o.setTimeout(r):a(o).on("load",r))})),l}]}Qt.$$annotate=function(e,t,n){var r,i;if("function"==typeof e){if(!(r=e.$inject)){if(r=[],e.length){if(t)throw F(n)&&n||(n=e.name||function(e){var t=Zt(e);return t?"function("+(t[1]||"").replace(/[\s\r\n]+/," ")+")":"fn"}(e)),Yt("strictdi","{0} is not using explicit annotation and cannot be invoked in strict mode",n);k(Zt(e)[1].split(Ht),(function(e){e.replace(Gt,(function(e,t,n){r.push(n)}))}))}e.$inject=r}}else U(e)?(Ne(e[i=e.length-1],"fn"),r=e.slice(0,i)):Ne(e,"fn",!0);return r};var Kt=i("$animate");function en(e,t){return e||t?e?t?(U(e)&&(e=e.join(" ")),U(t)&&(t=t.join(" ")),e+" "+t):e:t:""}function tn(e){return L(e)?e:{}}var nn=function(){this.$get=D},rn=function(){var e=new Ft,t=[];this.$get=["$$AnimateRunner","$rootScope",function(n,r){return{enabled:D,on:D,off:D,pin:D,push:function(a,s,l,c){c&&c(),(l=l||{}).from&&a.css(l.from),l.to&&a.css(l.to),(l.addClass||l.removeClass)&&function(n,a,s){var l=e.get(n)||{},c=i(l,a,!0),u=i(l,s,!1);(c||u)&&(e.set(n,l),t.push(n),1===t.length&&r.$$postDigest(o))}(a,l.addClass,l.removeClass);var u=new n;return u.complete(),u}};function i(e,t,n){var r=!1;return t&&k(t=F(t)?t.split(" "):U(t)?t:[],(function(t){t&&(r=!0,e[t]=n)})),r}function o(){k(t,(function(t){var n=e.get(t);if(n){var r=function(e){F(e)&&(e=e.split(" "));var t=Le();return k(e,(function(e){e.length&&(t[e]=!0)})),t}(t.attr("class")),i="",o="";k(n,(function(e,t){e!==!!r[t]&&(e?i+=(i.length?" ":"")+t:o+=(o.length?" ":"")+t)})),k(t,(function(e){i&&At(e,i),o&&kt(e,o)})),e.delete(t)}})),t.length=0}}]},on=["$provide",function(e){var t=this,n=null,r=null;this.$$registeredAnimations=Object.create(null),this.register=function(n,r){if(n&&"."!==n.charAt(0))throw Kt("notcsel","Expecting class selector starting with '.' got '{0}'.",n);var i=n+"-animation";t.$$registeredAnimations[n.substr(1)]=i,e.factory(i,r)},this.customFilter=function(e){return 1===arguments.length&&(r=G(e)?e:null),r},this.classNameFilter=function(e){if(1===arguments.length&&(n=e instanceof RegExp?e:null)){var t=new RegExp("[(\\s|\\/)]ng-animate[(\\s|\\/)]");if(t.test(n.toString()))throw n=null,Kt("nongcls",'$animateProvider.classNameFilter(regex) prohibits accepting a regex value which matches/contains the "{0}" CSS class.',"ng-animate")}return n},this.$get=["$$animateQueue",function(e){function t(e,t,n){if(n){var r=function(e){for(var t=0;t<e.length;t++){var n=e[t];if(1===n.nodeType)return n}}(n);!r||r.parentNode||r.previousElementSibling||(n=null)}n?n.after(e):t.prepend(e)}return{on:e.on,off:e.off,pin:e.pin,enabled:e.enabled,cancel:function(e){e.cancel&&e.cancel()},enter:function(n,r,i,o){return r=r&&a(r),i=i&&a(i),t(n,r=r||i.parent(),i),e.push(n,"enter",tn(o))},move:function(n,r,i,o){return r=r&&a(r),i=i&&a(i),t(n,r=r||i.parent(),i),e.push(n,"move",tn(o))},leave:function(t,n){return e.push(t,"leave",tn(n),(function(){t.remove()}))},addClass:function(t,n,r){return(r=tn(r)).addClass=en(r.addclass,n),e.push(t,"addClass",r)},removeClass:function(t,n,r){return(r=tn(r)).removeClass=en(r.removeClass,n),e.push(t,"removeClass",r)},setClass:function(t,n,r,i){return(i=tn(i)).addClass=en(i.addClass,n),i.removeClass=en(i.removeClass,r),e.push(t,"setClass",i)},animate:function(t,n,r,i,o){return(o=tn(o)).from=o.from?O(o.from,n):n,o.to=o.to?O(o.to,r):r,i=i||"ng-inline-animate",o.tempClasses=en(o.tempClasses,i),e.push(t,"animate",o)}}}]}],an=function(){this.$get=["$$rAF",function(e){var t=[];function n(n){t.push(n),t.length>1||e((function(){for(var e=0;e<t.length;e++)t[e]();t=[]}))}return function(){var e=!1;return n((function(){e=!0})),function(t){e?t():n(t)}}}]},sn=function(){this.$get=["$q","$sniffer","$$animateAsyncRun","$$isDocumentHidden","$timeout",function(e,t,n,r,i){function o(e){this.setHost(e);var t=n();this._doneCallbacks=[],this._tick=function(e){r()?function(e){i(e,0,!1)}(e):t(e)},this._state=0}return o.chain=function(e,t){var n=0;!function r(){if(n===e.length)return void t(!0);e[n]((function(e){!1!==e?(n++,r()):t(!1)}))}()},o.all=function(e,t){var n=0,r=!0;function i(i){r=r&&i,++n===e.length&&t(r)}k(e,(function(e){e.done(i)}))},o.prototype={setHost:function(e){this.host=e||{}},done:function(e){2===this._state?e():this._doneCallbacks.push(e)},progress:D,getPromise:function(){if(!this.promise){var t=this;this.promise=e((function(e,n){t.done((function(t){!1===t?n():e()}))}))}return this.promise},then:function(e,t){return this.getPromise().then(e,t)},catch:function(e){return this.getPromise().catch(e)},finally:function(e){return this.getPromise().finally(e)},pause:function(){this.host.pause&&this.host.pause()},resume:function(){this.host.resume&&this.host.resume()},end:function(){this.host.end&&this.host.end(),this._resolve(!0)},cancel:function(){this.host.cancel&&this.host.cancel(),this._resolve(!1)},complete:function(e){var t=this;0===t._state&&(t._state=1,t._tick((function(){t._resolve(e)})))},_resolve:function(e){2!==this._state&&(k(this._doneCallbacks,(function(t){t(e)})),this._doneCallbacks.length=0,this._state=2)}},o}]},ln=function(){this.$get=["$$rAF","$q","$$AnimateRunner",function(e,t,n){return function(t,r){var i=r||{};i.$$prepared||(i=oe(i)),i.cleanupStyles&&(i.from=i.to=null),i.from&&(t.css(i.from),i.from=null);var o,a=new n;return{start:s,end:s};function s(){return e((function(){!function(){i.addClass&&(t.addClass(i.addClass),i.addClass=null);i.removeClass&&(t.removeClass(i.removeClass),i.removeClass=null);i.to&&(t.css(i.to),i.to=null)}(),o||a.complete(),o=!0})),a}}}]};function cn(e,t,n,r,i){var o=this,s=e.location,l=e.history,c=e.setTimeout,u=e.clearTimeout,d={},f=i(n);o.isMock=!1,o.$$completeOutstandingRequest=f.completeTask,o.$$incOutstandingRequestCount=f.incTaskCount,o.notifyWhenNoOutstandingRequests=f.notifyWhenNoPendingTasks;var p,h,g=s.href,v=t.find("base"),m=null,b=r.history?function(){try{return l.state}catch(e){}}:D;E(),o.url=function(t,n,i){if(M(i)&&(i=null),s!==e.location&&(s=e.location),l!==e.history&&(l=e.history),t){var a=h===i;if(t=li(t).href,g===t&&(!r.history||a))return o;var c=g&&sr(g)===sr(t);return g=t,h=i,!r.history||c&&a?(c||(m=t),n?s.replace(t):c?s.hash=function(e){var t=e.indexOf("#");return-1===t?"":e.substr(t)}(t):s.href=t,s.href!==t&&(m=t)):(l[n?"replaceState":"pushState"](i,"",t),E()),m&&(m=t),o}return function(e){return e.replace(/#$/,"")}(m||s.href)},o.state=function(){return p};var y=[],x=!1;function w(){m=null,S()}var A=null;function E(){se(p=M(p=b())?null:p,A)&&(p=A),A=p,h=p}function S(){var e=h;E(),g===o.url()&&e===p||(g=o.url(),h=p,k(y,(function(e){e(o.url(),p)})))}o.onUrlChange=function(t){return x||(r.history&&a(e).on("popstate",w),a(e).on("hashchange",w),x=!0),y.push(t),t},o.$$applicationDestroyed=function(){a(e).off("hashchange popstate",w)},o.$$checkUrlChange=S,o.baseHref=function(){var e=v.attr("href");return e?e.replace(/^(https?:)?\/\/[^/]*/,""):""},o.defer=function(e,t,n){var r;return t=t||0,n=n||f.DEFAULT_TASK_TYPE,f.incTaskCount(n),r=c((function(){delete d[r],f.completeTask(e,n)}),t),d[r]=n,r},o.defer.cancel=function(e){if(d.hasOwnProperty(e)){var t=d[e];return delete d[e],u(e),f.completeTask(D,t),!0}return!1}}function un(){this.$get=["$window","$log","$sniffer","$document","$$taskTrackerFactory",function(e,t,n,r,i){return new cn(e,r,t,n,i)}]}function dn(){this.$get=function(){var e={};function t(t,n){if(t in e)throw i("$cacheFactory")("iid","CacheId '{0}' is already taken!",t);var r=0,o=O({},n,{id:t}),a=Le(),s=n&&n.capacity||Number.MAX_VALUE,l=Le(),c=null,u=null;return e[t]={put:function(e,t){if(!M(t)){if(s<Number.MAX_VALUE)d(l[e]||(l[e]={key:e}));return e in a||r++,a[e]=t,r>s&&this.remove(u.key),t}},get:function(e){if(s<Number.MAX_VALUE){var t=l[e];if(!t)return;d(t)}return a[e]},remove:function(e){if(s<Number.MAX_VALUE){var t=l[e];if(!t)return;t===c&&(c=t.p),t===u&&(u=t.n),f(t.n,t.p),delete l[e]}e in a&&(delete a[e],r--)},removeAll:function(){a=Le(),r=0,l=Le(),c=u=null},destroy:function(){a=null,o=null,l=null,delete e[t]},info:function(){return O({},o,{size:r})}};function d(e){e!==c&&(u?u===e&&(u=e.n):u=e,f(e.n,e.p),f(e,c),(c=e).n=null)}function f(e,t){e!==t&&(e&&(e.p=t),t&&(t.n=e))}}return t.info=function(){var t={};return k(e,(function(e,n){t[n]=e.info()})),t},t.get=function(t){return e[t]},t}}function fn(){this.$get=["$cacheFactory",function(e){return e("templates")}]}var pn=i("$compile");var hn=new function(){};function gn(t,n){var r={},i=/^\s*directive:\s*([\w-]+)\s+(.*)$/,s=/(([\w-]+)(?::([^;]+))?;?)/,l=function(e){var t,n={},r=e.split(",");for(t=0;t<r.length;t++)n[r[t]]=!0;return n}("ngSrc,ngSrcset,src,srcset"),c=/^(?:(\^\^?)?(\?)?(\^\^?)?)?/,f=/^(on[a-z]+|formaction)$/,p=Le();function h(e,t,n){var r=/^([@&]|[=<](\*?))(\??)\s*([\w$]*)$/,i=Le();return k(e,(function(e,o){if((e=e.trim())in p)i[o]=p[e];else{var a=e.match(r);if(!a)throw pn("iscp","Invalid {3} for directive '{0}'. Definition: {... {1}: '{2}' ...}",t,o,e,n?"controller bindings definition":"isolate scope definition");i[o]={mode:a[1][0],collection:"*"===a[2],optional:"?"===a[3],attrName:a[4]||o},a[4]&&(p[e]=i[o])}})),i}function g(e,t){var n={isolateScope:null,bindToController:null};if(L(e.scope)&&(!0===e.bindToController?(n.bindToController=h(e.scope,t,!0),n.isolateScope={}):n.isolateScope=h(e.scope,t,!1)),L(e.bindToController)&&(n.bindToController=h(e.bindToController,t,!0)),n.bindToController&&!e.controller)throw pn("noctrl","Cannot bind to controller without directive '{0}'s controller.",t);return n}this.directive=function e(n,i){return Ie(n,"name"),Me(n,"directive"),F(n)?(!function(e){var t=e.charAt(0);if(!t||t!==d(t))throw pn("baddir","Directive/Component name '{0}' is invalid. The first character must be a lowercase letter",e);if(e!==e.trim())throw pn("baddir","Directive/Component name '{0}' is invalid. The name should not contain leading or trailing whitespaces",e)}(n),Ie(i,"directiveFactory"),r.hasOwnProperty(n)||(r[n]=[],t.factory(n+"Directive",["$injector","$exceptionHandler",function(e,t){var i=[];return k(r[n],(function(r,o){try{var a=e.invoke(r);G(a)?a={compile:I(a)}:!a.compile&&a.link&&(a.compile=I(a.link)),a.priority=a.priority||0,a.index=o,a.name=a.name||n,a.require=function(e){var t=e.require||e.controller&&e.name;return!U(t)&&L(t)&&k(t,(function(e,n){var r=e.match(c);e.substring(r[0].length)||(t[n]=r[0]+n)})),t}(a),a.restrict=function(e,t){if(e&&(!F(e)||!/[EACM]/.test(e)))throw pn("badrestrict","Restrict property '{0}' of directive '{1}' is invalid",e,t);return e||"EA"}(a.restrict,n),a.$$moduleName=r.$$moduleName,i.push(a)}catch(e){t(e)}})),i}])),r[n].push(i)):k(n,E(e)),this},this.component=function e(t,n){if(!F(t))return k(t,E(fe(this,e))),this;var r=n.controller||function(){};function i(e){function t(t){return G(t)||U(t)?function(n,r){return e.invoke(t,this,{$element:n,$attrs:r})}:t}var i=n.template||n.templateUrl?n.template:"",o={controller:r,controllerAs:En(n.controller)||n.controllerAs||"$ctrl",template:t(i),templateUrl:t(n.templateUrl),transclude:n.transclude,scope:{},bindToController:n.bindings||{},restrict:"E",require:n.require};return k(n,(function(e,t){"$"===t.charAt(0)&&(o[t]=e)})),o}return k(n,(function(e,t){"$"===t.charAt(0)&&(i[t]=e,G(r)&&(r[t]=e))})),i.$inject=["$injector"],this.directive(t,i)},this.aHrefSanitizationTrustedUrlList=function(e){return z(e)?(n.aHrefSanitizationTrustedUrlList(e),this):n.aHrefSanitizationTrustedUrlList()},Object.defineProperty(this,"aHrefSanitizationWhitelist",{get:function(){return this.aHrefSanitizationTrustedUrlList},set:function(e){this.aHrefSanitizationTrustedUrlList=e}}),this.imgSrcSanitizationTrustedUrlList=function(e){return z(e)?(n.imgSrcSanitizationTrustedUrlList(e),this):n.imgSrcSanitizationTrustedUrlList()},Object.defineProperty(this,"imgSrcSanitizationWhitelist",{get:function(){return this.imgSrcSanitizationTrustedUrlList},set:function(e){this.imgSrcSanitizationTrustedUrlList=e}});var m=!0;this.debugInfoEnabled=function(e){return z(e)?(m=e,this):m};var b=!1;this.strictComponentBindingsEnabled=function(e){return z(e)?(b=e,this):b};var y=10;this.onChangesTtl=function(e){return arguments.length?(y=e,this):y};var x=!0;this.commentDirectivesEnabled=function(e){return arguments.length?(x=e,this):x};var w=!0;this.cssClassDirectivesEnabled=function(e){return arguments.length?(w=e,this):w};var A=Le();this.addPropertySecurityContext=function(e,t,n){var r=e.toLowerCase()+"|"+t.toLowerCase();if(r in A&&A[r]!==n)throw pn("ctxoverride","Property context '{0}.{1}' already set to '{2}', cannot override to '{3}'.",e,t,A[r],n);return A[r]=n,this},function(){function e(e,t){k(t,(function(t){A[t.toLowerCase()]=e}))}e(Ur.HTML,["iframe|srcdoc","*|innerHTML","*|outerHTML"]),e(Ur.CSS,["*|style"]),e(Ur.URL,["area|href","area|ping","a|href","a|ping","blockquote|cite","body|background","del|cite","input|src","ins|cite","q|cite"]),e(Ur.MEDIA_URL,["audio|src","img|src","img|srcset","source|src","source|srcset","track|src","video|src","video|poster"]),e(Ur.RESOURCE_URL,["*|formAction","applet|code","applet|codebase","base|href","embed|src","frame|src","form|action","head|profile","html|manifest","iframe|src","link|href","media|src","object|codebase","object|data","script|src"])}(),this.$get=["$injector","$interpolate","$exceptionHandler","$templateRequest","$parse","$controller","$rootScope","$sce","$animate",function(t,n,p,h,E,S,C,$,_){var T,j=/^\w/,I=e.document.createElement("div"),N=x,z=w,B=y;function q(){try{if(!--B)throw T=void 0,pn("infchng","{0} $onChanges() iterations reached. Aborting!\n",y);C.$apply((function(){for(var e=0,t=T.length;e<t;++e)try{T[e]()}catch(e){p(e)}T=void 0}))}finally{B++}}function V(e,t){if(!e)return e;if(!F(e))throw pn("srcset",'Can\'t pass trusted values to `{0}`: "{1}"',t,e.toString());for(var n="",r=K(e),i=/\s/.test(r)?/(\s+\d+x\s*,|\s+\d+w\s*,|\s+,|,\s+)/:/(,)/,o=r.split(i),a=Math.floor(o.length/2),s=0;s<a;s++){var l=2*s;n+=$.getTrustedMediaUrl(K(o[l])),n+=" "+K(o[l+1])}var c=K(o[2*s]).split(/\s/);return n+=$.getTrustedMediaUrl(K(c[0])),2===c.length&&(n+=" "+K(c[1])),n}function W(e,t){if(t){var n,r,i,o=Object.keys(t);for(n=0,r=o.length;n<r;n++)this[i=o[n]]=t[i]}else this.$attr={};this.$$element=e}function Y(e,t){try{e.addClass(t)}catch(e){}}W.prototype={$normalize:yn,$addClass:function(e){e&&e.length>0&&_.addClass(this.$$element,e)},$removeClass:function(e){e&&e.length>0&&_.removeClass(this.$$element,e)},$updateClass:function(e,t){var n=xn(e,t);n&&n.length&&_.addClass(this.$$element,n);var r=xn(t,e);r&&r.length&&_.removeClass(this.$$element,r)},$set:function(e,t,n,r){var i=Rt(this.$$element[0],e),o=Dt[e],a=e;i?(this.$$element.prop(e,t),r=i):o&&(this[o]=t,a=o),this[e]=t,r?this.$attr[e]=r:(r=this.$attr[e])||(this.$attr[e]=r=Pe(e,"-")),"img"===ne(this.$$element)&&"srcset"===e&&(this[e]=t=V(t,"$set('srcset', value)")),!1!==n&&(null===t||M(t)?this.$$element.removeAttr(r):j.test(r)?i&&!1===t?this.$$element.removeAttr(r):this.$$element.attr(r,t):function(e,t,n){I.innerHTML="<span "+t+">";var r=I.firstChild.attributes,i=r[0];r.removeNamedItem(i.name),i.value=n,e.attributes.setNamedItem(i)}(this.$$element[0],r,t));var s=this.$$observers;s&&k(s[a],(function(e){try{e(t)}catch(e){p(e)}}))},$observe:function(e,t){var n=this,r=n.$$observers||(n.$$observers=Le()),i=r[e]||(r[e]=[]);return i.push(t),C.$evalAsync((function(){i.$$inter||!n.hasOwnProperty(e)||M(n[e])||t(n[e])})),function(){ie(i,t)}}};var Q=n.startSymbol(),J=n.endSymbol(),ee="{{"===Q&&"}}"===J?R:function(e){return e.replace(/\{\{/g,Q).replace(/}}/g,J)},te=/^ng(Attr|Prop|On)([A-Z].*)$/,re=/^(.+)Start$/;return oe.$$addBindingInfo=m?function(e,t){var n=e.data("$binding")||[];U(t)?n=n.concat(t):n.push(t),e.data("$binding",n)}:D,oe.$$addBindingClass=m?function(e){Y(e,"ng-binding")}:D,oe.$$addScopeInfo=m?function(e,t,n,r){var i=n?r?"$isolateScopeNoTemplate":"$isolateScope":"$scope";e.data(i,t)}:D,oe.$$addScopeClass=m?function(e,t){Y(e,t?"ng-isolate-scope":"ng-scope")}:D,oe.$$createComment=function(t,n){var r="";return m&&(r=" "+(t||"")+": ",n&&(r+=n+" ")),e.document.createComment(r)},oe;function oe(e,t,n,r,i){e instanceof a||(e=a(e));var o=le(e,t,e,n,r,i);oe.$$addScopeClass(e);var s=null;return function(t,n,r){if(!e)throw pn("multilink","This element has already been linked.");Ie(t,"scope"),i&&i.needsNewScope&&(t=t.$parent.$new());var l,c,u,d=(r=r||{}).parentBoundTranscludeFn,f=r.transcludeControllers,p=r.futureParentElement;if(d&&d.$$boundTransclude&&(d=d.$$boundTransclude),s||(c=(l=p)&&l[0],s=c&&"foreignobject"!==ne(c)&&v.call(c).match(/SVG/)?"svg":"html"),u="html"!==s?a($e(s,a("<div></div>").append(e).html())):n?Tt.clone.call(e):e,f)for(var h in f)u.data("$"+h+"Controller",f[h].instance);return oe.$$addScopeInfo(u,t),n&&n(u,t),o&&o(t,u,u,d),n||(e=o=null),u}}function le(e,t,n,r,i,s){for(var l,c,u,d,f,p,h,g=[],v=U(e)||e instanceof a,m=0;m<e.length;m++)l=new W,11===o&&ce(e,m,v),(u=(c=pe(e[m],[],l,0===m?r:void 0,i)).length?me(c,e[m],l,t,n,null,[],[],s):null)&&u.scope&&oe.$$addScopeClass(l.$$element),f=u&&u.terminal||!(d=e[m].childNodes)||!d.length?null:le(d,u?(u.transcludeOnThisElement||!u.templateOnThisElement)&&u.transclude:t),(u||f)&&(g.push(m,u,f),p=!0,h=h||u),s=null;return p?function(e,n,r,i){var o,s,l,c,u,d,f,p,v;if(h){var m=n.length;for(v=new Array(m),u=0;u<g.length;u+=3)f=g[u],v[f]=n[f]}else v=n;for(u=0,d=g.length;u<d;)l=v[g[u++]],o=g[u++],s=g[u++],o?(o.scope?(c=e.$new(),oe.$$addScopeInfo(a(l),c)):c=e,p=o.transcludeOnThisElement?ue(e,o.transclude,i):!o.templateOnThisElement&&i?i:!i&&t?ue(e,t):null,o(s,c,l,r,p)):s&&s(e,l.childNodes,void 0,i)}:null}function ce(e,t,n){var r,i=e[t],o=i.parentNode;if(i.nodeType===Fe)for(;(r=o?i.nextSibling:e[t+1])&&r.nodeType===Fe;)i.nodeValue=i.nodeValue+r.nodeValue,r.parentNode&&r.parentNode.removeChild(r),n&&r===e[t+1]&&e.splice(t+1,1)}function ue(e,t,n){function r(r,i,o,a,s){return r||((r=e.$new(!1,s)).$$transcluded=!0),t(r,i,{parentBoundTranscludeFn:n,transcludeControllers:o,futureParentElement:a})}var i=r.$$slots=Le();for(var o in t.$$slots)t.$$slots[o]?i[o]=ue(e,t.$$slots[o],n):i[o]=null;return r}function pe(e,t,r,o,a){var l,c,u,d=e.nodeType,f=r.$attr;switch(d){case 1:we(t,yn(c=ne(e)),"E",o,a);for(var p,h,g,v,m,b=e.attributes,y=0,x=b&&b.length;y<x;y++){var w,k=!1,A=!1,E=!1,S=!1,C=!1;h=(p=b[y]).name,v=p.value,(m=(g=yn(h.toLowerCase())).match(te))?(E="Attr"===m[1],S="Prop"===m[1],C="On"===m[1],h=h.replace(mn,"").toLowerCase().substr(4+m[1].length).replace(/_(.)/g,(function(e,t){return t.toUpperCase()}))):(w=g.match(re))&&ke(w[1])&&(k=h,A=h.substr(0,h.length-5)+"end",h=h.substr(0,h.length-6)),S||C?(r[g]=v,f[g]=p.name,S?_e(e,t,g,h):Te(t,g,h)):(f[g=yn(h.toLowerCase())]=h,!E&&r.hasOwnProperty(g)||(r[g]=v,Rt(e,g)&&(r[g]=!0)),je(e,t,v,g,E),we(t,g,"A",o,a,k,A))}if("input"===c&&"hidden"===e.getAttribute("type")&&e.setAttribute("autocomplete","off"),!z)break;if(L(u=e.className)&&(u=u.animVal),F(u)&&""!==u)for(;l=s.exec(u);)we(t,g=yn(l[2]),"C",o,a)&&(r[g]=K(l[3])),u=u.substr(l.index+l[0].length);break;case Fe:!function(e,t){var r=n(t,!0);r&&e.push({priority:0,compile:function(e){var t=e.parent(),n=!!t.length;return n&&oe.$$addBindingClass(t),function(e,t){var i=t.parent();n||oe.$$addBindingClass(i),oe.$$addBindingInfo(i,r.expressions),e.$watch(r,(function(e){t[0].nodeValue=e}))}}})}(t,e.nodeValue);break;case 8:if(!N)break;!function(e,t,n,r,o){try{var a=i.exec(e.nodeValue);if(a){var s=yn(a[1]);we(t,s,"M",r,o)&&(n[s]=K(a[2]))}}catch(e){}}(e,t,r,o,a)}return t.sort(Se),t}function he(e,t,n){var r=[],i=0;if(t&&e.hasAttribute&&e.hasAttribute(t))do{if(!e)throw pn("uterdir","Unterminated attribute, found '{0}' but no matching '{1}' found.",t,n);1===e.nodeType&&(e.hasAttribute(t)&&i++,e.hasAttribute(n)&&i--),r.push(e),e=e.nextSibling}while(i>0);else r.push(e);return a(r)}function ge(e,t,n){return function(r,i,o,a,s){return i=he(i[0],t,n),e(r,i,o,a,s)}}function ve(e,t,n,r,i,o){var a;return e?oe(t,n,r,i,o):function(){return a||(a=oe(t,n,r,i,o),t=n=o=null),a.apply(this,arguments)}}function me(t,n,r,i,o,s,l,c,u){u=u||{};for(var d,f,h,g,v,m=-Number.MAX_VALUE,b=u.newScopeDirective,y=u.controllerDirectives,x=u.newIsolateScopeDirective,w=u.templateDirective,A=u.nonTlbTranscludeDirective,E=!1,C=!1,$=u.hasElementTranscludeDirective,_=r.$$element=a(n),T=s,j=i,P=!1,D=!1,R=0,I=t.length;R<I;R++){var N=(d=t[R]).$$start,z=d.$$end;if(N&&(_=he(n,N,z)),h=void 0,m>d.priority)break;if((v=d.scope)&&(d.templateUrl||(L(v)?(Ce("new/isolated scope",x||b,d,_),x=d):Ce("new/isolated scope",x,d,_)),b=b||d),f=d.name,!P&&(d.replace&&(d.templateUrl||d.template)||d.transclude&&!d.$$tlb)){for(var B,F=R+1;B=t[F++];)if(B.transclude&&!B.$$tlb||B.replace&&(B.templateUrl||B.template)){D=!0;break}P=!0}if(!d.templateUrl&&d.controller&&(y=y||Le(),Ce("'"+f+"' controller",y[f],d,_),y[f]=d),v=d.transclude)if(E=!0,d.$$tlb||(Ce("transclusion",A,d,_),A=d),"element"===v)$=!0,m=d.priority,h=_,_=r.$$element=a(oe.$$createComment(f,r[f])),n=_[0],De(o,de(h),n),j=ve(D,h,i,m,T&&T.name,{nonTlbTranscludeDirective:A});else{var q=Le();if(L(v)){h=e.document.createDocumentFragment();var V=Le(),H=Le();for(var Y in k(v,(function(e,t){var n="?"===e.charAt(0);e=n?e.substring(1):e,V[e]=t,q[t]=null,H[t]=n})),k(_.contents(),(function(t){var n=V[yn(ne(t))];n?(H[n]=!0,q[n]=q[n]||e.document.createDocumentFragment(),q[n].appendChild(t)):h.appendChild(t)})),k(H,(function(e,t){if(!e)throw pn("reqslot","Required transclusion slot `{0}` was not filled.",t)})),q)if(q[Y]){var Z=a(q[Y].childNodes);q[Y]=ve(D,Z,i)}h=a(h.childNodes)}else h=a(pt(n)).contents();_.empty(),(j=ve(D,h,i,void 0,void 0,{needsNewScope:d.$$isolateScope||d.$$newScope})).$$slots=q}if(d.template)if(C=!0,Ce("template",w,d,_),w=d,v=G(d.template)?d.template(_,r):d.template,v=ee(v),d.replace){if(T=d,h=lt(v)?[]:wn($e(d.templateNamespace,K(v))),n=h[0],1!==h.length||1!==n.nodeType)throw pn("tplrt","Template for directive '{0}' must have exactly one root element. {1}",f,"");De(o,_,n);var Q={$attr:{}},J=pe(n,[],Q),te=t.splice(R+1,t.length-(R+1));(x||b)&&ye(J,x,b),t=t.concat(J).concat(te),Ae(r,Q),I=t.length}else _.html(v);if(d.templateUrl)C=!0,Ce("template",w,d,_),w=d,d.replace&&(T=d),ae=Ee(t.splice(R,t.length-R),_,r,o,E&&j,l,c,{controllerDirectives:y,newScopeDirective:b!==d&&b,newIsolateScopeDirective:x,templateDirective:w,nonTlbTranscludeDirective:A}),I=t.length;else if(d.compile)try{g=d.compile(_,r,j);var re=d.$$originalDirective||d;G(g)?ie(null,fe(re,g),N,z):g&&ie(fe(re,g.pre),fe(re,g.post),N,z)}catch(e){p(e,xe(_))}d.terminal&&(ae.terminal=!0,m=Math.max(m,d.priority))}return ae.scope=b&&!0===b.scope,ae.transcludeOnThisElement=E,ae.templateOnThisElement=C,ae.transclude=j,u.hasElementTranscludeDirective=$,ae;function ie(e,t,n,r){e&&(n&&(e=ge(e,n,r)),e.require=d.require,e.directiveName=f,(x===d||d.$$isolateScope)&&(e=Re(e,{isolateScope:!0})),l.push(e)),t&&(n&&(t=ge(t,n,r)),t.require=d.require,t.directiveName=f,(x===d||d.$$isolateScope)&&(t=Re(t,{isolateScope:!0})),c.push(t))}function ae(e,t,i,o,s){var u,d,f,h,g,v,m,A,E,C;for(var _ in n===i?(E=r,A=r.$$element):E=new W(A=a(i),r),g=t,x?h=t.$new(!0):b&&(g=t.$parent),s&&((m=function(e,t,n,r){var i;X(e)||(r=n,n=t,t=e,e=void 0);$&&(i=v);n||(n=$?A.parent():A);if(!r)return s(e,t,i,n,D);var o=s.$$slots[r];if(o)return o(e,t,i,n,D);if(M(o))throw pn("noslot",'No parent directive that requires a transclusion with slot name "{0}". Element: {1}',r,xe(A))}).$$boundTransclude=s,m.isSlotFilled=function(e){return!!s.$$slots[e]}),y&&(v=function(e,t,n,r,i,o,a){var s=Le();for(var l in r){var c=r[l],u={$scope:c===a||c.$$isolateScope?i:o,$element:e,$attrs:t,$transclude:n},d=c.controller;"@"===d&&(d=t[c.name]);var f=S(d,u,!0,c.controllerAs);s[c.name]=f,e.data("$"+c.name+"Controller",f.instance)}return s}(A,E,m,y,h,t,x)),x&&(oe.$$addScopeInfo(A,h,!0,!(w&&(w===x||w===x.$$originalDirective))),oe.$$addScopeClass(A,!0),h.$$isolateBindings=x.$$isolateBindings,(C=ze(t,E,h,h.$$isolateBindings,x)).removeWatches&&h.$on("$destroy",C.removeWatches)),v){var T=y[_],j=v[_],P=T.$$bindings.bindToController;j.instance=j(),A.data("$"+T.name+"Controller",j.instance),j.bindingInfo=ze(g,E,j.instance,P,T)}for(k(y,(function(e,t){var n=e.require;e.bindToController&&!U(n)&&L(n)&&O(v[t].instance,be(t,n,A,v))})),k(v,(function(e){var t=e.instance;if(G(t.$onChanges))try{t.$onChanges(e.bindingInfo.initialChanges)}catch(e){p(e)}if(G(t.$onInit))try{t.$onInit()}catch(e){p(e)}G(t.$doCheck)&&(g.$watch((function(){t.$doCheck()})),t.$doCheck()),G(t.$onDestroy)&&g.$on("$destroy",(function(){t.$onDestroy()}))})),u=0,d=l.length;u<d;u++)Ne(f=l[u],f.isolateScope?h:t,A,E,f.require&&be(f.directiveName,f.require,A,v),m);var D=t;for(x&&(x.template||null===x.templateUrl)&&(D=h),e&&e(D,i.childNodes,void 0,s),u=c.length-1;u>=0;u--)Ne(f=c[u],f.isolateScope?h:t,A,E,f.require&&be(f.directiveName,f.require,A,v),m);k(v,(function(e){var t=e.instance;G(t.$postLink)&&t.$postLink()}))}}function be(e,t,n,r){var i;if(F(t)){var o=t.match(c),a=t.substring(o[0].length),s=o[1]||o[3],l="?"===o[2];if("^^"===s?n=n.parent():i=(i=r&&r[a])&&i.instance,!i){var u="$"+a+"Controller";i="^^"===s&&n[0]&&9===n[0].nodeType?null:s?n.inheritedData(u):n.data(u)}if(!i&&!l)throw pn("ctreq","Controller '{0}', required by directive '{1}', can't be found!",a,e)}else if(U(t)){i=[];for(var d=0,f=t.length;d<f;d++)i[d]=be(e,t[d],n,r)}else L(t)&&(i={},k(t,(function(t,o){i[o]=be(e,t,n,r)})));return i||null}function ye(e,t,n){for(var r=0,i=e.length;r<i;r++)e[r]=P(e[r],{$$isolateScope:t,$$newScope:n})}function we(e,n,i,o,a,s,l){if(n===a)return null;var c=null;if(r.hasOwnProperty(n))for(var u,d=t.get(n+"Directive"),f=0,p=d.length;f<p;f++)if(u=d[f],(M(o)||o>u.priority)&&-1!==u.restrict.indexOf(i)){if(s&&(u=P(u,{$$start:s,$$end:l})),!u.$$bindings){var h=u.$$bindings=g(u,u.name);L(h.isolateScope)&&(u.$$isolateBindings=h.isolateScope)}e.push(u),c=u}return c}function ke(e){if(r.hasOwnProperty(e))for(var n=t.get(e+"Directive"),i=0,o=n.length;i<o;i++)if(n[i].multiElement)return!0;return!1}function Ae(e,t){var n=t.$attr,r=e.$attr;k(e,(function(r,i){"$"!==i.charAt(0)&&(t[i]&&t[i]!==r&&(r.length?r+=("style"===i?";":" ")+t[i]:r=t[i]),e.$set(i,r,!0,n[i]))})),k(t,(function(t,i){e.hasOwnProperty(i)||"$"===i.charAt(0)||(e[i]=t,"class"!==i&&"style"!==i&&(r[i]=n[i]))}))}function Ee(e,t,n,r,i,o,s,l){var c,u,d=[],f=t[0],g=e.shift(),v=P(g,{templateUrl:null,transclude:null,replace:null,$$originalDirective:g}),m=G(g.templateUrl)?g.templateUrl(t,n):g.templateUrl,b=g.templateNamespace;return t.empty(),h(m).then((function(p){var h,y,x,w;if(p=ee(p),g.replace){if(x=lt(p)?[]:wn($e(b,K(p))),h=x[0],1!==x.length||1!==h.nodeType)throw pn("tplrt","Template for directive '{0}' must have exactly one root element. {1}",g.name,m);y={$attr:{}},De(r,t,h);var A=pe(h,[],y);L(g.scope)&&ye(A,!0),e=A.concat(e),Ae(n,y)}else h=f,t.html(p);for(e.unshift(v),c=me(e,h,n,i,t,g,o,s,l),k(r,(function(e,n){e===h&&(r[n]=t[0])})),u=le(t[0].childNodes,i);d.length;){var E=d.shift(),S=d.shift(),C=d.shift(),$=d.shift(),O=t[0];if(!E.$$destroyed){if(S!==f){var _=S.className;l.hasElementTranscludeDirective&&g.replace||(O=pt(h)),De(C,a(S),O),Y(a(O),_)}w=c.transcludeOnThisElement?ue(E,c.transclude,$):$,c(u,E,O,r,w)}}d=null})).catch((function(e){H(e)&&p(e)})),function(e,t,n,r,i){var o=i;t.$$destroyed||(d?d.push(t,n,r,o):(c.transcludeOnThisElement&&(o=ue(t,c.transclude,i)),c(u,t,n,r,o)))}}function Se(e,t){var n=t.priority-e.priority;return 0!==n?n:e.name!==t.name?e.name<t.name?-1:1:e.index-t.index}function Ce(e,t,n,r){function i(e){return e?" (module: "+e+")":""}if(t)throw pn("multidir","Multiple directives [{0}{1}, {2}{3}] asking for {4} on: {5}",t.name,i(t.$$moduleName),n.name,i(n.$$moduleName),e,xe(r))}function $e(t,n){switch(t=d(t||"html")){case"svg":case"math":var r=e.document.createElement("div");return r.innerHTML="<"+t+">"+n+"</"+t+">",r.childNodes[0].childNodes;default:return n}}function Oe(e){return V($.valueOf(e),"ng-prop-srcset")}function _e(e,t,n,r){if(f.test(r))throw pn("nodomevents","Property bindings for HTML DOM event properties are disallowed");var i=ne(e),o=function(e,t){var n=t.toLowerCase();return A[e+"|"+n]||A["*|"+n]}(i,r),a=R;"srcset"!==r||"img"!==i&&"source"!==i?o&&(a=$.getTrusted.bind($,o)):a=Oe,t.push({priority:100,compile:function(e,t){var i=E(t[n]),o=E(t[n],(function(e){return $.valueOf(e)}));return{pre:function(e,t){function n(){var n=i(e);t[0][r]=a(n)}n(),e.$watch(o,n)}}}})}function Te(e,t,n){e.push(Po(E,C,p,t,n,!1))}function je(e,t,r,i,o){var a=ne(e),s=function(e,t){return"srcdoc"===t?$.HTML:"src"===t||"ngSrc"===t?-1===["img","video","audio","source","track"].indexOf(e)?$.RESOURCE_URL:$.MEDIA_URL:"xlinkHref"===t?"image"===e?$.MEDIA_URL:"a"===e?$.URL:$.RESOURCE_URL:"form"===e&&"action"===t||"base"===e&&"href"===t||"link"===e&&"href"===t?$.RESOURCE_URL:"a"!==e||"href"!==t&&"ngHref"!==t?void 0:$.URL}(a,i),c=!o,u=l[i]||o,d=n(r,c,s,u);if(d){if("multiple"===i&&"select"===a)throw pn("selmulti","Binding to the 'multiple' attribute is not supported. Element: {0}",xe(e));if(f.test(i))throw pn("nodomevents","Interpolations for HTML DOM event attributes are disallowed");t.push({priority:100,compile:function(){return{pre:function(e,t,o){var a=o.$$observers||(o.$$observers=Le()),l=o[i];l!==r&&(d=l&&n(l,!0,s,u),r=l),d&&(o[i]=d(e),(a[i]||(a[i]=[])).$$inter=!0,(o.$$observers&&o.$$observers[i].$$scope||e).$watch(d,(function(e,t){"class"===i&&e!==t?o.$updateClass(e,t):o.$set(i,e)})))}}}})}}function De(t,n,r){var i,o,s=n[0],l=n.length,c=s.parentNode;if(t)for(i=0,o=t.length;i<o;i++)if(t[i]===s){t[i++]=r;for(var u=i,d=u+l-1,f=t.length;u<f;u++,d++)d<f?t[u]=t[d]:delete t[u];t.length-=l-1,t.context===s&&(t.context=r);break}c&&c.replaceChild(r,s);var p=e.document.createDocumentFragment();for(i=0;i<l;i++)p.appendChild(n[i]);for(a.hasData(s)&&(a.data(r,a.data(s)),a(s).off("$destroy")),a.cleanData(p.querySelectorAll("*")),i=1;i<l;i++)delete n[i];n[0]=r,n.length=1}function Re(e,t){return O((function(){return e.apply(null,arguments)}),e,t)}function Ne(e,t,n,r,i,o){try{e(t,n,r,i,o)}catch(e){p(e,xe(n))}}function Me(e,t){if(b)throw pn("missingattr","Attribute '{0}' of '{1}' is non-optional and must be set!",e,t)}function ze(e,t,r,i,o){var a,s=[],l={};function c(t,n,i){G(r.$onChanges)&&!ae(n,i)&&(T||(e.$$postDigest(q),T=[]),a||(a={},T.push(d)),a[t]&&(i=a[t].previousValue),a[t]=new vn(i,n))}function d(){r.$onChanges(a),a=void 0}return k(i,(function(i,a){var d,f,p,h,g,v=i.attrName,m=i.optional;switch(i.mode){case"@":m||u.call(t,v)||(Me(v,o.name),r[a]=t[v]=void 0),g=t.$observe(v,(function(e){if(F(e)||Z(e)){var t=r[a];c(a,e,t),r[a]=e}})),t.$$observers[v].$$scope=e,F(d=t[v])?r[a]=n(d)(e):Z(d)&&(r[a]=d),l[a]=new vn(hn,r[a]),s.push(g);break;case"=":if(!u.call(t,v)){if(m)break;Me(v,o.name),t[v]=void 0}if(m&&!t[v])break;f=E(t[v]),h=f.literal?se:ae,p=f.assign||function(){throw d=r[a]=f(e),pn("nonassign","Expression '{0}' in attribute '{1}' used with directive '{2}' is non-assignable!",t[v],v,o.name)},d=r[a]=f(e);var b=function(t){return h(t,r[a])||(h(t,d)?p(e,t=r[a]):r[a]=t),d=t};b.$stateful=!0,g=i.collection?e.$watchCollection(t[v],b):e.$watch(E(t[v],b),null,f.literal),s.push(g);break;case"<":if(!u.call(t,v)){if(m)break;Me(v,o.name),t[v]=void 0}if(m&&!t[v])break;var y=(f=E(t[v])).literal,x=r[a]=f(e);l[a]=new vn(hn,r[a]),g=e[i.collection?"$watchCollection":"$watch"](f,(function(e,t){if(t===e){if(t===x||y&&se(t,x))return;t=x}c(a,e,t),r[a]=e})),s.push(g);break;case"&":if(m||u.call(t,v)||Me(v,o.name),(f=t.hasOwnProperty(v)?E(t[v]):D)===D&&m)break;r[a]=function(t){return f(e,t)}}})),{initialChanges:l,removeWatches:s.length&&function(){for(var e=0,t=s.length;e<t;++e)s[e]()}}}}]}function vn(e,t){this.previousValue=e,this.currentValue=t}gn.$inject=["$provide","$$sanitizeUriProvider"],vn.prototype.isFirstChange=function(){return this.previousValue===hn};var mn=/^((?:x|data)[:\-_])/i,bn=/[:\-_]+(.)/g;function yn(e){return e.replace(mn,"").replace(bn,(function(e,t,n){return n?t.toUpperCase():t}))}function xn(e,t){var n="",r=e.split(/\s+/),i=t.split(/\s+/);e:for(var o=0;o<r.length;o++){for(var a=r[o],s=0;s<i.length;s++)if(a===i[s])continue e;n+=(n.length>0?" ":"")+a}return n}function wn(e){var t=(e=a(e)).length;if(t<=1)return e;for(;t--;){var n=e[t];(8===n.nodeType||n.nodeType===Fe&&""===n.nodeValue.trim())&&h.call(e,t,1)}return e}var kn=i("$controller"),An=/^(\S+)(\s+as\s+([\w$]+))?$/;function En(e,t){if(t&&F(t))return t;if(F(e)){var n=An.exec(e);if(n)return n[3]}}function Sn(){var e={};this.has=function(t){return e.hasOwnProperty(t)},this.register=function(t,n){Me(t,"controller"),L(t)?O(e,t):e[t]=n},this.$get=["$injector",function(t){return function(r,i,o,a){var s,l,c,u;if(o=!0===o,a&&F(a)&&(u=a),F(r)){if(!(l=r.match(An)))throw kn("ctrlfmt","Badly formed controller string '{0}'. Must match `__name__ as __id__` or `__name__`.",r);if(c=l[1],u=u||l[3],!(r=e.hasOwnProperty(c)?e[c]:function(e,t,n){if(!t)return e;for(var r,i=t.split("."),o=e,a=i.length,s=0;s<a;s++)r=i[s],e&&(e=(o=e)[r]);return!n&&G(e)?fe(o,e):e}(i.$scope,c,!0)))throw kn("ctrlreg","The controller with the name '{0}' is not registered.",c);Ne(r,c,!0)}if(o){var d=(U(r)?r[r.length-1]:r).prototype;return s=Object.create(d||null),u&&n(i,u,s,c||r.name),O((function(){var e=t.invoke(r,s,i,c);return e!==s&&(L(e)||G(e))&&(s=e,u&&n(i,u,s,c||r.name)),s}),{instance:s,identifier:u})}return s=t.instantiate(r,i,c),u&&n(i,u,s,c||r.name),s};function n(e,t,n,r){if(!e||!L(e.$scope))throw i("$controller")("noscp","Cannot export controller '{0}' as '{1}'! No $scope object provided via `locals`.",r,t);e.$scope[t]=n}}]}function Cn(){this.$get=["$window",function(e){return a(e.document)}]}function $n(){this.$get=["$document","$rootScope",function(e,t){var n=e[0],r=n&&n.hidden;function i(){r=n.hidden}return e.on("visibilitychange",i),t.$on("$destroy",(function(){e.off("visibilitychange",i)})),function(){return r}}]}function On(){this.$get=["$log",function(e){return function(t,n){e.error.apply(e,arguments)}}]}var _n=function(){this.$get=["$document",function(e){return function(t){return t?!t.nodeType&&t instanceof a&&(t=t[0]):t=e[0].body,t.offsetWidth+1}}]},Tn={"Content-Type":"application/json;charset=utf-8"},jn=/^\[|^\{(?!\{)/,Pn={"[":/]$/,"{":/}$/},Dn=/^\)]\}',?\n/,Rn=i("$http");function In(e){return L(e)?V(e)?e.toISOString():he(e):e}function Nn(){this.$get=function(){return function(e){if(!e)return"";var t=[];return A(e,(function(e,n){null===e||M(e)||G(e)||(U(e)?k(e,(function(e){t.push(Ee(n)+"="+Ee(In(e)))})):t.push(Ee(n)+"="+Ee(In(e))))})),t.join("&")}}}function Mn(){this.$get=function(){return function(e){if(!e)return"";var t=[];return function e(n,r,i){U(n)?k(n,(function(t,n){e(t,r+"["+(L(t)?n:"")+"]")})):L(n)&&!V(n)?A(n,(function(t,n){e(t,r+(i?"":"[")+n+(i?"":"]"))})):(G(n)&&(n=n()),t.push(Ee(r)+"="+(null==n?"":Ee(In(n)))))}(e,"",!0),t.join("&")}}}function zn(e,t){if(F(e)){var n=e.replace(Dn,"").trim();if(n){var r=t("Content-Type"),i=r&&0===r.indexOf("application/json");if(i||(a=(o=n).match(jn))&&Pn[a[0]].test(o))try{e=ge(n)}catch(t){if(!i)return e;throw Rn("baddata",'Data must be a valid JSON object. Received: "{0}". Parse error: "{1}"',e,t)}}}var o,a;return e}function Ln(e){var t,n=Le();function r(e,t){e&&(n[e]=n[e]?n[e]+", "+t:t)}return F(e)?k(e.split("\n"),(function(e){t=e.indexOf(":"),r(d(K(e.substr(0,t))),K(e.substr(t+1)))})):L(e)&&k(e,(function(e,t){r(d(t),K(e))})),n}function Bn(e){var t;return function(n){if(t||(t=Ln(e)),n){var r=t[d(n)];return void 0===r&&(r=null),r}return t}}function Fn(e,t,n,r){return G(r)?r(e,t,n):(k(r,(function(r){e=r(e,t,n)})),e)}function qn(e){return 200<=e&&e<300}function Vn(){var e=this.defaults={transformResponse:[zn],transformRequest:[function(e){return!L(e)||(t=e,"[object File]"===v.call(t))||function(e){return"[object Blob]"===v.call(e)}(e)||function(e){return"[object FormData]"===v.call(e)}(e)?e:he(e);var t}],headers:{common:{Accept:"application/json, text/plain, */*"},post:qe(Tn),put:qe(Tn),patch:qe(Tn)},xsrfCookieName:"XSRF-TOKEN",xsrfHeaderName:"X-XSRF-TOKEN",paramSerializer:"$httpParamSerializer",jsonpCallbackParam:"callback"},t=!1;this.useApplyAsync=function(e){return z(e)?(t=!!e,this):t};var n=this.interceptors=[],r=this.xsrfTrustedOrigins=[];Object.defineProperty(this,"xsrfWhitelistedOrigins",{get:function(){return this.xsrfTrustedOrigins},set:function(e){this.xsrfTrustedOrigins=e}}),this.$get=["$browser","$httpBackend","$$cookieReader","$cacheFactory","$rootScope","$q","$injector","$sce",function(o,a,s,l,c,u,p,h){var g=l("$http");e.paramSerializer=F(e.paramSerializer)?p.get(e.paramSerializer):e.paramSerializer;var v=[];k(n,(function(e){v.unshift(F(e)?p.get(e):p.invoke(e))}));var m,b=(m=[ai].concat(r.map(li)),function(e){var t=li(e);return m.some(ci.bind(null,t))});function y(n){if(!L(n))throw i("$http")("badreq","Http request configuration must be an object. Received: {0}",n);if(!F(h.valueOf(n.url)))throw i("$http")("badreq","Http request configuration url must be a string or a $sce trusted object. Received: {0}",n.url);var r=O({method:"get",transformRequest:e.transformRequest,transformResponse:e.transformResponse,paramSerializer:e.paramSerializer,jsonpCallbackParam:e.jsonpCallbackParam},n);r.headers=function(t){var n,r,i,o=e.headers,a=O({},t.headers);o=O({},o.common,o[d(t.method)]);e:for(n in o){for(i in r=d(n),a)if(d(i)===r)continue e;a[n]=o[n]}return function(e,t){var n,r={};return k(e,(function(e,i){G(e)?null!=(n=e(t))&&(r[i]=n):r[i]=e})),r}(a,qe(t))}(n),r.method=f(r.method),r.paramSerializer=F(r.paramSerializer)?p.get(r.paramSerializer):r.paramSerializer,o.$$incOutstandingRequestCount("$http");var l=[],m=[],x=u.resolve(r);return k(v,(function(e){(e.request||e.requestError)&&l.unshift(e.request,e.requestError),(e.response||e.responseError)&&m.push(e.response,e.responseError)})),x=w(x,l),x=(x=w(x=x.then((function(n){var r=n.headers,i=Fn(n.data,Bn(r),void 0,n.transformRequest);M(i)&&k(r,(function(e,t){"content-type"===d(t)&&delete r[t]}));M(n.withCredentials)&&!M(e.withCredentials)&&(n.withCredentials=e.withCredentials);return function(n,r){var i,o,l=u.defer(),f=l.promise,p=n.headers,v="jsonp"===d(n.method),m=n.url;v?m=h.getTrustedResourceUrl(m):F(m)||(m=h.valueOf(m));m=function(e,t){t.length>0&&(e+=(-1===e.indexOf("?")?"?":"&")+t);return e}(m,n.paramSerializer(n.params)),v&&(m=function(e,t){var n=e.split("?");if(n.length>2)throw Rn("badjsonp",'Illegal use more than one "?", in url, "{1}"',e);return k(ke(n[1]),(function(n,r){if("JSON_CALLBACK"===n)throw Rn("badjsonp",'Illegal use of JSON_CALLBACK in url, "{0}"',e);if(r===t)throw Rn("badjsonp",'Illegal use of callback param, "{0}", in url, "{1}"',t,e)})),e+=(-1===e.indexOf("?")?"?":"&")+t+"=JSON_CALLBACK"}(m,n.jsonpCallbackParam));y.pendingRequests.push(n),f.then(S,S),!n.cache&&!e.cache||!1===n.cache||"GET"!==n.method&&"JSONP"!==n.method||(i=L(n.cache)?n.cache:L(e.cache)?e.cache:g);i&&(z(o=i.get(m))?Q(o)?o.then(E,E):U(o)?A(o[1],o[0],qe(o[2]),o[3],o[4]):A(o,200,{},"OK","complete"):i.put(m,f));if(M(o)){var x=b(n.url)?s()[n.xsrfCookieName||e.xsrfCookieName]:void 0;x&&(p[n.xsrfHeaderName||e.xsrfHeaderName]=x),a(n.method,m,r,(function(e,n,r,o,a){i&&(qn(e)?i.put(m,[e,n,Ln(r),o,a]):i.remove(m));function s(){A(n,e,r,o,a)}t?c.$applyAsync(s):(s(),c.$$phase||c.$apply())}),p,n.timeout,n.withCredentials,n.responseType,w(n.eventHandlers),w(n.uploadEventHandlers))}return f;function w(e){if(e){var n={};return k(e,(function(e,r){n[r]=function(n){function r(){e(n)}t?c.$applyAsync(r):c.$$phase?r():c.$apply(r)}})),n}}function A(e,t,r,i,o){(qn(t=t>=-1?t:0)?l.resolve:l.reject)({data:e,status:t,headers:Bn(r),config:n,statusText:i,xhrStatus:o})}function E(e){A(e.data,e.status,qe(e.headers()),e.statusText,e.xhrStatus)}function S(){var e=y.pendingRequests.indexOf(n);-1!==e&&y.pendingRequests.splice(e,1)}}(n,i).then(A,A)})),m)).finally((function(){o.$$completeOutstandingRequest(D,"$http")}));function w(e,t){for(var n=0,r=t.length;n<r;){var i=t[n++],o=t[n++];e=e.then(i,o)}return t.length=0,e}function A(e){var t=O({},e);return t.data=Fn(e.data,e.headers,e.status,r.transformResponse),qn(e.status)?t:u.reject(t)}}return y.pendingRequests=[],function(e){k(arguments,(function(e){y[e]=function(t,n){return y(O({},n||{},{method:e,url:t}))}}))}("get","delete","head","jsonp"),function(e){k(arguments,(function(e){y[e]=function(t,n,r){return y(O({},r||{},{method:e,url:t,data:n}))}}))}("post","put","patch"),y.defaults=e,y}]}function Un(){this.$get=function(){return function(){return new e.XMLHttpRequest}}}function Hn(){this.$get=["$browser","$jsonpCallbacks","$document","$xhrFactory",function(e,t,n,r){return function(e,t,n,r,i){return function(o,a,s,l,c,u,f,p,h,g){if(a=a||e.url(),"jsonp"===d(o))var v=r.createCallback(a),m=function(e,t,n){e=e.replace("JSON_CALLBACK",t);var o=i.createElement("script"),a=null;return o.type="text/javascript",o.src=e,o.async=!0,a=function(e){o.removeEventListener("load",a),o.removeEventListener("error",a),i.body.removeChild(o),o=null;var s=-1,l="unknown";e&&("load"!==e.type||r.wasCalled(t)||(e={type:"error"}),l=e.type,s="error"===e.type?404:200),n&&n(s,l)},o.addEventListener("load",a),o.addEventListener("error",a),i.body.appendChild(o),a}(a,v,(function(e,t){var n=200===e&&r.getResponse(v);A(l,e,n,"",t,"complete"),r.removeCallback(v)}));else{var b=t(o,a),y=!1;b.open(o,a,!0),k(c,(function(e,t){z(e)&&b.setRequestHeader(t,e)})),b.onload=function(){var e=b.statusText||"",t="response"in b?b.response:b.responseText,n=1223===b.status?204:b.status;0===n&&(n=t?200:"file"===li(a).protocol?404:0),A(l,n,t,b.getAllResponseHeaders(),e,"complete")};if(b.onerror=function(){A(l,-1,null,null,"","error")},b.ontimeout=function(){A(l,-1,null,null,"","timeout")},b.onabort=function(){A(l,-1,null,null,"",y?"timeout":"abort")},k(h,(function(e,t){b.addEventListener(t,e)})),k(g,(function(e,t){b.upload.addEventListener(t,e)})),f&&(b.withCredentials=!0),p)try{b.responseType=p}catch(e){if("json"!==p)throw e}b.send(M(s)?null:s)}if(u>0)var x=n((function(){w("timeout")}),u);else Q(u)&&u.then((function(){w(z(u.$$timeoutId)?"timeout":"abort")}));function w(e){y="timeout"===e,m&&m(),b&&b.abort()}function A(e,t,r,i,o,a){z(x)&&n.cancel(x),m=b=null,e(t,r,i,o,a)}}}(e,r,e.defer,t,n[0])}]}var Gn=y.$interpolateMinErr=i("$interpolate");function Wn(){var e="{{",t="}}";this.startSymbol=function(t){return t?(e=t,this):e},this.endSymbol=function(e){return e?(t=e,this):t},this.$get=["$parse","$exceptionHandler","$sce",function(n,r,i){var o=e.length,a=t.length,s=new RegExp(e.replace(/./g,c),"g"),l=new RegExp(t.replace(/./g,c),"g");function c(e){return"\\\\\\"+e}function u(n){return n.replace(s,e).replace(l,t)}function d(e,t,n,r){var i=e.$watch((function(e){return i(),r(e)}),t,n);return i}function f(s,l,c,f){var p=c===i.URL||c===i.MEDIA_URL;if(!s.length||-1===s.indexOf(e)){if(l)return;var h=u(s);p&&(h=i.getTrusted(c,h));var g=I(h);return g.exp=s,g.expressions=[],g.$$watchDelegate=d,g}f=!!f;for(var v,m,b,y,x,w=0,k=[],A=s.length,E=[],S=[];w<A;){if(-1===(v=s.indexOf(e,w))||-1===(m=s.indexOf(t,v+o))){w!==A&&E.push(u(s.substring(w)));break}w!==v&&E.push(u(s.substring(w,v))),y=s.substring(v+o,m),k.push(y),w=m+a,S.push(E.length),E.push("")}x=1===E.length&&1===S.length;var C=p&&x?void 0:function(e){try{return e=c&&!p?i.getTrusted(c,e):i.valueOf(e),f&&!z(e)?e:Be(e)}catch(e){r(Gn.interr(s,e))}};if(b=k.map((function(e){return n(e,C)})),!l||k.length){var $=function(e){for(var t=0,n=k.length;t<n;t++){if(f&&M(e[t]))return;E[S[t]]=e[t]}return p?i.getTrusted(c,x?E[0]:E.join("")):(c&&E.length>1&&Gn.throwNoconcat(s),E.join(""))};return O((function(e){var t=0,n=k.length,i=new Array(n);try{for(;t<n;t++)i[t]=b[t](e);return $(i)}catch(e){r(Gn.interr(s,e))}}),{exp:s,expressions:k,$$watchDelegate:function(e,t){var n;return e.$watchGroup(b,(function(r,i){var o=$(r);t.call(this,o,r!==i?n:o,e),n=o}))}})}}return f.startSymbol=function(){return e},f.endSymbol=function(){return t},f}]}Gn.throwNoconcat=function(e){throw Gn("noconcat","Error while interpolating: {0}\nStrict Contextual Escaping disallows interpolations that concatenate multiple expressions when a trusted value is required. See http://docs.angularjs.org/api/ng.$sce",e)},Gn.interr=function(e,t){return Gn("interr","Can't interpolate: {0}\n{1}",e,t.toString())};var Yn=i("$interval");function Xn(){this.$get=["$$intervalFactory","$window",function(e,t){var n={},r=function(e){t.clearInterval(e),delete n[e]},i=e((function(e,r,i){var o=t.setInterval(e,r);return n[o]=i,o}),r);return i.cancel=function(e){if(!e)return!1;if(!e.hasOwnProperty("$$intervalId"))throw Yn("badprom","`$interval.cancel()` called with a promise that was not generated by `$interval()`.");if(!n.hasOwnProperty(e.$$intervalId))return!1;var t=e.$$intervalId,i=n[t];return Lr(i.promise),i.reject("canceled"),r(t),!0},i}]}function Zn(){this.$get=["$browser","$q","$$q","$rootScope",function(e,t,n,r){return function(i,o){return function(a,s,l,c){var u=arguments.length>4,d=u?de(arguments,4):[],f=0,p=z(c)&&!c,h=(p?n:t).defer(),g=h.promise;function v(){u?a.apply(null,d):a(f)}function m(){p?e.defer(v):r.$evalAsync(v),h.notify(f++),l>0&&f>=l&&(h.resolve(f),o(g.$$intervalId)),p||r.$apply()}return l=z(l)?l:0,g.$$intervalId=i(m,s,h,p),g}}}]}var Qn=function(){this.$get=function(){var e=y.callbacks,t={};return{createCallback:function(n){var r="_"+(e.$$counter++).toString(36),i="angular.callbacks."+r,o=function(e){var t=function(e){t.data=e,t.called=!0};return t.id=e,t}(r);return t[i]=e[r]=o,i},wasCalled:function(e){return t[e].called},getResponse:function(e){return t[e].data},removeCallback:function(n){var r=t[n];delete e[r.id],delete t[n]}}}},Jn=/^([^?#]*)(\?([^#]*))?(#(.*))?$/,Kn={http:80,https:443,ftp:21},er=i("$location");function tr(e,t,n){var r,i=(r=[],k(t,(function(e,t){U(e)?k(e,(function(e){r.push(Ee(t,!0)+(!0===e?"":"="+Ee(e,!0)))})):r.push(Ee(t,!0)+(!0===e?"":"="+Ee(e,!0)))})),r.length?r.join("&"):""),o=n?"#"+Ae(n):"";return function(e){for(var t=e.split("/"),n=t.length;n--;)t[n]=Ae(t[n].replace(/%2F/g,"/"));return t.join("/")}(e)+(i?"?"+i:"")+o}function nr(e,t){var n=li(e);t.$$protocol=n.protocol,t.$$host=n.hostname,t.$$port=T(n.port)||Kn[n.protocol]||null}var rr=/^\s*[\\/]{2,}/;function ir(e,t,n){if(rr.test(e))throw er("badpath",'Invalid url "{0}".',e);var r="/"!==e.charAt(0);r&&(e="/"+e);var i=li(e),o=r&&"/"===i.pathname.charAt(0)?i.pathname.substring(1):i.pathname;t.$$path=function(e,t){for(var n=e.split("/"),r=n.length;r--;)n[r]=decodeURIComponent(n[r]),t&&(n[r]=n[r].replace(/\//g,"%2F"));return n.join("/")}(o,n),t.$$search=ke(i.search),t.$$hash=decodeURIComponent(i.hash),t.$$path&&"/"!==t.$$path.charAt(0)&&(t.$$path="/"+t.$$path)}function or(e,t){return e.slice(0,t.length)===t}function ar(e,t){if(or(t,e))return t.substr(e.length)}function sr(e){var t=e.indexOf("#");return-1===t?e:e.substr(0,t)}function lr(e,t,n){this.$$html5=!0,n=n||"",nr(e,this),this.$$parse=function(e){var n=ar(t,e);if(!F(n))throw er("ipthprfx",'Invalid url "{0}", missing path prefix "{1}".',e,t);ir(n,this,!0),this.$$path||(this.$$path="/"),this.$$compose()},this.$$normalizeUrl=function(e){return t+e.substr(1)},this.$$parseLinkUrl=function(r,i){return i&&"#"===i[0]?(this.hash(i.slice(1)),!0):(z(o=ar(e,r))?(a=o,s=n&&z(o=ar(n,o))?t+(ar("/",o)||o):e+a):z(o=ar(t,r))?s=t+o:t===r+"/"&&(s=t),s&&this.$$parse(s),!!s);var o,a,s}}function cr(e,t,n){nr(e,this),this.$$parse=function(r){var i,o=ar(e,r)||ar(t,r);M(o)||"#"!==o.charAt(0)?this.$$html5?i=o:(i="",M(o)&&(e=r,this.replace())):M(i=ar(n,o))&&(i=o),ir(i,this,!1),this.$$path=function(e,t,n){var r,i=/^\/[A-Z]:(\/.*)/;or(t,n)&&(t=t.replace(n,""));if(i.exec(t))return e;return(r=i.exec(e))?r[1]:e}(this.$$path,i,e),this.$$compose()},this.$$normalizeUrl=function(t){return e+(t?n+t:"")},this.$$parseLinkUrl=function(t,n){return sr(e)===sr(t)&&(this.$$parse(t),!0)}}function ur(e,t,n){this.$$html5=!0,cr.apply(this,arguments),this.$$parseLinkUrl=function(r,i){return i&&"#"===i[0]?(this.hash(i.slice(1)),!0):(e===sr(r)?o=r:(a=ar(t,r))?o=e+n+a:t===r+"/"&&(o=t),o&&this.$$parse(o),!!o);var o,a},this.$$normalizeUrl=function(t){return e+n+t}}var dr={$$absUrl:"",$$html5:!1,$$replace:!1,$$compose:function(){this.$$url=tr(this.$$path,this.$$search,this.$$hash),this.$$absUrl=this.$$normalizeUrl(this.$$url),this.$$urlUpdatedByLocation=!0},absUrl:fr("$$absUrl"),url:function(e){if(M(e))return this.$$url;var t=Jn.exec(e);return(t[1]||""===e)&&this.path(decodeURIComponent(t[1])),(t[2]||t[1]||""===e)&&this.search(t[3]||""),this.hash(t[5]||""),this},protocol:fr("$$protocol"),host:fr("$$host"),port:fr("$$port"),path:pr("$$path",(function(e){return"/"===(e=null!==e?e.toString():"").charAt(0)?e:"/"+e})),search:function(e,t){switch(arguments.length){case 0:return this.$$search;case 1:if(F(e)||q(e))e=e.toString(),this.$$search=ke(e);else{if(!L(e))throw er("isrcharg","The first argument of the `$location#search()` call must be a string or an object.");k(e=oe(e,{}),(function(t,n){null==t&&delete e[n]})),this.$$search=e}break;default:M(t)||null===t?delete this.$$search[e]:this.$$search[e]=t}return this.$$compose(),this},hash:pr("$$hash",(function(e){return null!==e?e.toString():""})),replace:function(){return this.$$replace=!0,this}};function fr(e){return function(){return this[e]}}function pr(e,t){return function(n){return M(n)?this[e]:(this[e]=t(n),this.$$compose(),this)}}function hr(){var e="!",t={enabled:!1,requireBase:!0,rewriteLinks:!0};this.hashPrefix=function(t){return z(t)?(e=t,this):e},this.html5Mode=function(e){return Z(e)?(t.enabled=e,this):L(e)?(Z(e.enabled)&&(t.enabled=e.enabled),Z(e.requireBase)&&(t.requireBase=e.requireBase),(Z(e.rewriteLinks)||F(e.rewriteLinks))&&(t.rewriteLinks=e.rewriteLinks),this):t},this.$get=["$rootScope","$browser","$sniffer","$rootElement","$window",function(n,r,i,o,s){var l,c,u,d,f=r.baseHref(),p=r.url();if(t.enabled){if(!f&&t.requireBase)throw er("nobase","$location in HTML5 mode requires a <base> tag to be present!");u=(d=p).substring(0,d.indexOf("/",d.indexOf("//")+2))+(f||"/"),c=i.history?lr:ur}else u=sr(p),c=cr;var h=function(e){return e.substr(0,sr(e).lastIndexOf("/")+1)}(u);(l=new c(u,h,"#"+e)).$$parseLinkUrl(p,p),l.$$state=r.state();var g=/^\s*(javascript|mailto):/i;function v(e,t,n){var i=l.url(),o=l.$$state;try{r.url(e,t,n),l.$$state=r.state()}catch(e){throw l.url(i),l.$$state=o,e}}o.on("click",(function(e){var i=t.rewriteLinks;if(i&&!e.ctrlKey&&!e.metaKey&&!e.shiftKey&&2!==e.which&&2!==e.button){for(var s=a(e.target);"a"!==ne(s[0]);)if(s[0]===o[0]||!(s=s.parent())[0])return;if(!F(i)||!M(s.attr(i))){var c=s.prop("href"),u=s.attr("href")||s.attr("xlink:href");L(c)&&"[object SVGAnimatedString]"===c.toString()&&(c=li(c.animVal).href),g.test(c)||!c||s.attr("target")||e.isDefaultPrevented()||l.$$parseLinkUrl(c,u)&&(e.preventDefault(),l.absUrl()!==r.url()&&n.$apply())}}})),l.absUrl()!==p&&r.url(l.absUrl(),!0);var m=!0;return r.onUrlChange((function(e,t){or(e,h)?(n.$evalAsync((function(){var r,i=l.absUrl(),o=l.$$state;l.$$parse(e),l.$$state=t,r=n.$broadcast("$locationChangeStart",e,i,t,o).defaultPrevented,l.absUrl()===e&&(r?(l.$$parse(i),l.$$state=o,v(i,!1,o)):(m=!1,b(i,o)))})),n.$$phase||n.$digest()):s.location.href=e})),n.$watch((function(){if(m||l.$$urlUpdatedByLocation){l.$$urlUpdatedByLocation=!1;var e=r.url(),t=l.absUrl(),o=r.state(),a=l.$$replace,s=!((c=e)===(u=t)||li(c).href===li(u).href)||l.$$html5&&i.history&&o!==l.$$state;(m||s)&&(m=!1,n.$evalAsync((function(){var t=l.absUrl(),r=n.$broadcast("$locationChangeStart",t,e,l.$$state,o).defaultPrevented;l.absUrl()===t&&(r?(l.$$parse(e),l.$$state=o):(s&&v(t,a,o===l.$$state?null:l.$$state),b(e,o)))})))}var c,u;l.$$replace=!1})),l;function b(e,t){n.$broadcast("$locationChangeSuccess",l.absUrl(),e,l.$$state,t)}}]}function gr(){var e=!0,t=this;this.debugEnabled=function(t){return z(t)?(e=t,this):e},this.$get=["$window",function(n){var r,i=o||/\bEdge\//.test(n.navigator&&n.navigator.userAgent);return{log:s("log"),info:s("info"),warn:s("warn"),error:s("error"),debug:(r=s("debug"),function(){e&&r.apply(t,arguments)})};function a(e){return H(e)&&(e.stack&&i?e=e.message&&-1===e.stack.indexOf(e.message)?"Error: "+e.message+"\n"+e.stack:e.stack:e.sourceURL&&(e=e.message+"\n"+e.sourceURL+":"+e.line)),e}function s(e){var t=n.console||{},r=t[e]||t.log||D;return function(){var e=[];return k(arguments,(function(t){e.push(a(t))})),Function.prototype.apply.call(r,t,e)}}}]}k([ur,cr,lr],(function(e){e.prototype=Object.create(dr),e.prototype.state=function(t){if(!arguments.length)return this.$$state;if(e!==lr||!this.$$html5)throw er("nostate","History API state support is available only in HTML5 mode and only in browsers supporting HTML5 History API");return this.$$state=M(t)?null:t,this.$$urlUpdatedByLocation=!0,this}}));var vr=i("$parse"),mr={}.constructor.prototype.valueOf;function br(e){return e+""}var yr=Le();k("+ - * / % === !== == != < > <= >= && || ! = |".split(" "),(function(e){yr[e]=!0}));var xr={n:"\n",f:"\f",r:"\r",t:"\t",v:"\v","'":"'",'"':'"'},wr=function(e){this.options=e};wr.prototype={constructor:wr,lex:function(e){for(this.text=e,this.index=0,this.tokens=[];this.index<this.text.length;){var t=this.text.charAt(this.index);if('"'===t||"'"===t)this.readString(t);else if(this.isNumber(t)||"."===t&&this.isNumber(this.peek()))this.readNumber();else if(this.isIdentifierStart(this.peekMultichar()))this.readIdent();else if(this.is(t,"(){}[].,;:?"))this.tokens.push({index:this.index,text:t}),this.index++;else if(this.isWhitespace(t))this.index++;else{var n=t+this.peek(),r=n+this.peek(2),i=yr[t],o=yr[n],a=yr[r];if(i||o||a){var s=a?r:o?n:t;this.tokens.push({index:this.index,text:s,operator:!0}),this.index+=s.length}else this.throwError("Unexpected next character ",this.index,this.index+1)}}return this.tokens},is:function(e,t){return-1!==t.indexOf(e)},peek:function(e){var t=e||1;return this.index+t<this.text.length&&this.text.charAt(this.index+t)},isNumber:function(e){return"0"<=e&&e<="9"&&"string"==typeof e},isWhitespace:function(e){return" "===e||"\r"===e||"\t"===e||"\n"===e||"\v"===e||" "===e},isIdentifierStart:function(e){return this.options.isIdentifierStart?this.options.isIdentifierStart(e,this.codePointAt(e)):this.isValidIdentifierStart(e)},isValidIdentifierStart:function(e){return"a"<=e&&e<="z"||"A"<=e&&e<="Z"||"_"===e||"$"===e},isIdentifierContinue:function(e){return this.options.isIdentifierContinue?this.options.isIdentifierContinue(e,this.codePointAt(e)):this.isValidIdentifierContinue(e)},isValidIdentifierContinue:function(e,t){return this.isValidIdentifierStart(e,t)||this.isNumber(e)},codePointAt:function(e){return 1===e.length?e.charCodeAt(0):(e.charCodeAt(0)<<10)+e.charCodeAt(1)-56613888},peekMultichar:function(){var e=this.text.charAt(this.index),t=this.peek();if(!t)return e;var n=e.charCodeAt(0),r=t.charCodeAt(0);return n>=55296&&n<=56319&&r>=56320&&r<=57343?e+t:e},isExpOperator:function(e){return"-"===e||"+"===e||this.isNumber(e)},throwError:function(e,t,n){n=n||this.index;var r=z(t)?"s "+t+"-"+this.index+" ["+this.text.substring(t,n)+"]":" "+n;throw vr("lexerr","Lexer Error: {0} at column{1} in expression [{2}].",e,r,this.text)},readNumber:function(){for(var e="",t=this.index;this.index<this.text.length;){var n=d(this.text.charAt(this.index));if("."===n||this.isNumber(n))e+=n;else{var r=this.peek();if("e"===n&&this.isExpOperator(r))e+=n;else if(this.isExpOperator(n)&&r&&this.isNumber(r)&&"e"===e.charAt(e.length-1))e+=n;else{if(!this.isExpOperator(n)||r&&this.isNumber(r)||"e"!==e.charAt(e.length-1))break;this.throwError("Invalid exponent")}}this.index++}this.tokens.push({index:t,text:e,constant:!0,value:Number(e)})},readIdent:function(){var e=this.index;for(this.index+=this.peekMultichar().length;this.index<this.text.length;){var t=this.peekMultichar();if(!this.isIdentifierContinue(t))break;this.index+=t.length}this.tokens.push({index:e,text:this.text.slice(e,this.index),identifier:!0})},readString:function(e){var t=this.index;this.index++;for(var n="",r=e,i=!1;this.index<this.text.length;){var o=this.text.charAt(this.index);if(r+=o,i){if("u"===o){var a=this.text.substring(this.index+1,this.index+5);a.match(/[\da-f]{4}/i)||this.throwError("Invalid unicode escape [\\u"+a+"]"),this.index+=4,n+=String.fromCharCode(parseInt(a,16))}else{n+=xr[o]||o}i=!1}else if("\\"===o)i=!0;else{if(o===e)return this.index++,void this.tokens.push({index:t,text:r,constant:!0,value:n});n+=o}this.index++}this.throwError("Unterminated quote",t)}};var kr=function(e,t){this.lexer=e,this.options=t};function Ar(e,t){return void 0!==e?e:t}function Er(e,t){return void 0===e?t:void 0===t?e:e+t}kr.Program="Program",kr.ExpressionStatement="ExpressionStatement",kr.AssignmentExpression="AssignmentExpression",kr.ConditionalExpression="ConditionalExpression",kr.LogicalExpression="LogicalExpression",kr.BinaryExpression="BinaryExpression",kr.UnaryExpression="UnaryExpression",kr.CallExpression="CallExpression",kr.MemberExpression="MemberExpression",kr.Identifier="Identifier",kr.Literal="Literal",kr.ArrayExpression="ArrayExpression",kr.Property="Property",kr.ObjectExpression="ObjectExpression",kr.ThisExpression="ThisExpression",kr.LocalsExpression="LocalsExpression",kr.NGValueParameter="NGValueParameter",kr.prototype={ast:function(e){this.text=e,this.tokens=this.lexer.lex(e);var t=this.program();return 0!==this.tokens.length&&this.throwError("is an unexpected token",this.tokens[0]),t},program:function(){for(var e=[];;)if(this.tokens.length>0&&!this.peek("}",")",";","]")&&e.push(this.expressionStatement()),!this.expect(";"))return{type:kr.Program,body:e}},expressionStatement:function(){return{type:kr.ExpressionStatement,expression:this.filterChain()}},filterChain:function(){for(var e=this.expression();this.expect("|");)e=this.filter(e);return e},expression:function(){return this.assignment()},assignment:function(){var e=this.ternary();if(this.expect("=")){if(!$r(e))throw vr("lval","Trying to assign a value to a non l-value");e={type:kr.AssignmentExpression,left:e,right:this.assignment(),operator:"="}}return e},ternary:function(){var e,t,n=this.logicalOR();return this.expect("?")&&(e=this.expression(),this.consume(":"))?(t=this.expression(),{type:kr.ConditionalExpression,test:n,alternate:e,consequent:t}):n},logicalOR:function(){for(var e=this.logicalAND();this.expect("||");)e={type:kr.LogicalExpression,operator:"||",left:e,right:this.logicalAND()};return e},logicalAND:function(){for(var e=this.equality();this.expect("&&");)e={type:kr.LogicalExpression,operator:"&&",left:e,right:this.equality()};return e},equality:function(){for(var e,t=this.relational();e=this.expect("==","!=","===","!==");)t={type:kr.BinaryExpression,operator:e.text,left:t,right:this.relational()};return t},relational:function(){for(var e,t=this.additive();e=this.expect("<",">","<=",">=");)t={type:kr.BinaryExpression,operator:e.text,left:t,right:this.additive()};return t},additive:function(){for(var e,t=this.multiplicative();e=this.expect("+","-");)t={type:kr.BinaryExpression,operator:e.text,left:t,right:this.multiplicative()};return t},multiplicative:function(){for(var e,t=this.unary();e=this.expect("*","/","%");)t={type:kr.BinaryExpression,operator:e.text,left:t,right:this.unary()};return t},unary:function(){var e;return(e=this.expect("+","-","!"))?{type:kr.UnaryExpression,operator:e.text,prefix:!0,argument:this.unary()}:this.primary()},primary:function(){var e,t;for(this.expect("(")?(e=this.filterChain(),this.consume(")")):this.expect("[")?e=this.arrayDeclaration():this.expect("{")?e=this.object():this.selfReferential.hasOwnProperty(this.peek().text)?e=oe(this.selfReferential[this.consume().text]):this.options.literals.hasOwnProperty(this.peek().text)?e={type:kr.Literal,value:this.options.literals[this.consume().text]}:this.peek().identifier?e=this.identifier():this.peek().constant?e=this.constant():this.throwError("not a primary expression",this.peek());t=this.expect("(","[",".");)"("===t.text?(e={type:kr.CallExpression,callee:e,arguments:this.parseArguments()},this.consume(")")):"["===t.text?(e={type:kr.MemberExpression,object:e,property:this.expression(),computed:!0},this.consume("]")):"."===t.text?e={type:kr.MemberExpression,object:e,property:this.identifier(),computed:!1}:this.throwError("IMPOSSIBLE");return e},filter:function(e){for(var t=[e],n={type:kr.CallExpression,callee:this.identifier(),arguments:t,filter:!0};this.expect(":");)t.push(this.expression());return n},parseArguments:function(){var e=[];if(")"!==this.peekToken().text)do{e.push(this.filterChain())}while(this.expect(","));return e},identifier:function(){var e=this.consume();return e.identifier||this.throwError("is not a valid identifier",e),{type:kr.Identifier,name:e.text}},constant:function(){return{type:kr.Literal,value:this.consume().value}},arrayDeclaration:function(){var e=[];if("]"!==this.peekToken().text)do{if(this.peek("]"))break;e.push(this.expression())}while(this.expect(","));return this.consume("]"),{type:kr.ArrayExpression,elements:e}},object:function(){var e,t=[];if("}"!==this.peekToken().text)do{if(this.peek("}"))break;e={type:kr.Property,kind:"init"},this.peek().constant?(e.key=this.constant(),e.computed=!1,this.consume(":"),e.value=this.expression()):this.peek().identifier?(e.key=this.identifier(),e.computed=!1,this.peek(":")?(this.consume(":"),e.value=this.expression()):e.value=e.key):this.peek("[")?(this.consume("["),e.key=this.expression(),this.consume("]"),e.computed=!0,this.consume(":"),e.value=this.expression()):this.throwError("invalid key",this.peek()),t.push(e)}while(this.expect(","));return this.consume("}"),{type:kr.ObjectExpression,properties:t}},throwError:function(e,t){throw vr("syntax","Syntax Error: Token '{0}' {1} at column {2} of the expression [{3}] starting at [{4}].",t.text,e,t.index+1,this.text,this.text.substring(t.index))},consume:function(e){if(0===this.tokens.length)throw vr("ueoe","Unexpected end of expression: {0}",this.text);var t=this.expect(e);return t||this.throwError("is unexpected, expecting ["+e+"]",this.peek()),t},peekToken:function(){if(0===this.tokens.length)throw vr("ueoe","Unexpected end of expression: {0}",this.text);return this.tokens[0]},peek:function(e,t,n,r){return this.peekAhead(0,e,t,n,r)},peekAhead:function(e,t,n,r,i){if(this.tokens.length>e){var o=this.tokens[e],a=o.text;if(a===t||a===n||a===r||a===i||!t&&!n&&!r&&!i)return o}return!1},expect:function(e,t,n,r){var i=this.peek(e,t,n,r);return!!i&&(this.tokens.shift(),i)},selfReferential:{this:{type:kr.ThisExpression},$locals:{type:kr.LocalsExpression}}};function Sr(e,t,n){var r,i,o,a=e.isPure=function(e,t){switch(e.type){case kr.MemberExpression:if(e.computed)return!1;break;case kr.UnaryExpression:return 1;case kr.BinaryExpression:return"+"!==e.operator&&1;case kr.CallExpression:return!1}return void 0===t?2:t}(e,n);switch(e.type){case kr.Program:r=!0,k(e.body,(function(e){Sr(e.expression,t,a),r=r&&e.expression.constant})),e.constant=r;break;case kr.Literal:e.constant=!0,e.toWatch=[];break;case kr.UnaryExpression:Sr(e.argument,t,a),e.constant=e.argument.constant,e.toWatch=e.argument.toWatch;break;case kr.BinaryExpression:Sr(e.left,t,a),Sr(e.right,t,a),e.constant=e.left.constant&&e.right.constant,e.toWatch=e.left.toWatch.concat(e.right.toWatch);break;case kr.LogicalExpression:Sr(e.left,t,a),Sr(e.right,t,a),e.constant=e.left.constant&&e.right.constant,e.toWatch=e.constant?[]:[e];break;case kr.ConditionalExpression:Sr(e.test,t,a),Sr(e.alternate,t,a),Sr(e.consequent,t,a),e.constant=e.test.constant&&e.alternate.constant&&e.consequent.constant,e.toWatch=e.constant?[]:[e];break;case kr.Identifier:e.constant=!1,e.toWatch=[e];break;case kr.MemberExpression:Sr(e.object,t,a),e.computed&&Sr(e.property,t,a),e.constant=e.object.constant&&(!e.computed||e.property.constant),e.toWatch=e.constant?[]:[e];break;case kr.CallExpression:o=!!e.filter&&function(e,t){return!e(t).$stateful}(t,e.callee.name),r=o,i=[],k(e.arguments,(function(e){Sr(e,t,a),r=r&&e.constant,i.push.apply(i,e.toWatch)})),e.constant=r,e.toWatch=o?i:[e];break;case kr.AssignmentExpression:Sr(e.left,t,a),Sr(e.right,t,a),e.constant=e.left.constant&&e.right.constant,e.toWatch=[e];break;case kr.ArrayExpression:r=!0,i=[],k(e.elements,(function(e){Sr(e,t,a),r=r&&e.constant,i.push.apply(i,e.toWatch)})),e.constant=r,e.toWatch=i;break;case kr.ObjectExpression:r=!0,i=[],k(e.properties,(function(e){Sr(e.value,t,a),r=r&&e.value.constant,i.push.apply(i,e.value.toWatch),e.computed&&(Sr(e.key,t,!1),r=r&&e.key.constant,i.push.apply(i,e.key.toWatch))})),e.constant=r,e.toWatch=i;break;case kr.ThisExpression:case kr.LocalsExpression:e.constant=!1,e.toWatch=[]}}function Cr(e){if(1===e.length){var t=e[0].expression,n=t.toWatch;return 1!==n.length||n[0]!==t?n:void 0}}function $r(e){return e.type===kr.Identifier||e.type===kr.MemberExpression}function Or(e){if(1===e.body.length&&$r(e.body[0].expression))return{type:kr.AssignmentExpression,left:e.body[0].expression,right:{type:kr.NGValueParameter},operator:"="}}function _r(e){this.$filter=e}function Tr(e){this.$filter=e}function jr(e,t,n){this.ast=new kr(e,n),this.astCompiler=n.csp?new Tr(t):new _r(t)}function Pr(e){return G(e.valueOf)?e.valueOf():mr.call(e)}function Dr(){var e,t,n=Le(),r={true:!0,false:!1,null:null,undefined:void 0};this.addLiteral=function(e,t){r[e]=t},this.setIdentifierFns=function(n,r){return e=n,t=r,this},this.$get=["$filter",function(i){var o={csp:le().noUnsafeEval,literals:oe(r),isIdentifierStart:G(e)&&e,isIdentifierContinue:G(t)&&t};return a.$$getAst=function(e){return new jr(new wr(o),i,o).getAst(e).ast},a;function a(e,t){var r,a;switch(typeof e){case"string":if(e=e.trim(),!(r=n[a=e]))r=new jr(new wr(o),i,o).parse(e),n[a]=f(r);return p(r,t);case"function":return p(e,t);default:return p(D,t)}}function s(e,t,n){return null==e||null==t?e===t:!("object"==typeof e&&"object"==typeof(e=Pr(e))&&!n)&&(e===t||e!=e&&t!=t)}function l(e,t,n,r,i){var o,a=r.inputs;if(1===a.length){var l=s;return a=a[0],e.$watch((function(e){var t=a(e);return s(t,l,a.isPure)||(o=r(e,void 0,void 0,[t]),l=t&&Pr(t)),o}),t,n,i)}for(var c=[],u=[],d=0,f=a.length;d<f;d++)c[d]=s,u[d]=null;return e.$watch((function(e){for(var t=!1,n=0,i=a.length;n<i;n++){var l=a[n](e);(t||(t=!s(l,c[n],a[n].isPure)))&&(u[n]=l,c[n]=l&&Pr(l))}return t&&(o=r(e,void 0,void 0,u)),o}),t,n,i)}function c(e,t,n,r,i){var o,a,s=r.literal?u:z,l=r.$$intercepted||r,c=r.$$interceptor||R,d=r.inputs&&!l.inputs;return h.literal=r.literal,h.constant=r.constant,h.inputs=r.inputs,f(h),o=e.$watch(h,t,n,i);function p(){s(a)&&o()}function h(e,t,n,r){return a=d&&r?r[0]:l(e,t,n,r),s(a)&&e.$$postDigest(p),c(a)}}function u(e){var t=!0;return k(e,(function(e){z(e)||(t=!1)})),t}function d(e,t,n,r){var i=e.$watch((function(e){return i(),r(e)}),t,n);return i}function f(e){return e.constant?e.$$watchDelegate=d:e.oneTime?e.$$watchDelegate=c:e.inputs&&(e.$$watchDelegate=l),e}function p(e,t){if(!t)return e;e.$$interceptor&&(t=function(e,t){function n(n){return t(e(n))}return n.$stateful=e.$stateful||t.$stateful,n.$$pure=e.$$pure&&t.$$pure,n}(e.$$interceptor,t),e=e.$$intercepted);var n=!1,r=function(r,i,o,a){var s=n&&a?a[0]:e(r,i,o,a);return t(s)};return r.$$intercepted=e,r.$$interceptor=t,r.literal=e.literal,r.oneTime=e.oneTime,r.constant=e.constant,t.$stateful||(n=!e.inputs,r.inputs=e.inputs?e.inputs:[e],t.$$pure||(r.inputs=r.inputs.map((function(e){return 2===e.isPure?function(t){return e(t)}:e})))),f(r)}}]}function Rr(){var e=!0;this.$get=["$rootScope","$exceptionHandler",function(t,n){return Nr((function(e){t.$evalAsync(e)}),n,e)}],this.errorOnUnhandledRejections=function(t){return z(t)?(e=t,this):e}}function Ir(){var e=!0;this.$get=["$browser","$exceptionHandler",function(t,n){return Nr((function(e){t.defer(e)}),n,e)}],this.errorOnUnhandledRejections=function(t){return z(t)?(e=t,this):e}}function Nr(e,t,n){var r=i("$q",TypeError),o=0,a=[];function s(){return new l}function l(){var e=this.promise=new c;this.resolve=function(t){f(e,t)},this.reject=function(t){p(e,t)},this.notify=function(t){g(e,t)}}function c(){this.$$state={status:0}}function u(){for(;!o&&a.length;){var e=a.shift();if(!Mr(e)){zr(e);var n="Possibly unhandled rejection: "+Ve(e.value);H(e.value)?t(e.value,n):t(n)}}}function d(r){!n||r.pending||2!==r.status||Mr(r)||(0===o&&0===a.length&&e(u),a.push(r)),!r.processScheduled&&r.pending&&(r.processScheduled=!0,++o,e((function(){!function(r){var i,a,s;s=r.pending,r.processScheduled=!1,r.pending=void 0;try{for(var l=0,c=s.length;l<c;++l){zr(r),a=s[l][0],i=s[l][r.status];try{G(i)?f(a,i(r.value)):1===r.status?f(a,r.value):p(a,r.value)}catch(e){p(a,e),e&&!0===e.$$passToExceptionHandler&&t(e)}}}finally{--o,n&&0===o&&e(u)}}(r)})))}function f(e,t){e.$$state.status||(t===e?h(e,r("qcycle","Expected promise to be resolved with value other than itself '{0}'",t)):function e(t,n){var r,i=!1;try{(L(n)||G(n))&&(r=n.then),G(r)?(t.$$state.status=-1,r.call(n,o,a,(function(e){g(t,e)}))):(t.$$state.value=n,t.$$state.status=1,d(t.$$state))}catch(e){a(e)}function o(n){i||(i=!0,e(t,n))}function a(e){i||(i=!0,h(t,e))}}(e,t))}function p(e,t){e.$$state.status||h(e,t)}function h(e,t){e.$$state.value=t,e.$$state.status=2,d(e.$$state)}function g(n,r){var i=n.$$state.pending;n.$$state.status<=0&&i&&i.length&&e((function(){for(var e,n,o=0,a=i.length;o<a;o++){n=i[o][0],e=i[o][3];try{g(n,G(e)?e(r):r)}catch(e){t(e)}}}))}function v(e){var t=new c;return p(t,e),t}function m(e,t,n){var r=null;try{G(n)&&(r=n())}catch(e){return v(e)}return Q(r)?r.then((function(){return t(e)}),v):t(e)}function b(e,t,n,r){var i=new c;return f(i,e),i.then(t,n,r)}O(c.prototype,{then:function(e,t,n){if(M(e)&&M(t)&&M(n))return this;var r=new c;return this.$$state.pending=this.$$state.pending||[],this.$$state.pending.push([r,e,t,n]),this.$$state.status>0&&d(this.$$state),r},catch:function(e){return this.then(null,e)},finally:function(e,t){return this.then((function(t){return m(t,y,e)}),(function(t){return m(t,v,e)}),t)}});var y=b;function x(e){if(!G(e))throw r("norslvr","Expected resolverFn, got '{0}'",e);var t=new c;return e((function(e){f(t,e)}),(function(e){p(t,e)})),t}return x.prototype=c.prototype,x.defer=s,x.reject=v,x.when=b,x.resolve=y,x.all=function(e){var t=new c,n=0,r=U(e)?[]:{};return k(e,(function(e,i){n++,b(e).then((function(e){r[i]=e,--n||f(t,r)}),(function(e){p(t,e)}))})),0===n&&f(t,r),t},x.race=function(e){var t=s();return k(e,(function(e){b(e).then(t.resolve,t.reject)})),t.promise},x}function Mr(e){return!!e.pur}function zr(e){e.pur=!0}function Lr(e){e.$$state&&zr(e.$$state)}function Br(){this.$get=["$window","$timeout",function(e,t){var n=e.requestAnimationFrame||e.webkitRequestAnimationFrame,r=e.cancelAnimationFrame||e.webkitCancelAnimationFrame||e.webkitCancelRequestAnimationFrame,i=!!n,o=i?function(e){var t=n(e);return function(){r(t)}}:function(e){var n=t(e,16.66,!1);return function(){t.cancel(n)}};return o.supported=i,o}]}function Fr(){var e=10,t=i("$rootScope"),n=null,r=null;this.digestTtl=function(t){return arguments.length&&(e=t),e},this.$get=["$exceptionHandler","$parse","$browser",function(i,a,s){function l(e){e.currentScope.$$destroyed=!0}function c(){this.$id=S(),this.$$phase=this.$parent=this.$$watchers=this.$$nextSibling=this.$$prevSibling=this.$$childHead=this.$$childTail=null,this.$root=this,this.$$destroyed=!1,this.$$suspended=!1,this.$$listeners={},this.$$listenerCount={},this.$$watchersCount=0,this.$$isolateBindings=null}c.prototype={constructor:c,$new:function(e,t){var n;return t=t||this,e?(n=new c).$root=this.$root:(this.$$ChildScope||(this.$$ChildScope=function(e){function t(){this.$$watchers=this.$$nextSibling=this.$$childHead=this.$$childTail=null,this.$$listeners={},this.$$listenerCount={},this.$$watchersCount=0,this.$id=S(),this.$$ChildScope=null,this.$$suspended=!1}return t.prototype=e,t}(this)),n=new this.$$ChildScope),n.$parent=t,n.$$prevSibling=t.$$childTail,t.$$childHead?(t.$$childTail.$$nextSibling=n,t.$$childTail=n):t.$$childHead=t.$$childTail=n,(e||t!==this)&&n.$on("$destroy",l),n},$watch:function(e,t,r,i){var o=a(e),s=G(t)?t:D;if(o.$$watchDelegate)return o.$$watchDelegate(this,s,r,o,e);var l=this,c=l.$$watchers,u={fn:s,last:x,get:o,exp:i||e,eq:!!r};return n=null,c||((c=l.$$watchers=[]).$$digestWatchIndex=-1),c.unshift(u),c.$$digestWatchIndex++,b(this,1),function(){var e=ie(c,u);e>=0&&(b(l,-1),e<c.$$digestWatchIndex&&c.$$digestWatchIndex--),n=null}},$watchGroup:function(e,t){var n=new Array(e.length),r=new Array(e.length),i=[],o=this,a=!1,s=!0;if(!e.length){var l=!0;return o.$evalAsync((function(){l&&t(r,r,o)})),function(){l=!1}}if(1===e.length)return this.$watch(e[0],(function(e,i,o){r[0]=e,n[0]=i,t(r,e===i?r:n,o)}));function c(){a=!1;try{s?(s=!1,t(r,r,o)):t(r,n,o)}finally{for(var i=0;i<e.length;i++)n[i]=r[i]}}return k(e,(function(e,t){var n=o.$watch(e,(function(e){r[t]=e,a||(a=!0,o.$evalAsync(c))}));i.push(n)})),function(){for(;i.length;)i.shift()()}},$watchCollection:function(e,t){g.$$pure=a(e).literal,g.$stateful=!g.$$pure;var n,r,i,o=this,s=t.length>1,l=0,c=a(e,g),d=[],f={},p=!0,h=0;function g(e){var t,i,o,a;if(!M(n=e)){if(L(n))if(w(n)){r!==d&&(h=(r=d).length=0,l++),t=n.length,h!==t&&(l++,r.length=h=t);for(var s=0;s<t;s++)a=r[s],o=n[s],a!=a&&o!=o||a===o||(l++,r[s]=o)}else{for(i in r!==f&&(r=f={},h=0,l++),t=0,n)u.call(n,i)&&(t++,o=n[i],a=r[i],i in r?a!=a&&o!=o||a===o||(l++,r[i]=o):(h++,r[i]=o,l++));if(h>t)for(i in l++,r)u.call(n,i)||(h--,delete r[i])}else r!==n&&(r=n,l++);return l}}return this.$watch(c,(function(){if(p?(p=!1,t(n,n,o)):t(n,i,o),s)if(L(n))if(w(n)){i=new Array(n.length);for(var e=0;e<n.length;e++)i[e]=n[e]}else for(var r in i={},n)u.call(n,r)&&(i[r]=n[r]);else i=n}))},$digest:function(){var o,a,l,c,u,h,b,y,w,k=e,E=f.length?d:this,S=[];v("$digest"),s.$$checkUrlChange(),this===d&&null!==r&&(s.defer.cancel(r),A()),n=null;do{u=!1,b=E;for(var C=0;C<f.length;C++){try{(0,(w=f[C]).fn)(w.scope,w.locals)}catch(e){i(e)}n=null}f.length=0;e:do{if(c=!b.$$suspended&&b.$$watchers)for(c.$$digestWatchIndex=c.length;c.$$digestWatchIndex--;)try{if(o=c[c.$$digestWatchIndex])if((a=(0,o.get)(b))===(l=o.last)||(o.eq?se(a,l):j(a)&&j(l))){if(o===n){u=!1;break e}}else u=!0,n=o,o.last=o.eq?oe(a,null):a,(0,o.fn)(a,l===x?a:l,b),k<5&&(S[y=4-k]||(S[y]=[]),S[y].push({msg:G(o.exp)?"fn: "+(o.exp.name||o.exp.toString()):o.exp,newVal:a,oldVal:l}))}catch(e){i(e)}if(!(h=!b.$$suspended&&b.$$watchersCount&&b.$$childHead||b!==E&&b.$$nextSibling))for(;b!==E&&!(h=b.$$nextSibling);)b=b.$parent}while(b=h);if((u||f.length)&&!k--)throw m(),t("infdig","{0} $digest() iterations reached. Aborting!\nWatchers fired in the last 5 iterations: {1}",e,S)}while(u||f.length);for(m();g<p.length;)try{p[g++]()}catch(e){i(e)}p.length=g=0,s.$$checkUrlChange()},$suspend:function(){this.$$suspended=!0},$isSuspended:function(){return this.$$suspended},$resume:function(){this.$$suspended=!1},$destroy:function(){if(!this.$$destroyed){var e=this.$parent;for(var t in this.$broadcast("$destroy"),this.$$destroyed=!0,this===d&&s.$$applicationDestroyed(),b(this,-this.$$watchersCount),this.$$listenerCount)y(this,this.$$listenerCount[t],t);e&&e.$$childHead===this&&(e.$$childHead=this.$$nextSibling),e&&e.$$childTail===this&&(e.$$childTail=this.$$prevSibling),this.$$prevSibling&&(this.$$prevSibling.$$nextSibling=this.$$nextSibling),this.$$nextSibling&&(this.$$nextSibling.$$prevSibling=this.$$prevSibling),this.$destroy=this.$digest=this.$apply=this.$evalAsync=this.$applyAsync=D,this.$on=this.$watch=this.$watchGroup=function(){return D},this.$$listeners={},this.$$nextSibling=null,function e(t){9===o&&(t.$$childHead&&e(t.$$childHead),t.$$nextSibling&&e(t.$$nextSibling)),t.$parent=t.$$nextSibling=t.$$prevSibling=t.$$childHead=t.$$childTail=t.$root=t.$$watchers=null}(this)}},$eval:function(e,t){return a(e)(this,t)},$evalAsync:function(e,t){d.$$phase||f.length||s.defer((function(){f.length&&d.$digest()}),null,"$evalAsync"),f.push({scope:this,fn:a(e),locals:t})},$$postDigest:function(e){p.push(e)},$apply:function(e){try{v("$apply");try{return this.$eval(e)}finally{m()}}catch(e){i(e)}finally{try{d.$digest()}catch(e){throw i(e),e}}},$applyAsync:function(e){var t=this;e&&h.push((function(){t.$eval(e)})),e=a(e),null===r&&(r=s.defer((function(){d.$apply(A)}),null,"$applyAsync"))},$on:function(e,t){var n=this.$$listeners[e];n||(this.$$listeners[e]=n=[]),n.push(t);var r=this;do{r.$$listenerCount[e]||(r.$$listenerCount[e]=0),r.$$listenerCount[e]++}while(r=r.$parent);var i=this;return function(){var r=n.indexOf(t);-1!==r&&(delete n[r],y(i,1,e))}},$emit:function(e,t){var n,r,o,a=[],s=this,l=!1,c={name:e,targetScope:s,stopPropagation:function(){l=!0},preventDefault:function(){c.defaultPrevented=!0},defaultPrevented:!1},u=ue([c],arguments,1);do{for(n=s.$$listeners[e]||a,c.currentScope=s,r=0,o=n.length;r<o;r++)if(n[r])try{n[r].apply(null,u)}catch(e){i(e)}else n.splice(r,1),r--,o--;if(l)break;s=s.$parent}while(s);return c.currentScope=null,c},$broadcast:function(e,t){var n=this,r=n,o=n,a={name:e,targetScope:n,preventDefault:function(){a.defaultPrevented=!0},defaultPrevented:!1};if(!n.$$listenerCount[e])return a;for(var s,l,c,u=ue([a],arguments,1);r=o;){for(a.currentScope=r,l=0,c=(s=r.$$listeners[e]||[]).length;l<c;l++)if(s[l])try{s[l].apply(null,u)}catch(e){i(e)}else s.splice(l,1),l--,c--;if(!(o=r.$$listenerCount[e]&&r.$$childHead||r!==n&&r.$$nextSibling))for(;r!==n&&!(o=r.$$nextSibling);)r=r.$parent}return a.currentScope=null,a}};var d=new c,f=d.$$asyncQueue=[],p=d.$$postDigestQueue=[],h=d.$$applyAsyncQueue=[],g=0;return d;function v(e){if(d.$$phase)throw t("inprog","{0} already in progress",d.$$phase);d.$$phase=e}function m(){d.$$phase=null}function b(e,t){do{e.$$watchersCount+=t}while(e=e.$parent)}function y(e,t,n){do{e.$$listenerCount[n]-=t,0===e.$$listenerCount[n]&&delete e.$$listenerCount[n]}while(e=e.$parent)}function x(){}function A(){for(;h.length;)try{h.shift()()}catch(e){i(e)}r=null}}]}function qr(){var e=/^\s*(https?|s?ftp|mailto|tel|file):/,t=/^\s*((https?|ftp|file|blob):|data:image\/)/;this.aHrefSanitizationTrustedUrlList=function(t){return z(t)?(e=t,this):e},this.imgSrcSanitizationTrustedUrlList=function(e){return z(e)?(t=e,this):t},this.$get=function(){return function(n,r){var i=r?t:e,o=li(n&&n.trim()).href;return""===o||o.match(i)?n:"unsafe:"+o}}}_r.prototype={compile:function(e){var t=this;this.state={nextId:0,filters:{},fn:{vars:[],body:[],own:{}},assign:{vars:[],body:[],own:{}},inputs:[]},Sr(e,t.$filter);var n,r="";if(this.stage="assign",n=Or(e)){this.state.computing="assign";var i=this.nextId();this.recurse(n,i),this.return_(i),r="fn.assign="+this.generateFunction("assign","s,v,l")}var o=Cr(e.body);t.stage="inputs",k(o,(function(e,n){var r="fn"+n;t.state[r]={vars:[],body:[],own:{}},t.state.computing=r;var i=t.nextId();t.recurse(e,i),t.return_(i),t.state.inputs.push({name:r,isPure:e.isPure}),e.watchId=n})),this.state.computing="fn",this.stage="main",this.recurse(e);var a='"'+this.USE+" "+this.STRICT+'";\n'+this.filterPrefix()+"var fn="+this.generateFunction("fn","s,l,a,i")+r+this.watchFns()+"return fn;",s=new Function("$filter","getStringValue","ifDefined","plus",a)(this.$filter,br,Ar,Er);return this.state=this.stage=void 0,s},USE:"use",STRICT:"strict",watchFns:function(){var e=[],t=this.state.inputs,n=this;return k(t,(function(t){e.push("var "+t.name+"="+n.generateFunction(t.name,"s")),t.isPure&&e.push(t.name,".isPure="+JSON.stringify(t.isPure)+";")})),t.length&&e.push("fn.inputs=["+t.map((function(e){return e.name})).join(",")+"];"),e.join("")},generateFunction:function(e,t){return"function("+t+"){"+this.varsPrefix(e)+this.body(e)+"};"},filterPrefix:function(){var e=[],t=this;return k(this.state.filters,(function(n,r){e.push(n+"=$filter("+t.escape(r)+")")})),e.length?"var "+e.join(",")+";":""},varsPrefix:function(e){return this.state[e].vars.length?"var "+this.state[e].vars.join(",")+";":""},body:function(e){return this.state[e].body.join("")},recurse:function(e,t,n,r,i,o){var a,s,l,c,u,d=this;if(r=r||D,!o&&z(e.watchId))return t=t||this.nextId(),void this.if_("i",this.lazyAssign(t,this.computedMember("i",e.watchId)),this.lazyRecurse(e,t,n,r,i,!0));switch(e.type){case kr.Program:k(e.body,(function(t,n){d.recurse(t.expression,void 0,void 0,(function(e){s=e})),n!==e.body.length-1?d.current().body.push(s,";"):d.return_(s)}));break;case kr.Literal:c=this.escape(e.value),this.assign(t,c),r(t||c);break;case kr.UnaryExpression:this.recurse(e.argument,void 0,void 0,(function(e){s=e})),c=e.operator+"("+this.ifDefined(s,0)+")",this.assign(t,c),r(c);break;case kr.BinaryExpression:this.recurse(e.left,void 0,void 0,(function(e){a=e})),this.recurse(e.right,void 0,void 0,(function(e){s=e})),c="+"===e.operator?this.plus(a,s):"-"===e.operator?this.ifDefined(a,0)+e.operator+this.ifDefined(s,0):"("+a+")"+e.operator+"("+s+")",this.assign(t,c),r(c);break;case kr.LogicalExpression:t=t||this.nextId(),d.recurse(e.left,t),d.if_("&&"===e.operator?t:d.not(t),d.lazyRecurse(e.right,t)),r(t);break;case kr.ConditionalExpression:t=t||this.nextId(),d.recurse(e.test,t),d.if_(t,d.lazyRecurse(e.alternate,t),d.lazyRecurse(e.consequent,t)),r(t);break;case kr.Identifier:t=t||this.nextId(),n&&(n.context="inputs"===d.stage?"s":this.assign(this.nextId(),this.getHasOwnProperty("l",e.name)+"?l:s"),n.computed=!1,n.name=e.name),d.if_("inputs"===d.stage||d.not(d.getHasOwnProperty("l",e.name)),(function(){d.if_("inputs"===d.stage||"s",(function(){i&&1!==i&&d.if_(d.isNull(d.nonComputedMember("s",e.name)),d.lazyAssign(d.nonComputedMember("s",e.name),"{}")),d.assign(t,d.nonComputedMember("s",e.name))}))}),t&&d.lazyAssign(t,d.nonComputedMember("l",e.name))),r(t);break;case kr.MemberExpression:a=n&&(n.context=this.nextId())||this.nextId(),t=t||this.nextId(),d.recurse(e.object,a,void 0,(function(){d.if_(d.notNull(a),(function(){e.computed?(s=d.nextId(),d.recurse(e.property,s),d.getStringValue(s),i&&1!==i&&d.if_(d.not(d.computedMember(a,s)),d.lazyAssign(d.computedMember(a,s),"{}")),c=d.computedMember(a,s),d.assign(t,c),n&&(n.computed=!0,n.name=s)):(i&&1!==i&&d.if_(d.isNull(d.nonComputedMember(a,e.property.name)),d.lazyAssign(d.nonComputedMember(a,e.property.name),"{}")),c=d.nonComputedMember(a,e.property.name),d.assign(t,c),n&&(n.computed=!1,n.name=e.property.name))}),(function(){d.assign(t,"undefined")})),r(t)}),!!i);break;case kr.CallExpression:t=t||this.nextId(),e.filter?(s=d.filter(e.callee.name),l=[],k(e.arguments,(function(e){var t=d.nextId();d.recurse(e,t),l.push(t)})),c=s+"("+l.join(",")+")",d.assign(t,c),r(t)):(s=d.nextId(),a={},l=[],d.recurse(e.callee,s,a,(function(){d.if_(d.notNull(s),(function(){k(e.arguments,(function(t){d.recurse(t,e.constant?void 0:d.nextId(),void 0,(function(e){l.push(e)}))})),c=a.name?d.member(a.context,a.name,a.computed)+"("+l.join(",")+")":s+"("+l.join(",")+")",d.assign(t,c)}),(function(){d.assign(t,"undefined")})),r(t)})));break;case kr.AssignmentExpression:s=this.nextId(),a={},this.recurse(e.left,void 0,a,(function(){d.if_(d.notNull(a.context),(function(){d.recurse(e.right,s),c=d.member(a.context,a.name,a.computed)+e.operator+s,d.assign(t,c),r(t||c)}))}),1);break;case kr.ArrayExpression:l=[],k(e.elements,(function(t){d.recurse(t,e.constant?void 0:d.nextId(),void 0,(function(e){l.push(e)}))})),c="["+l.join(",")+"]",this.assign(t,c),r(t||c);break;case kr.ObjectExpression:l=[],u=!1,k(e.properties,(function(e){e.computed&&(u=!0)})),u?(t=t||this.nextId(),this.assign(t,"{}"),k(e.properties,(function(e){e.computed?(a=d.nextId(),d.recurse(e.key,a)):a=e.key.type===kr.Identifier?e.key.name:""+e.key.value,s=d.nextId(),d.recurse(e.value,s),d.assign(d.member(t,a,e.computed),s)}))):(k(e.properties,(function(t){d.recurse(t.value,e.constant?void 0:d.nextId(),void 0,(function(e){l.push(d.escape(t.key.type===kr.Identifier?t.key.name:""+t.key.value)+":"+e)}))})),c="{"+l.join(",")+"}",this.assign(t,c)),r(t||c);break;case kr.ThisExpression:this.assign(t,"s"),r(t||"s");break;case kr.LocalsExpression:this.assign(t,"l"),r(t||"l");break;case kr.NGValueParameter:this.assign(t,"v"),r(t||"v")}},getHasOwnProperty:function(e,t){var n=e+"."+t,r=this.current().own;return r.hasOwnProperty(n)||(r[n]=this.nextId(!1,e+"&&("+this.escape(t)+" in "+e+")")),r[n]},assign:function(e,t){if(e)return this.current().body.push(e,"=",t,";"),e},filter:function(e){return this.state.filters.hasOwnProperty(e)||(this.state.filters[e]=this.nextId(!0)),this.state.filters[e]},ifDefined:function(e,t){return"ifDefined("+e+","+this.escape(t)+")"},plus:function(e,t){return"plus("+e+","+t+")"},return_:function(e){this.current().body.push("return ",e,";")},if_:function(e,t,n){if(!0===e)t();else{var r=this.current().body;r.push("if(",e,"){"),t(),r.push("}"),n&&(r.push("else{"),n(),r.push("}"))}},not:function(e){return"!("+e+")"},isNull:function(e){return e+"==null"},notNull:function(e){return e+"!=null"},nonComputedMember:function(e,t){return/^[$_a-zA-Z][$_a-zA-Z0-9]*$/.test(t)?e+"."+t:e+'["'+t.replace(/[^$_a-zA-Z0-9]/g,this.stringEscapeFn)+'"]'},computedMember:function(e,t){return e+"["+t+"]"},member:function(e,t,n){return n?this.computedMember(e,t):this.nonComputedMember(e,t)},getStringValue:function(e){this.assign(e,"getStringValue("+e+")")},lazyRecurse:function(e,t,n,r,i,o){var a=this;return function(){a.recurse(e,t,n,r,i,o)}},lazyAssign:function(e,t){var n=this;return function(){n.assign(e,t)}},stringEscapeRegex:/[^ a-zA-Z0-9]/g,stringEscapeFn:function(e){return"\\u"+("0000"+e.charCodeAt(0).toString(16)).slice(-4)},escape:function(e){if(F(e))return"'"+e.replace(this.stringEscapeRegex,this.stringEscapeFn)+"'";if(q(e))return e.toString();if(!0===e)return"true";if(!1===e)return"false";if(null===e)return"null";if(void 0===e)return"undefined";throw vr("esc","IMPOSSIBLE")},nextId:function(e,t){var n="v"+this.state.nextId++;return e||this.current().vars.push(n+(t?"="+t:"")),n},current:function(){return this.state[this.state.computing]}},Tr.prototype={compile:function(e){var t,n,r=this;Sr(e,r.$filter),(t=Or(e))&&(n=this.recurse(t));var i,o=Cr(e.body);o&&(i=[],k(o,(function(e,t){var n=r.recurse(e);n.isPure=e.isPure,e.input=n,i.push(n),e.watchId=t})));var a=[];k(e.body,(function(e){a.push(r.recurse(e.expression))}));var s=0===e.body.length?D:1===e.body.length?a[0]:function(e,t){var n;return k(a,(function(r){n=r(e,t)})),n};return n&&(s.assign=function(e,t,r){return n(e,r,t)}),i&&(s.inputs=i),s},recurse:function(e,t,n){var r,i,o,a=this;if(e.input)return this.inputs(e.input,e.watchId);switch(e.type){case kr.Literal:return this.value(e.value,t);case kr.UnaryExpression:return i=this.recurse(e.argument),this["unary"+e.operator](i,t);case kr.BinaryExpression:case kr.LogicalExpression:return r=this.recurse(e.left),i=this.recurse(e.right),this["binary"+e.operator](r,i,t);case kr.ConditionalExpression:return this["ternary?:"](this.recurse(e.test),this.recurse(e.alternate),this.recurse(e.consequent),t);case kr.Identifier:return a.identifier(e.name,t,n);case kr.MemberExpression:return r=this.recurse(e.object,!1,!!n),e.computed||(i=e.property.name),e.computed&&(i=this.recurse(e.property)),e.computed?this.computedMember(r,i,t,n):this.nonComputedMember(r,i,t,n);case kr.CallExpression:return o=[],k(e.arguments,(function(e){o.push(a.recurse(e))})),e.filter&&(i=this.$filter(e.callee.name)),e.filter||(i=this.recurse(e.callee,!0)),e.filter?function(e,n,r,a){for(var s=[],l=0;l<o.length;++l)s.push(o[l](e,n,r,a));var c=i.apply(void 0,s,a);return t?{context:void 0,name:void 0,value:c}:c}:function(e,n,r,a){var s,l=i(e,n,r,a);if(null!=l.value){for(var c=[],u=0;u<o.length;++u)c.push(o[u](e,n,r,a));s=l.value.apply(l.context,c)}return t?{value:s}:s};case kr.AssignmentExpression:return r=this.recurse(e.left,!0,1),i=this.recurse(e.right),function(e,n,o,a){var s=r(e,n,o,a),l=i(e,n,o,a);return s.context[s.name]=l,t?{value:l}:l};case kr.ArrayExpression:return o=[],k(e.elements,(function(e){o.push(a.recurse(e))})),function(e,n,r,i){for(var a=[],s=0;s<o.length;++s)a.push(o[s](e,n,r,i));return t?{value:a}:a};case kr.ObjectExpression:return o=[],k(e.properties,(function(e){e.computed?o.push({key:a.recurse(e.key),computed:!0,value:a.recurse(e.value)}):o.push({key:e.key.type===kr.Identifier?e.key.name:""+e.key.value,computed:!1,value:a.recurse(e.value)})})),function(e,n,r,i){for(var a={},s=0;s<o.length;++s)o[s].computed?a[o[s].key(e,n,r,i)]=o[s].value(e,n,r,i):a[o[s].key]=o[s].value(e,n,r,i);return t?{value:a}:a};case kr.ThisExpression:return function(e){return t?{value:e}:e};case kr.LocalsExpression:return function(e,n){return t?{value:n}:n};case kr.NGValueParameter:return function(e,n,r){return t?{value:r}:r}}},"unary+":function(e,t){return function(n,r,i,o){var a=e(n,r,i,o);return a=z(a)?+a:0,t?{value:a}:a}},"unary-":function(e,t){return function(n,r,i,o){var a=e(n,r,i,o);return a=z(a)?-a:-0,t?{value:a}:a}},"unary!":function(e,t){return function(n,r,i,o){var a=!e(n,r,i,o);return t?{value:a}:a}},"binary+":function(e,t,n){return function(r,i,o,a){var s=Er(e(r,i,o,a),t(r,i,o,a));return n?{value:s}:s}},"binary-":function(e,t,n){return function(r,i,o,a){var s=e(r,i,o,a),l=t(r,i,o,a),c=(z(s)?s:0)-(z(l)?l:0);return n?{value:c}:c}},"binary*":function(e,t,n){return function(r,i,o,a){var s=e(r,i,o,a)*t(r,i,o,a);return n?{value:s}:s}},"binary/":function(e,t,n){return function(r,i,o,a){var s=e(r,i,o,a)/t(r,i,o,a);return n?{value:s}:s}},"binary%":function(e,t,n){return function(r,i,o,a){var s=e(r,i,o,a)%t(r,i,o,a);return n?{value:s}:s}},"binary===":function(e,t,n){return function(r,i,o,a){var s=e(r,i,o,a)===t(r,i,o,a);return n?{value:s}:s}},"binary!==":function(e,t,n){return function(r,i,o,a){var s=e(r,i,o,a)!==t(r,i,o,a);return n?{value:s}:s}},"binary==":function(e,t,n){return function(r,i,o,a){var s=e(r,i,o,a)==t(r,i,o,a);return n?{value:s}:s}},"binary!=":function(e,t,n){return function(r,i,o,a){var s=e(r,i,o,a)!=t(r,i,o,a);return n?{value:s}:s}},"binary<":function(e,t,n){return function(r,i,o,a){var s=e(r,i,o,a)<t(r,i,o,a);return n?{value:s}:s}},"binary>":function(e,t,n){return function(r,i,o,a){var s=e(r,i,o,a)>t(r,i,o,a);return n?{value:s}:s}},"binary<=":function(e,t,n){return function(r,i,o,a){var s=e(r,i,o,a)<=t(r,i,o,a);return n?{value:s}:s}},"binary>=":function(e,t,n){return function(r,i,o,a){var s=e(r,i,o,a)>=t(r,i,o,a);return n?{value:s}:s}},"binary&&":function(e,t,n){return function(r,i,o,a){var s=e(r,i,o,a)&&t(r,i,o,a);return n?{value:s}:s}},"binary||":function(e,t,n){return function(r,i,o,a){var s=e(r,i,o,a)||t(r,i,o,a);return n?{value:s}:s}},"ternary?:":function(e,t,n,r){return function(i,o,a,s){var l=e(i,o,a,s)?t(i,o,a,s):n(i,o,a,s);return r?{value:l}:l}},value:function(e,t){return function(){return t?{context:void 0,name:void 0,value:e}:e}},identifier:function(e,t,n){return function(r,i,o,a){var s=i&&e in i?i:r;n&&1!==n&&s&&null==s[e]&&(s[e]={});var l=s?s[e]:void 0;return t?{context:s,name:e,value:l}:l}},computedMember:function(e,t,n,r){return function(i,o,a,s){var l,c,u=e(i,o,a,s);return null!=u&&(l=br(l=t(i,o,a,s)),r&&1!==r&&u&&!u[l]&&(u[l]={}),c=u[l]),n?{context:u,name:l,value:c}:c}},nonComputedMember:function(e,t,n,r){return function(i,o,a,s){var l=e(i,o,a,s);r&&1!==r&&l&&null==l[t]&&(l[t]={});var c=null!=l?l[t]:void 0;return n?{context:l,name:t,value:c}:c}},inputs:function(e,t){return function(n,r,i,o){return o?o[t]:e(n,r,i)}}},jr.prototype={constructor:jr,parse:function(e){var t=this.getAst(e),n=this.astCompiler.compile(t.ast);return n.literal=function(e){return 0===e.body.length||1===e.body.length&&(e.body[0].expression.type===kr.Literal||e.body[0].expression.type===kr.ArrayExpression||e.body[0].expression.type===kr.ObjectExpression)}(t.ast),n.constant=function(e){return e.constant}(t.ast),n.oneTime=t.oneTime,n},getAst:function(e){var t=!1;return":"===(e=e.trim()).charAt(0)&&":"===e.charAt(1)&&(t=!0,e=e.substring(2)),{ast:this.ast.ast(e),oneTime:t}}};var Vr=i("$sce"),Ur={HTML:"html",CSS:"css",MEDIA_URL:"mediaUrl",URL:"url",RESOURCE_URL:"resourceUrl",JS:"js"},Hr=/_([a-z])/g;function Gr(e){return e.replace(Hr,Qe)}function Wr(e){var t=[];return z(e)&&k(e,(function(e){t.push(function(e){if("self"===e)return e;if(F(e)){if(e.indexOf("***")>-1)throw Vr("iwcard","Illegal sequence *** in string matcher. String: {0}",e);return e=ee(e).replace(/\\\*\\\*/g,".*").replace(/\\\*/g,"[^:/.?&;]*"),new RegExp("^"+e+"$")}if(W(e))return new RegExp("^"+e.source+"$");throw Vr("imatcher",'Matchers may only be "self", string patterns or RegExp objects')}(e))})),t}function Yr(){this.SCE_CONTEXTS=Ur;var t=["self"],n=[];this.trustedResourceUrlList=function(e){return arguments.length&&(t=Wr(e)),t},Object.defineProperty(this,"resourceUrlWhitelist",{get:function(){return this.trustedResourceUrlList},set:function(e){this.trustedResourceUrlList=e}}),this.bannedResourceUrlList=function(e){return arguments.length&&(n=Wr(e)),n},Object.defineProperty(this,"resourceUrlBlacklist",{get:function(){return this.bannedResourceUrlList},set:function(e){this.bannedResourceUrlList=e}}),this.$get=["$injector","$$sanitizeUri",function(r,i){var o=function(e){throw Vr("unsafe","Attempting to use an unsafe value in a safe context.")};function a(t,n){return"self"===t?ci(n,ai)||function(t){return ci(t,function(){if(e.document.baseURI)return e.document.baseURI;ii||((ii=e.document.createElement("a")).href=".",ii=ii.cloneNode(!1));return ii.href}())}(n):!!t.exec(n.href)}function s(e){var t=function(e){this.$$unwrapTrustedValue=function(){return e}};return e&&(t.prototype=new e),t.prototype.valueOf=function(){return this.$$unwrapTrustedValue()},t.prototype.toString=function(){return this.$$unwrapTrustedValue().toString()},t}r.has("$sanitize")&&(o=r.get("$sanitize"));var l=s(),c={};return c[Ur.HTML]=s(l),c[Ur.CSS]=s(l),c[Ur.MEDIA_URL]=s(l),c[Ur.URL]=s(c[Ur.MEDIA_URL]),c[Ur.JS]=s(l),c[Ur.RESOURCE_URL]=s(c[Ur.URL]),{trustAs:function(e,t){var n=c.hasOwnProperty(e)?c[e]:null;if(!n)throw Vr("icontext","Attempted to trust a value in invalid context. Context: {0}; Value: {1}",e,t);if(null===t||M(t)||""===t)return t;if("string"!=typeof t)throw Vr("itype","Attempted to trust a non-string value in a content requiring a string: Context: {0}",e);return new n(t)},getTrusted:function(e,r){if(null===r||M(r)||""===r)return r;var s=c.hasOwnProperty(e)?c[e]:null;if(s&&r instanceof s)return r.$$unwrapTrustedValue();if(G(r.$$unwrapTrustedValue)&&(r=r.$$unwrapTrustedValue()),e===Ur.MEDIA_URL||e===Ur.URL)return i(r.toString(),e===Ur.MEDIA_URL);if(e===Ur.RESOURCE_URL){if(function(e){var r,i,o=li(e.toString()),s=!1;for(r=0,i=t.length;r<i;r++)if(a(t[r],o)){s=!0;break}if(s)for(r=0,i=n.length;r<i;r++)if(a(n[r],o)){s=!1;break}return s}(r))return r;throw Vr("insecurl","Blocked loading resource from url not allowed by $sceDelegate policy. URL: {0}",r.toString())}if(e===Ur.HTML)return o(r);throw Vr("unsafe","Attempting to use an unsafe value in a safe context.")},valueOf:function(e){return e instanceof l?e.$$unwrapTrustedValue():e}}}]}function Xr(){var e=!0;this.enabled=function(t){return arguments.length&&(e=!!t),e},this.$get=["$parse","$sceDelegate",function(t,n){if(e&&o<8)throw Vr("iequirks","Strict Contextual Escaping does not support Internet Explorer version < 11 in quirks mode. You can fix this by adding the text <!doctype html> to the top of your HTML document. See http://docs.angularjs.org/api/ng.$sce for more information.");var r=qe(Ur);r.isEnabled=function(){return e},r.trustAs=n.trustAs,r.getTrusted=n.getTrusted,r.valueOf=n.valueOf,e||(r.trustAs=r.getTrusted=function(e,t){return t},r.valueOf=R),r.parseAs=function(e,n){var i=t(n);return i.literal&&i.constant?i:t(n,(function(t){return r.getTrusted(e,t)}))};var i=r.parseAs,a=r.getTrusted,s=r.trustAs;return k(Ur,(function(e,t){var n=d(t);r[Gr("parse_as_"+n)]=function(t){return i(e,t)},r[Gr("get_trusted_"+n)]=function(t){return a(e,t)},r[Gr("trust_as_"+n)]=function(t){return s(e,t)}})),r}]}function Zr(){this.$get=["$window","$document",function(e,t){var n={},r=!(!(e.nw&&e.nw.process)&&e.chrome&&(e.chrome.app&&e.chrome.app.runtime||!e.chrome.app&&e.chrome.runtime&&e.chrome.runtime.id))&&e.history&&e.history.pushState,i=T((/android (\d+)/.exec(d((e.navigator||{}).userAgent))||[])[1]),a=/Boxee/i.test((e.navigator||{}).userAgent),s=t[0]||{},l=s.body&&s.body.style,c=!1,u=!1;return l&&(c=!(!("transition"in l)&&!("webkitTransition"in l)),u=!(!("animation"in l)&&!("webkitAnimation"in l))),{history:!(!r||i<4||a),hasEvent:function(e){if("input"===e&&o)return!1;if(M(n[e])){var t=s.createElement("div");n[e]="on"+e in t}return n[e]},csp:le(),transitions:c,animations:u,android:i}}]}function Qr(){this.$get=I((function(e){return new Jr(e)}))}function Jr(e){var t={},n=[],r=this.ALL_TASKS_TYPE="$$all$$",i=this.DEFAULT_TASK_TYPE="$$default$$";function o(){var e=n.pop();return e&&e.cb}function a(e){for(var t=n.length-1;t>=0;--t){var r=n[t];if(r.type===e)return n.splice(t,1),r.cb}}this.completeTask=function(n,s){s=s||i;try{n()}finally{!function(e){t[e=e||i]&&(t[e]--,t[r]--)}(s);var l=t[s],c=t[r];if(!c||!l)for(var u,d=c?a:o;u=d(s);)try{u()}catch(t){e.error(t)}}},this.incTaskCount=function(e){t[e=e||i]=(t[e]||0)+1,t[r]=(t[r]||0)+1},this.notifyWhenNoPendingTasks=function(e,i){t[i=i||r]?n.push({type:i,cb:e}):e()}}var Kr=i("$templateRequest");function ei(){var e;this.httpOptions=function(t){return t?(e=t,this):e},this.$get=["$exceptionHandler","$templateCache","$http","$q","$sce",function(t,n,r,i,o){function a(s,l){a.totalPendingRequests++,F(s)&&!M(n.get(s))||(s=o.getTrustedResourceUrl(s));var c=r.defaults&&r.defaults.transformResponse;return U(c)?c=c.filter((function(e){return e!==zn})):c===zn&&(c=null),r.get(s,O({cache:n,transformResponse:c},e)).finally((function(){a.totalPendingRequests--})).then((function(e){return n.put(s,e.data)}),(function(e){l||(e=Kr("tpload","Failed to load template: {0} (HTTP status: {1} {2})",s,e.status,e.statusText),t(e));return i.reject(e)}))}return a.totalPendingRequests=0,a}]}function ti(){this.$get=["$rootScope","$browser","$location",function(e,t,n){var r={findBindings:function(e,t,n){var r=e.getElementsByClassName("ng-binding"),i=[];return k(r,(function(e){var r=y.element(e).data("$binding");r&&k(r,(function(r){n?new RegExp("(^|\\s)"+ee(t)+"(\\s|\\||$)").test(r)&&i.push(e):-1!==r.indexOf(t)&&i.push(e)}))})),i},findModels:function(e,t,n){for(var r=["ng-","data-ng-","ng\\:"],i=0;i<r.length;++i){var o="["+r[i]+"model"+(n?"=":"*=")+'"'+t+'"]',a=e.querySelectorAll(o);if(a.length)return a}},getLocation:function(){return n.url()},setLocation:function(t){t!==n.url()&&(n.url(t),e.$digest())},whenStable:function(e){t.notifyWhenNoOutstandingRequests(e)}};return r}]}var ni=i("$timeout");function ri(){this.$get=["$rootScope","$browser","$q","$$q","$exceptionHandler",function(e,t,n,r,i){var o={};function a(a,s,l){G(a)||(l=s,s=a,a=D);var c,u=de(arguments,3),d=z(l)&&!l,f=(d?r:n).defer(),p=f.promise;return c=t.defer((function(){try{f.resolve(a.apply(null,u))}catch(e){f.reject(e),i(e)}finally{delete o[p.$$timeoutId]}d||e.$apply()}),s,"$timeout"),p.$$timeoutId=c,o[c]=f,p}return a.cancel=function(e){if(!e)return!1;if(!e.hasOwnProperty("$$timeoutId"))throw ni("badprom","`$timeout.cancel()` called with a promise that was not generated by `$timeout()`.");if(!o.hasOwnProperty(e.$$timeoutId))return!1;var n=e.$$timeoutId,r=o[n];return Lr(r.promise),r.reject("canceled"),delete o[n],t.defer.cancel(n)},a}]}var ii,oi=e.document.createElement("a"),ai=li(e.location.href);oi.href="http://[::1]";var si="[::1]"===oi.hostname;function li(e){if(!F(e))return e;var t=e;o&&(oi.setAttribute("href",t),t=oi.href),oi.setAttribute("href",t);var n=oi.hostname;return!si&&n.indexOf(":")>-1&&(n="["+n+"]"),{href:oi.href,protocol:oi.protocol?oi.protocol.replace(/:$/,""):"",host:oi.host,search:oi.search?oi.search.replace(/^\?/,""):"",hash:oi.hash?oi.hash.replace(/^#/,""):"",hostname:n,port:oi.port,pathname:"/"===oi.pathname.charAt(0)?oi.pathname:"/"+oi.pathname}}function ci(e,t){return e=li(e),t=li(t),e.protocol===t.protocol&&e.host===t.host}function ui(){this.$get=I(e)}function di(e){var t=e[0]||{},n={},r="";function i(e){try{return decodeURIComponent(e)}catch(t){return e}}return function(){var e,o,a,s,l,c=function(e){try{return e.cookie||""}catch(e){return""}}(t);if(c!==r)for(e=(r=c).split("; "),n={},a=0;a<e.length;a++)(s=(o=e[a]).indexOf("="))>0&&(l=i(o.substring(0,s)),M(n[l])&&(n[l]=i(o.substring(s+1))));return n}}function fi(){this.$get=di}function pi(e){function t(n,r){if(L(n)){var i={};return k(n,(function(e,n){i[n]=t(n,e)})),i}return e.factory(n+"Filter",r)}this.register=t,this.$get=["$injector",function(e){return function(t){return e.get(t+"Filter")}}],t("currency",mi),t("date",_i),t("filter",hi),t("json",Ti),t("limitTo",Di),t("lowercase",ji),t("number",bi),t("orderBy",Ii),t("uppercase",Pi)}function hi(){return function(e,t,n,r){if(!w(e)){if(null==e)return e;throw i("filter")("notarray","Expected array but received: {0}",e)}var o,a;switch(r=r||"$",vi(t)){case"function":o=t;break;case"boolean":case"null":case"number":case"string":a=!0;case"object":o=function(e,t,n,r){var i=L(e)&&n in e;!0===t?t=se:G(t)||(t=function(e,t){return!M(e)&&(null===e||null===t?e===t:!(L(t)||L(e)&&!N(e))&&(e=d(""+e),t=d(""+t),-1!==e.indexOf(t)))});return function(o){return i&&!L(o)?gi(o,e[n],t,n,!1):gi(o,e,t,n,r)}}(t,n,r,a);break;default:return e}return Array.prototype.filter.call(e,o)}}function gi(e,t,n,r,i,o){var a=vi(e),s=vi(t);if("string"===s&&"!"===t.charAt(0))return!gi(e,t.substring(1),n,r,i);if(U(e))return e.some((function(e){return gi(e,t,n,r,i)}));switch(a){case"object":var l;if(i){for(l in e)if(l.charAt&&"$"!==l.charAt(0)&&gi(e[l],t,n,r,!0))return!0;return!o&&gi(e,t,n,r,!1)}if("object"===s){for(l in t){var c=t[l];if(!G(c)&&!M(c)){var u=l===r;if(!gi(u?e:e[l],c,n,r,u,u))return!1}}return!0}return n(e,t);case"function":return!1;default:return n(e,t)}}function vi(e){return null===e?"null":typeof e}di.$inject=["$document"],pi.$inject=["$provide"];function mi(e){var t=e.NUMBER_FORMATS;return function(e,n,r){M(n)&&(n=t.CURRENCY_SYM),M(r)&&(r=t.PATTERNS[1].maxFrac);var i=n?/\u00A4/g:/\s*\u00A4\s*/g;return null==e?e:yi(e,t.PATTERNS[1],t.GROUP_SEP,t.DECIMAL_SEP,r).replace(i,n)}}function bi(e){var t=e.NUMBER_FORMATS;return function(e,n){return null==e?e:yi(e,t.PATTERNS[0],t.GROUP_SEP,t.DECIMAL_SEP,n)}}function yi(e,t,n,r,i){if(!F(e)&&!q(e)||isNaN(e))return"";var o,a=!isFinite(e),s=!1,l=Math.abs(e)+"",c="";if(a)c="∞";else{(function(e,t,n,r){var i=e.d,o=i.length-e.i,a=(t=M(t)?Math.min(Math.max(n,o),r):+t)+e.i,s=i[a];if(a>0){i.splice(Math.max(e.i,a));for(var l=a;l<i.length;l++)i[l]=0}else{o=Math.max(0,o),e.i=1,i.length=Math.max(1,a=t+1),i[0]=0;for(var c=1;c<a;c++)i[c]=0}if(s>=5)if(a-1<0){for(var u=0;u>a;u--)i.unshift(0),e.i++;i.unshift(1),e.i++}else i[a-1]++;for(;o<Math.max(0,t);o++)i.push(0);var d=i.reduceRight((function(e,t,n,r){return t+=e,r[n]=t%10,Math.floor(t/10)}),0);d&&(i.unshift(d),e.i++)})(o=function(e){var t,n,r,i,o,a=0;for((n=e.indexOf("."))>-1&&(e=e.replace(".","")),(r=e.search(/e/i))>0?(n<0&&(n=r),n+=+e.slice(r+1),e=e.substring(0,r)):n<0&&(n=e.length),r=0;"0"===e.charAt(r);r++);if(r===(o=e.length))t=[0],n=1;else{for(o--;"0"===e.charAt(o);)o--;for(n-=r,t=[],i=0;r<=o;r++,i++)t[i]=+e.charAt(r)}return n>22&&(t=t.splice(0,21),a=n-1,n=1),{d:t,e:a,i:n}}(l),i,t.minFrac,t.maxFrac);var u=o.d,d=o.i,f=o.e,p=[];for(s=u.reduce((function(e,t){return e&&!t}),!0);d<0;)u.unshift(0),d++;d>0?p=u.splice(d,u.length):(p=u,u=[0]);var h=[];for(u.length>=t.lgSize&&h.unshift(u.splice(-t.lgSize,u.length).join(""));u.length>t.gSize;)h.unshift(u.splice(-t.gSize,u.length).join(""));u.length&&h.unshift(u.join("")),c=h.join(n),p.length&&(c+=r+p.join("")),f&&(c+="e+"+f)}return e<0&&!s?t.negPre+c+t.negSuf:t.posPre+c+t.posSuf}function xi(e,t,n,r){var i="";for((e<0||r&&e<=0)&&(r?e=1-e:(e=-e,i="-")),e=""+e;e.length<t;)e="0"+e;return n&&(e=e.substr(e.length-t)),i+e}function wi(e,t,n,r,i){return n=n||0,function(o){var a=o["get"+e]();return(n>0||a>-n)&&(a+=n),0===a&&-12===n&&(a=12),xi(a,t,r,i)}}function ki(e,t,n){return function(r,i){var o=r["get"+e]();return i[f((n?"STANDALONE":"")+(t?"SHORT":"")+e)][o]}}function Ai(e){var t=new Date(e,0,1).getDay();return new Date(e,0,(t<=4?5:12)-t)}function Ei(e){return function(t){var n,r=Ai(t.getFullYear()),i=+(n=t,new Date(n.getFullYear(),n.getMonth(),n.getDate()+(4-n.getDay())))-+r;return xi(1+Math.round(i/6048e5),e)}}function Si(e,t){return e.getFullYear()<=0?t.ERAS[0]:t.ERAS[1]}mi.$inject=["$locale"],bi.$inject=["$locale"];var Ci={yyyy:wi("FullYear",4,0,!1,!0),yy:wi("FullYear",2,0,!0,!0),y:wi("FullYear",1,0,!1,!0),MMMM:ki("Month"),MMM:ki("Month",!0),MM:wi("Month",2,1),M:wi("Month",1,1),LLLL:ki("Month",!1,!0),dd:wi("Date",2),d:wi("Date",1),HH:wi("Hours",2),H:wi("Hours",1),hh:wi("Hours",2,-12),h:wi("Hours",1,-12),mm:wi("Minutes",2),m:wi("Minutes",1),ss:wi("Seconds",2),s:wi("Seconds",1),sss:wi("Milliseconds",3),EEEE:ki("Day"),EEE:ki("Day",!0),a:function(e,t){return e.getHours()<12?t.AMPMS[0]:t.AMPMS[1]},Z:function(e,t,n){var r=-1*n,i=r>=0?"+":"";return i+=xi(Math[r>0?"floor":"ceil"](r/60),2)+xi(Math.abs(r%60),2)},ww:Ei(2),w:Ei(1),G:Si,GG:Si,GGG:Si,GGGG:function(e,t){return e.getFullYear()<=0?t.ERANAMES[0]:t.ERANAMES[1]}},$i=/((?:[^yMLdHhmsaZEwG']+)|(?:'(?:[^']|'')*')|(?:E+|y+|M+|L+|d+|H+|h+|m+|s+|a|Z|G+|w+))([\s\S]*)/,Oi=/^-?\d+$/;function _i(e){var t=/^(\d{4})-?(\d\d)-?(\d\d)(?:T(\d\d)(?::?(\d\d)(?::?(\d\d)(?:\.(\d+))?)?)?(Z|([+-])(\d\d):?(\d\d))?)?$/;return function(n,r,i){var o,a,s="",l=[];if(r=r||"mediumDate",r=e.DATETIME_FORMATS[r]||r,F(n)&&(n=Oi.test(n)?T(n):function(e){var n;if(n=e.match(t)){var r=new Date(0),i=0,o=0,a=n[8]?r.setUTCFullYear:r.setFullYear,s=n[8]?r.setUTCHours:r.setHours;n[9]&&(i=T(n[9]+n[10]),o=T(n[9]+n[11])),a.call(r,T(n[1]),T(n[2])-1,T(n[3]));var l=T(n[4]||0)-i,c=T(n[5]||0)-o,u=T(n[6]||0),d=Math.round(1e3*parseFloat("0."+(n[7]||0)));return s.call(r,l,c,u,d),r}return e}(n)),q(n)&&(n=new Date(n)),!V(n)||!isFinite(n.getTime()))return n;for(;r;)(a=$i.exec(r))?r=(l=ue(l,a,1)).pop():(l.push(r),r=null);var c=n.getTimezoneOffset();return i&&(c=me(i,c),n=ye(n,i,!0)),k(l,(function(t){s+=(o=Ci[t])?o(n,e.DATETIME_FORMATS,c):"''"===t?"'":t.replace(/(^'|'$)/g,"").replace(/''/g,"'")})),s}}function Ti(){return function(e,t){return M(t)&&(t=2),he(e,t)}}_i.$inject=["$locale"];var ji=I(d),Pi=I(f);function Di(){return function(e,t,n){return t=Math.abs(Number(t))===1/0?Number(t):T(t),j(t)?e:(q(e)&&(e=e.toString()),w(e)?(n=(n=!n||isNaN(n)?0:T(n))<0?Math.max(0,e.length+n):n,t>=0?Ri(e,n,n+t):0===n?Ri(e,t,e.length):Ri(e,Math.max(0,n+t),n)):e)}}function Ri(e,t,n){return F(e)?e.slice(t,n):p.call(e,t,n)}function Ii(e){return function(r,o,a,s){if(null==r)return r;if(!w(r))throw i("orderBy")("notarray","Expected array but received: {0}",r);U(o)||(o=[o]),0===o.length&&(o=["+"]);var l=o.map((function(t){var n=1,r=R;if(G(t))r=t;else if(F(t)&&("+"!==t.charAt(0)&&"-"!==t.charAt(0)||(n="-"===t.charAt(0)?-1:1,t=t.substring(1)),""!==t&&(r=e(t)).constant)){var i=r();r=function(e){return e[i]}}return{get:r,descending:n}})),c=a?-1:1,u=G(s)?s:n,d=Array.prototype.map.call(r,(function(e,n){return{value:e,tieBreaker:{value:n,type:"number",index:n},predicateValues:l.map((function(r){return function(e,n){var r=typeof e;null===e?r="null":"object"===r&&(e=function(e){if(G(e.valueOf)&&t(e=e.valueOf()))return e;if(N(e)&&t(e=e.toString()))return e;return e}(e));return{value:e,type:r,index:n}}(r.get(e),n)}))}}));return d.sort((function(e,t){for(var r=0,i=l.length;r<i;r++){var o=u(e.predicateValues[r],t.predicateValues[r]);if(o)return o*l[r].descending*c}return(u(e.tieBreaker,t.tieBreaker)||n(e.tieBreaker,t.tieBreaker))*c})),r=d.map((function(e){return e.value}))};function t(e){switch(typeof e){case"number":case"boolean":case"string":return!0;default:return!1}}function n(e,t){var n=0,r=e.type,i=t.type;if(r===i){var o=e.value,a=t.value;"string"===r?(o=o.toLowerCase(),a=a.toLowerCase()):"object"===r&&(L(o)&&(o=e.index),L(a)&&(a=t.index)),o!==a&&(n=o<a?-1:1)}else n="undefined"===r?1:"undefined"===i?-1:"null"===r?1:"null"===i||r<i?-1:1;return n}}function Ni(e){return G(e)&&(e={link:e}),e.restrict=e.restrict||"AC",I(e)}Ii.$inject=["$parse"];var Mi=I({restrict:"E",compile:function(e,t){if(!t.href&&!t.xlinkHref)return function(e,t){if("a"===t[0].nodeName.toLowerCase()){var n="[object SVGAnimatedString]"===v.call(t.prop("href"))?"xlink:href":"href";t.on("click",(function(e){t.attr(n)||e.preventDefault()}))}}}}),zi={};k(jt,(function(e,t){if("multiple"!==e){var n=yn("ng-"+t),r=i;"checked"===e&&(r=function(e,t,r){r.ngModel!==r[n]&&i(e,0,r)}),zi[n]=function(){return{restrict:"A",priority:100,link:r}}}function i(e,r,i){e.$watch(i[n],(function(e){i.$set(t,!!e)}))}})),k(Dt,(function(e,t){zi[t]=function(){return{priority:100,link:function(e,n,r){if("ngPattern"===t&&"/"===r.ngPattern.charAt(0)){var i=r.ngPattern.match(c);if(i)return void r.$set("ngPattern",new RegExp(i[1],i[2]))}e.$watch(r[t],(function(e){r.$set(t,e)}))}}}})),k(["src","srcset","href"],(function(e){var t=yn("ng-"+e);zi[t]=["$sce",function(n){return{priority:99,link:function(r,i,a){var s=e,l=e;"href"===e&&"[object SVGAnimatedString]"===v.call(i.prop("href"))&&(l="xlinkHref",a.$attr[l]="xlink:href",s=null),a.$set(t,n.getTrustedMediaUrl(a[t])),a.$observe(t,(function(t){t?(a.$set(l,t),o&&s&&i.prop(s,a[l])):"href"===e&&a.$set(l,null)}))}}}]}));var Li={$addControl:D,$getControls:I([]),$$renameControl:function(e,t){e.$name=t},$removeControl:D,$setValidity:D,$setDirty:D,$setPristine:D,$setSubmitted:D,$$setSubmitted:D};function Bi(e,t,n,r,i){this.$$controls=[],this.$error={},this.$$success={},this.$pending=void 0,this.$name=i(t.name||t.ngForm||"")(n),this.$dirty=!1,this.$pristine=!0,this.$valid=!0,this.$invalid=!1,this.$submitted=!1,this.$$parentForm=Li,this.$$element=e,this.$$animate=r,Ui(this)}Bi.$inject=["$element","$attrs","$scope","$animate","$interpolate"],Bi.prototype={$rollbackViewValue:function(){k(this.$$controls,(function(e){e.$rollbackViewValue()}))},$commitViewValue:function(){k(this.$$controls,(function(e){e.$commitViewValue()}))},$addControl:function(e){Me(e.$name,"input"),this.$$controls.push(e),e.$name&&(this[e.$name]=e),e.$$parentForm=this},$getControls:function(){return qe(this.$$controls)},$$renameControl:function(e,t){var n=e.$name;this[n]===e&&delete this[n],this[t]=e,e.$name=t},$removeControl:function(e){e.$name&&this[e.$name]===e&&delete this[e.$name],k(this.$pending,(function(t,n){this.$setValidity(n,null,e)}),this),k(this.$error,(function(t,n){this.$setValidity(n,null,e)}),this),k(this.$$success,(function(t,n){this.$setValidity(n,null,e)}),this),ie(this.$$controls,e),e.$$parentForm=Li},$setDirty:function(){this.$$animate.removeClass(this.$$element,Bo),this.$$animate.addClass(this.$$element,Fo),this.$dirty=!0,this.$pristine=!1,this.$$parentForm.$setDirty()},$setPristine:function(){this.$$animate.setClass(this.$$element,Bo,Fo+" ng-submitted"),this.$dirty=!1,this.$pristine=!0,this.$submitted=!1,k(this.$$controls,(function(e){e.$setPristine()}))},$setUntouched:function(){k(this.$$controls,(function(e){e.$setUntouched()}))},$setSubmitted:function(){for(var e=this;e.$$parentForm&&e.$$parentForm!==Li;)e=e.$$parentForm;e.$$setSubmitted()},$$setSubmitted:function(){this.$$animate.addClass(this.$$element,"ng-submitted"),this.$submitted=!0,k(this.$$controls,(function(e){e.$$setSubmitted&&e.$$setSubmitted()}))}},Hi({clazz:Bi,set:function(e,t,n){var r=e[t];r?-1===r.indexOf(n)&&r.push(n):e[t]=[n]},unset:function(e,t,n){var r=e[t];r&&(ie(r,n),0===r.length&&delete e[t])}});var Fi=function(e){return["$timeout","$parse",function(t,n){return{name:"form",restrict:e?"EAC":"E",require:["form","^^?form"],controller:Bi,compile:function(n,i){n.addClass(Bo).addClass(zo);var o=i.name?"name":!(!e||!i.ngForm)&&"ngForm";return{pre:function(e,n,i,a){var s=a[0];if(!("action"in i)){var l=function(t){e.$apply((function(){s.$commitViewValue(),s.$setSubmitted()})),t.preventDefault()};n[0].addEventListener("submit",l),n.on("$destroy",(function(){t((function(){n[0].removeEventListener("submit",l)}),0,!1)}))}(a[1]||s.$$parentForm).$addControl(s);var c=o?r(s.$name):D;o&&(c(e,s),i.$observe(o,(function(t){s.$name!==t&&(c(e,void 0),s.$$parentForm.$$renameControl(s,t),(c=r(s.$name))(e,s))}))),n.on("$destroy",(function(){s.$$parentForm.$removeControl(s),c(e,void 0),O(s,Li)}))}}}};function r(e){return""===e?n('this[""]').assign:n(e).assign||D}}]},qi=Fi(),Vi=Fi(!0);function Ui(e){e.$$classCache={},e.$$classCache[Lo]=!(e.$$classCache[zo]=e.$$element.hasClass(zo))}function Hi(e){var t=e.clazz,n=e.set,r=e.unset;function i(e,t,n){n&&!e.$$classCache[t]?(e.$$animate.addClass(e.$$element,t),e.$$classCache[t]=!0):!n&&e.$$classCache[t]&&(e.$$animate.removeClass(e.$$element,t),e.$$classCache[t]=!1)}function o(e,t,n){t=t?"-"+Pe(t,"-"):"",i(e,zo+t,!0===n),i(e,Lo+t,!1===n)}t.prototype.$setValidity=function(e,t,a){var s;M(t)?function(e,t,r,i){e[t]||(e[t]={});n(e[t],r,i)}(this,"$pending",e,a):function(e,t,n,i){e[t]&&r(e[t],n,i);Gi(e[t])&&(e[t]=void 0)}(this,"$pending",e,a),Z(t)?t?(r(this.$error,e,a),n(this.$$success,e,a)):(n(this.$error,e,a),r(this.$$success,e,a)):(r(this.$error,e,a),r(this.$$success,e,a)),this.$pending?(i(this,"ng-pending",!0),this.$valid=this.$invalid=void 0,o(this,"",null)):(i(this,"ng-pending",!1),this.$valid=Gi(this.$error),this.$invalid=!this.$valid,o(this,"",this.$valid)),o(this,e,s=this.$pending&&this.$pending[e]?void 0:!this.$error[e]&&(!!this.$$success[e]||null)),this.$$parentForm.$setValidity(e,s,this)}}function Gi(e){if(e)for(var t in e)if(e.hasOwnProperty(t))return!1;return!0}var Wi=/^\d{4,}-[01]\d-[0-3]\dT[0-2]\d:[0-5]\d:[0-5]\d\.\d+(?:[+-][0-2]\d:[0-5]\d|Z)$/,Yi=/^[a-z][a-z\d.+-]*:\/*(?:[^:@]+(?::[^@]+)?@)?(?:[^\s:/?#]+|\[[a-f\d:]+])(?::\d+)?(?:\/[^?#]*)?(?:\?[^#]*)?(?:#.*)?$/i,Xi=/^(?=.{1,254}$)(?=.{1,64}@)[-!#$%&'*+/0-9=?A-Z^_`a-z{|}~]+(\.[-!#$%&'*+/0-9=?A-Z^_`a-z{|}~]+)*@[A-Za-z0-9]([A-Za-z0-9-]{0,61}[A-Za-z0-9])?(\.[A-Za-z0-9]([A-Za-z0-9-]{0,61}[A-Za-z0-9])?)*$/,Zi=/^\s*(-|\+)?(\d+|(\d*(\.\d*)))([eE][+-]?\d+)?\s*$/,Qi=/^(\d{4,})-(\d{2})-(\d{2})$/,Ji=/^(\d{4,})-(\d\d)-(\d\d)T(\d\d):(\d\d)(?::(\d\d)(\.\d{1,3})?)?$/,Ki=/^(\d{4,})-W(\d\d)$/,eo=/^(\d{4,})-(\d\d)$/,to=/^(\d\d):(\d\d)(?::(\d\d)(\.\d{1,3})?)?$/,no=Le();k("date,datetime-local,month,time,week".split(","),(function(e){no[e]=!0}));var ro={text:function(e,t,n,r,i,o){oo(e,t,n,r,i,o),io(r)},date:so("date",Qi,ao(Qi,["yyyy","MM","dd"]),"yyyy-MM-dd"),"datetime-local":so("datetimelocal",Ji,ao(Ji,["yyyy","MM","dd","HH","mm","ss","sss"]),"yyyy-MM-ddTHH:mm:ss.sss"),time:so("time",to,ao(to,["HH","mm","ss","sss"]),"HH:mm:ss.sss"),week:so("week",Ki,(function(e,t){if(V(e))return e;if(F(e)){Ki.lastIndex=0;var n=Ki.exec(e);if(n){var r=+n[1],i=+n[2],o=0,a=0,s=0,l=0,c=Ai(r),u=7*(i-1);return t&&(o=t.getHours(),a=t.getMinutes(),s=t.getSeconds(),l=t.getMilliseconds()),new Date(r,0,c.getDate()+u,o,a,s,l)}}return NaN}),"yyyy-Www"),month:so("month",eo,ao(eo,["yyyy","MM"]),"yyyy-MM"),number:function(e,t,n,r,i,o,a,s){var l;if(lo(e,t,n,r,"number"),co(r),oo(e,t,n,r,i,o),z(n.min)||n.ngMin){var c=n.min||s(n.ngMin)(e);l=uo(c),r.$validators.min=function(e,t){return r.$isEmpty(t)||M(l)||t>=l},n.$observe("min",(function(e){e!==c&&(l=uo(e),c=e,r.$validate())}))}if(z(n.max)||n.ngMax){var u=n.max||s(n.ngMax)(e),d=uo(u);r.$validators.max=function(e,t){return r.$isEmpty(t)||M(d)||t<=d},n.$observe("max",(function(e){e!==u&&(d=uo(e),u=e,r.$validate())}))}if(z(n.step)||n.ngStep){var f=n.step||s(n.ngStep)(e),p=uo(f);r.$validators.step=function(e,t){return r.$isEmpty(t)||M(p)||ho(t,l||0,p)},n.$observe("step",(function(e){e!==f&&(p=uo(e),f=e,r.$validate())}))}},url:function(e,t,n,r,i,o){oo(e,t,n,r,i,o),io(r),r.$validators.url=function(e,t){var n=e||t;return r.$isEmpty(n)||Yi.test(n)}},email:function(e,t,n,r,i,o){oo(e,t,n,r,i,o),io(r),r.$validators.email=function(e,t){var n=e||t;return r.$isEmpty(n)||Xi.test(n)}},radio:function(e,t,n,r){var i=!n.ngTrim||"false"!==K(n.ngTrim);M(n.name)&&t.attr("name",S());t.on("change",(function(e){var o;t[0].checked&&(o=n.value,i&&(o=K(o)),r.$setViewValue(o,e&&e.type))})),r.$render=function(){var e=n.value;i&&(e=K(e)),t[0].checked=e===r.$viewValue},n.$observe("value",r.$render)},range:function(e,t,n,r,i,o){lo(e,t,n,r,"range"),co(r),oo(e,t,n,r,i,o);var a=r.$$hasNativeValidators&&"range"===t[0].type,s=a?0:void 0,l=a?100:void 0,c=a?1:void 0,u=t[0].validity,d=z(n.min),f=z(n.max),p=z(n.step),h=r.$render;r.$render=a&&z(u.rangeUnderflow)&&z(u.rangeOverflow)?function(){h(),r.$setViewValue(t.val())}:h,d&&(s=uo(n.min),r.$validators.min=a?function(){return!0}:function(e,t){return r.$isEmpty(t)||M(s)||t>=s},g("min",(function(e){if(s=uo(e),j(r.$modelValue))return;if(a){var n=t.val();s>n&&(n=s,t.val(n)),r.$setViewValue(n)}else r.$validate()})));f&&(l=uo(n.max),r.$validators.max=a?function(){return!0}:function(e,t){return r.$isEmpty(t)||M(l)||t<=l},g("max",(function(e){if(l=uo(e),j(r.$modelValue))return;if(a){var n=t.val();l<n&&(t.val(l),n=l<s?s:l),r.$setViewValue(n)}else r.$validate()})));p&&(c=uo(n.step),r.$validators.step=a?function(){return!u.stepMismatch}:function(e,t){return r.$isEmpty(t)||M(c)||ho(t,s||0,c)},g("step",(function(e){if(c=uo(e),j(r.$modelValue))return;a?r.$viewValue!==t.val()&&r.$setViewValue(t.val()):r.$validate()})));function g(e,r){t.attr(e,n[e]);var i=n[e];n.$observe(e,(function(e){e!==i&&(i=e,r(e))}))}},checkbox:function(e,t,n,r,i,o,a,s){var l=go(s,e,"ngTrueValue",n.ngTrueValue,!0),c=go(s,e,"ngFalseValue",n.ngFalseValue,!1);t.on("change",(function(e){r.$setViewValue(t[0].checked,e&&e.type)})),r.$render=function(){t[0].checked=r.$viewValue},r.$isEmpty=function(e){return!1===e},r.$formatters.push((function(e){return se(e,l)})),r.$parsers.push((function(e){return e?l:c}))},hidden:D,button:D,submit:D,reset:D,file:D};function io(e){e.$formatters.push((function(t){return e.$isEmpty(t)?t:t.toString()}))}function oo(e,t,n,r,i,o){var a,s=d(t[0].type);if(!i.android){var l=!1;t.on("compositionstart",(function(){l=!0})),t.on("compositionupdate",(function(e){(M(e.data)||""===e.data)&&(l=!1)})),t.on("compositionend",(function(){l=!1,c()}))}var c=function(e){if(a&&(o.defer.cancel(a),a=null),!l){var i=t.val(),c=e&&e.type;"password"===s||n.ngTrim&&"false"===n.ngTrim||(i=K(i)),(r.$viewValue!==i||""===i&&r.$$hasNativeValidators)&&r.$setViewValue(i,c)}};if(i.hasEvent("input"))t.on("input",c);else{var u=function(e,t,n){a||(a=o.defer((function(){a=null,t&&t.value===n||c(e)})))};t.on("keydown",(function(e){var t=e.keyCode;91===t||15<t&&t<19||37<=t&&t<=40||u(e,this,this.value)})),i.hasEvent("paste")&&t.on("paste cut drop",u)}t.on("change",c),no[s]&&r.$$hasNativeValidators&&s===n.type&&t.on("keydown wheel mousedown",(function(e){if(!a){var t=this.validity,n=t.badInput,r=t.typeMismatch;a=o.defer((function(){a=null,t.badInput===n&&t.typeMismatch===r||c(e)}))}})),r.$render=function(){var e=r.$isEmpty(r.$viewValue)?"":r.$viewValue;t.val()!==e&&t.val(e)}}function ao(e,t){return function(n,r){var i,o;if(V(n))return n;if(F(n)){if('"'===n.charAt(0)&&'"'===n.charAt(n.length-1)&&(n=n.substring(1,n.length-1)),Wi.test(n))return new Date(n);if(e.lastIndex=0,i=e.exec(n)){i.shift(),o=r?{yyyy:r.getFullYear(),MM:r.getMonth()+1,dd:r.getDate(),HH:r.getHours(),mm:r.getMinutes(),ss:r.getSeconds(),sss:r.getMilliseconds()/1e3}:{yyyy:1970,MM:1,dd:1,HH:0,mm:0,ss:0,sss:0},k(i,(function(e,n){n<t.length&&(o[t[n]]=+e)}));var a=new Date(o.yyyy,o.MM-1,o.dd,o.HH,o.mm,o.ss||0,1e3*o.sss||0);return o.yyyy<100&&a.setFullYear(o.yyyy),a}}return NaN}}function so(e,t,n,r){return function(i,o,a,s,l,c,u,d){lo(i,o,a,s,e),oo(0,o,a,s,l,c);var f,p,h="time"===e||"datetimelocal"===e;if(s.$parsers.push((function(n){return s.$isEmpty(n)?null:t.test(n)?w(n,f):void(s.$$parserName=e)})),s.$formatters.push((function(e){if(e&&!V(e))throw qo("datefmt","Expected `{0}` to be a date",e);if(y(e)){f=e;var t=s.$options.getOption("timezone");return t&&(p=t,f=ye(f,t,!0)),function(e,t){var n=r;h&&F(s.$options.getOption("timeSecondsFormat"))&&(n=r.replace("ss.sss",s.$options.getOption("timeSecondsFormat")).replace(/:$/,""));var i=u("date")(e,n,t);h&&s.$options.getOption("timeStripZeroSeconds")&&(i=i.replace(/(?::00)?(?:\.000)?$/,""));return i}(e,t)}return f=null,p=null,""})),z(a.min)||a.ngMin){var g=a.min||d(a.ngMin)(i),v=x(g);s.$validators.min=function(e){return!y(e)||M(v)||n(e)>=v},a.$observe("min",(function(e){e!==g&&(v=x(e),g=e,s.$validate())}))}if(z(a.max)||a.ngMax){var m=a.max||d(a.ngMax)(i),b=x(m);s.$validators.max=function(e){return!y(e)||M(b)||n(e)<=b},a.$observe("max",(function(e){e!==m&&(b=x(e),m=e,s.$validate())}))}function y(e){return e&&!(e.getTime&&e.getTime()!=e.getTime())}function x(e){return z(e)&&!V(e)?w(e)||void 0:e}function w(e,t){var r=s.$options.getOption("timezone");p&&p!==r&&(t=be(t,me(p)));var i=n(e,t);return!isNaN(i)&&r&&(i=ye(i,r)),i}}}function lo(e,t,n,r,i){var o=t[0];(r.$$hasNativeValidators=L(o.validity))&&r.$parsers.push((function(e){var n=t.prop("validity")||{};if(!n.badInput&&!n.typeMismatch)return e;r.$$parserName=i}))}function co(e){e.$parsers.push((function(t){return e.$isEmpty(t)?null:Zi.test(t)?parseFloat(t):void(e.$$parserName="number")})),e.$formatters.push((function(t){if(!e.$isEmpty(t)){if(!q(t))throw qo("numfmt","Expected `{0}` to be a number",t);t=t.toString()}return t}))}function uo(e){return z(e)&&!q(e)&&(e=parseFloat(e)),j(e)?void 0:e}function fo(e){return(0|e)===e}function po(e){var t=e.toString(),n=t.indexOf(".");if(-1===n){if(-1<e&&e<1){var r=/e-(\d+)$/.exec(t);if(r)return Number(r[1])}return 0}return t.length-n-1}function ho(e,t,n){var r=Number(e),i=!fo(r),o=!fo(t),a=!fo(n);if(i||o||a){var s=i?po(r):0,l=o?po(t):0,c=a?po(n):0,u=Math.max(s,l,c),d=Math.pow(10,u);r*=d,t*=d,n*=d,i&&(r=Math.round(r)),o&&(t=Math.round(t)),a&&(n=Math.round(n))}return(r-t)%n==0}function go(e,t,n,r,i){var o;if(z(r)){if(!(o=e(r)).constant)throw qo("constexpr","Expected constant expression for `{0}`, but saw `{1}`.",n,r);return o(t)}return i}var vo=["$browser","$sniffer","$filter","$parse",function(e,t,n,r){return{restrict:"E",require:["?ngModel"],link:{pre:function(i,o,a,s){s[0]&&(ro[d(a.type)]||ro.text)(i,o,a,s[0],t,e,n,r)}}}}],mo=function(){var e={configurable:!0,enumerable:!1,get:function(){return this.getAttribute("value")||""},set:function(e){this.setAttribute("value",e)}};return{restrict:"E",priority:200,compile:function(t,n){if("hidden"===d(n.type))return{pre:function(t,n,r,i){var o=n[0];o.parentNode&&o.parentNode.insertBefore(o,o.nextSibling),Object.defineProperty&&Object.defineProperty(o,"value",e)}}}}},bo=/^(true|false|\d+)$/,yo=function(){function e(e,t,n){var r=z(n)?n:9===o?"":null;e.prop("value",r),t.$set("value",n)}return{restrict:"A",priority:100,compile:function(t,n){return bo.test(n.ngValue)?function(t,n,r){e(n,r,t.$eval(r.ngValue))}:function(t,n,r){t.$watch(r.ngValue,(function(t){e(n,r,t)}))}}}},xo=["$compile",function(e){return{restrict:"AC",compile:function(t){return e.$$addBindingClass(t),function(t,n,r){e.$$addBindingInfo(n,r.ngBind),n=n[0],t.$watch(r.ngBind,(function(e){n.textContent=Be(e)}))}}}}],wo=["$interpolate","$compile",function(e,t){return{compile:function(n){return t.$$addBindingClass(n),function(n,r,i){var o=e(r.attr(i.$attr.ngBindTemplate));t.$$addBindingInfo(r,o.expressions),r=r[0],i.$observe("ngBindTemplate",(function(e){r.textContent=M(e)?"":e}))}}}}],ko=["$sce","$parse","$compile",function(e,t,n){return{restrict:"A",compile:function(r,i){var o=t(i.ngBindHtml),a=t(i.ngBindHtml,(function(t){return e.valueOf(t)}));return n.$$addBindingClass(r),function(t,r,i){n.$$addBindingInfo(r,i.ngBindHtml),t.$watch(a,(function(){var n=o(t);r.html(e.getTrustedHtml(n)||"")}))}}}}],Ao=I({restrict:"A",require:"ngModel",link:function(e,t,n,r){r.$viewChangeListeners.push((function(){e.$eval(n.ngChange)}))}});function Eo(e,t){var n;return e="ngClass"+e,["$parse",function(a){return{restrict:"AC",link:function(s,l,c){var u,d=l.data("$classCounts"),f=!0;function p(e,t){var n=[];return k(e,(function(e){(t>0||d[e])&&(d[e]=(d[e]||0)+t,d[e]===+(t>0)&&n.push(e))})),n.join(" ")}d||(d=Le(),l.data("$classCounts",d)),"ngClass"!==e&&(n||(n=a("$index",(function(e){return 1&e}))),s.$watch(n,(function(e){e===t?(n=p(i(n=u),1),c.$addClass(n)):function(e){e=p(i(e),-1),c.$removeClass(e)}(u);var n;f=e}))),s.$watch(a(c[e],o),(function(e){f===t&&function(e,t){var n=i(e),o=i(t),a=r(n,o),s=r(o,n),l=p(a,-1),u=p(s,1);c.$addClass(u),c.$removeClass(l)}(u,e);u=e}))}}}];function r(e,t){if(!e||!e.length)return[];if(!t||!t.length)return e;var n=[];e:for(var r=0;r<e.length;r++){for(var i=e[r],o=0;o<t.length;o++)if(i===t[o])continue e;n.push(i)}return n}function i(e){return e&&e.split(" ")}function o(e){if(!e)return e;var t=e;return U(e)?t=e.map(o).join(" "):L(e)?t=Object.keys(e).filter((function(t){return e[t]})).join(" "):F(e)||(t=e+""),t}}var So=Eo("",!0),Co=Eo("Odd",0),$o=Eo("Even",1),Oo=Ni({compile:function(e,t){t.$set("ngCloak",void 0),e.removeClass("ng-cloak")}}),_o=[function(){return{restrict:"A",scope:!0,controller:"@",priority:500}}],To={},jo={blur:!0,focus:!0};function Po(e,t,n,r,i,o){return{restrict:"A",compile:function(a,s){var l=e(s[r]);return function(e,r){r.on(i,(function(r){var i=function(){l(e,{$event:r})};if(t.$$phase)if(o)e.$evalAsync(i);else try{i()}catch(e){n(e)}else e.$apply(i)}))}}}}k("click dblclick mousedown mouseup mouseover mouseout mousemove mouseenter mouseleave keydown keyup keypress submit focus blur copy cut paste".split(" "),(function(e){var t=yn("ng-"+e);To[t]=["$parse","$rootScope","$exceptionHandler",function(n,r,i){return Po(n,r,i,t,e,jo[e])}]}));var Do=["$animate","$compile",function(e,t){return{multiElement:!0,transclude:"element",priority:600,terminal:!0,restrict:"A",$$tlb:!0,link:function(n,r,i,o,a){var s,l,c;n.$watch(i.ngIf,(function(n){n?l||a((function(n,o){l=o,n[n.length++]=t.$$createComment("end ngIf",i.ngIf),s={clone:n},e.enter(n,r.parent(),r)})):(c&&(c.remove(),c=null),l&&(l.$destroy(),l=null),s&&(c=ze(s.clone),e.leave(c).done((function(e){!1!==e&&(c=null)})),s=null))}))}}}],Ro=["$templateRequest","$anchorScroll","$animate",function(e,t,n){return{restrict:"ECA",priority:400,terminal:!0,transclude:"element",controller:y.noop,compile:function(r,i){var o=i.ngInclude||i.src,a=i.onload||"",s=i.autoscroll;return function(r,i,l,c,u){var d,f,p,h=0,g=function(){f&&(f.remove(),f=null),d&&(d.$destroy(),d=null),p&&(n.leave(p).done((function(e){!1!==e&&(f=null)})),f=p,p=null)};r.$watch(o,(function(o){var l=function(e){!1===e||!z(s)||s&&!r.$eval(s)||t()},f=++h;o?(e(o,!0).then((function(e){if(!r.$$destroyed&&f===h){var t=r.$new();c.template=e;var s=u(t,(function(e){g(),n.enter(e,null,i).done(l)}));p=s,(d=t).$emit("$includeContentLoaded",o),r.$eval(a)}}),(function(){r.$$destroyed||f===h&&(g(),r.$emit("$includeContentError",o))})),r.$emit("$includeContentRequested",o)):(g(),c.template=null)}))}}}}],Io=["$compile",function(t){return{restrict:"ECA",priority:-400,require:"ngInclude",link:function(n,r,i,o){if(v.call(r[0]).match(/SVG/))return r.empty(),void t(ut(o.template,e.document).childNodes)(n,(function(e){r.append(e)}),{futureParentElement:r});r.html(o.template),t(r.contents())(n)}}}],No=Ni({priority:450,compile:function(){return{pre:function(e,t,n){e.$eval(n.ngInit)}}}}),Mo=function(){return{restrict:"A",priority:100,require:"ngModel",link:function(e,t,n,r){var i=n.ngList||", ",o="false"!==n.ngTrim,a=o?K(i):i;r.$parsers.push((function(e){if(!M(e)){var t=[];return e&&k(e.split(a),(function(e){e&&t.push(o?K(e):e)})),t}})),r.$formatters.push((function(e){if(U(e))return e.join(i)})),r.$isEmpty=function(e){return!e||!e.length}}}},zo="ng-valid",Lo="ng-invalid",Bo="ng-pristine",Fo="ng-dirty",qo=i("ngModel");function Vo(e,t,n,r,i,o,a,s,l){var c;this.$viewValue=Number.NaN,this.$modelValue=Number.NaN,this.$$rawModelValue=void 0,this.$validators={},this.$asyncValidators={},this.$parsers=[],this.$formatters=[],this.$viewChangeListeners=[],this.$untouched=!0,this.$touched=!1,this.$pristine=!0,this.$dirty=!1,this.$valid=!0,this.$invalid=!1,this.$error={},this.$$success={},this.$pending=void 0,this.$name=l(n.name||"",!1)(e),this.$$parentForm=Li,this.$options=Uo,this.$$updateEvents="",this.$$updateEventHandler=this.$$updateEventHandler.bind(this),this.$$parsedNgModel=i(n.ngModel),this.$$parsedNgModelAssign=this.$$parsedNgModel.assign,this.$$ngModelGet=this.$$parsedNgModel,this.$$ngModelSet=this.$$parsedNgModelAssign,this.$$pendingDebounce=null,this.$$parserValid=void 0,this.$$parserName="parse",this.$$currentValidationRunId=0,this.$$scope=e,this.$$rootScope=e.$root,this.$$attr=n,this.$$element=r,this.$$animate=o,this.$$timeout=a,this.$$parse=i,this.$$q=s,this.$$exceptionHandler=t,Ui(this),(c=this).$$scope.$watch((function(e){var t=c.$$ngModelGet(e);return t===c.$modelValue||c.$modelValue!=c.$modelValue&&t!=t||c.$$setModelValue(t),t}))}Vo.$inject=["$scope","$exceptionHandler","$attrs","$element","$parse","$animate","$timeout","$q","$interpolate"],Vo.prototype={$$initGetterSetters:function(){if(this.$options.getOption("getterSetter")){var e=this.$$parse(this.$$attr.ngModel+"()"),t=this.$$parse(this.$$attr.ngModel+"($$$p)");this.$$ngModelGet=function(t){var n=this.$$parsedNgModel(t);return G(n)&&(n=e(t)),n},this.$$ngModelSet=function(e,n){G(this.$$parsedNgModel(e))?t(e,{$$$p:n}):this.$$parsedNgModelAssign(e,n)}}else if(!this.$$parsedNgModel.assign)throw qo("nonassign","Expression '{0}' is non-assignable. Element: {1}",this.$$attr.ngModel,xe(this.$$element))},$render:D,$isEmpty:function(e){return M(e)||""===e||null===e||e!=e},$$updateEmptyClasses:function(e){this.$isEmpty(e)?(this.$$animate.removeClass(this.$$element,"ng-not-empty"),this.$$animate.addClass(this.$$element,"ng-empty")):(this.$$animate.removeClass(this.$$element,"ng-empty"),this.$$animate.addClass(this.$$element,"ng-not-empty"))},$setPristine:function(){this.$dirty=!1,this.$pristine=!0,this.$$animate.removeClass(this.$$element,Fo),this.$$animate.addClass(this.$$element,Bo)},$setDirty:function(){this.$dirty=!0,this.$pristine=!1,this.$$animate.removeClass(this.$$element,Bo),this.$$animate.addClass(this.$$element,Fo),this.$$parentForm.$setDirty()},$setUntouched:function(){this.$touched=!1,this.$untouched=!0,this.$$animate.setClass(this.$$element,"ng-untouched","ng-touched")},$setTouched:function(){this.$touched=!0,this.$untouched=!1,this.$$animate.setClass(this.$$element,"ng-touched","ng-untouched")},$rollbackViewValue:function(){this.$$timeout.cancel(this.$$pendingDebounce),this.$viewValue=this.$$lastCommittedViewValue,this.$render()},$validate:function(){if(!j(this.$modelValue)){var e=this.$$lastCommittedViewValue,t=this.$$rawModelValue,n=this.$valid,r=this.$modelValue,i=this.$options.getOption("allowInvalid"),o=this;this.$$runValidators(t,e,(function(e){i||n===e||(o.$modelValue=e?t:void 0,o.$modelValue!==r&&o.$$writeModelToScope())}))}},$$runValidators:function(e,t,n){this.$$currentValidationRunId++;var r,i,o=this.$$currentValidationRunId,a=this;(function(){var e=a.$$parserName;if(!M(a.$$parserValid))return a.$$parserValid||(k(a.$validators,(function(e,t){s(t,null)})),k(a.$asyncValidators,(function(e,t){s(t,null)}))),s(e,a.$$parserValid),a.$$parserValid;s(e,null);return!0})()?!function(){var n=!0;if(k(a.$validators,(function(r,i){var o=Boolean(r(e,t));n=n&&o,s(i,o)})),!n)return k(a.$asyncValidators,(function(e,t){s(t,null)})),!1;return!0}()?l(!1):(r=[],i=!0,k(a.$asyncValidators,(function(n,o){var a=n(e,t);if(!Q(a))throw qo("nopromise","Expected asynchronous validator to return a promise but got '{0}' instead.",a);s(o,void 0),r.push(a.then((function(){s(o,!0)}),(function(){i=!1,s(o,!1)})))})),r.length?a.$$q.all(r).then((function(){l(i)}),D):l(!0)):l(!1);function s(e,t){o===a.$$currentValidationRunId&&a.$setValidity(e,t)}function l(e){o===a.$$currentValidationRunId&&n(e)}},$commitViewValue:function(){var e=this.$viewValue;this.$$timeout.cancel(this.$$pendingDebounce),(this.$$lastCommittedViewValue!==e||""===e&&this.$$hasNativeValidators)&&(this.$$updateEmptyClasses(e),this.$$lastCommittedViewValue=e,this.$pristine&&this.$setDirty(),this.$$parseAndValidate())},$$parseAndValidate:function(){var e=this.$$lastCommittedViewValue,t=this;if(this.$$parserValid=!M(e)||void 0,this.$setValidity(this.$$parserName,null),this.$$parserName="parse",this.$$parserValid)for(var n=0;n<this.$parsers.length;n++)if(M(e=this.$parsers[n](e))){this.$$parserValid=!1;break}j(this.$modelValue)&&(this.$modelValue=this.$$ngModelGet(this.$$scope));var r=this.$modelValue,i=this.$options.getOption("allowInvalid");function o(){t.$modelValue!==r&&t.$$writeModelToScope()}this.$$rawModelValue=e,i&&(this.$modelValue=e,o()),this.$$runValidators(e,this.$$lastCommittedViewValue,(function(n){i||(t.$modelValue=n?e:void 0,o())}))},$$writeModelToScope:function(){this.$$ngModelSet(this.$$scope,this.$modelValue),k(this.$viewChangeListeners,(function(e){try{e()}catch(e){this.$$exceptionHandler(e)}}),this)},$setViewValue:function(e,t){this.$viewValue=e,this.$options.getOption("updateOnDefault")&&this.$$debounceViewValueCommit(t)},$$debounceViewValueCommit:function(e){var t=this.$options.getOption("debounce");q(t[e])?t=t[e]:q(t.default)&&-1===this.$options.getOption("updateOn").indexOf(e)?t=t.default:q(t["*"])&&(t=t["*"]),this.$$timeout.cancel(this.$$pendingDebounce);var n=this;t>0?this.$$pendingDebounce=this.$$timeout((function(){n.$commitViewValue()}),t):this.$$rootScope.$$phase?this.$commitViewValue():this.$$scope.$apply((function(){n.$commitViewValue()}))},$overrideModelOptions:function(e){this.$options=this.$options.createChild(e),this.$$setUpdateOnEvents()},$processModelValue:function(){var e=this.$$format();this.$viewValue!==e&&(this.$$updateEmptyClasses(e),this.$viewValue=this.$$lastCommittedViewValue=e,this.$render(),this.$$runValidators(this.$modelValue,this.$viewValue,D))},$$format:function(){for(var e=this.$formatters,t=e.length,n=this.$modelValue;t--;)n=e[t](n);return n},$$setModelValue:function(e){this.$modelValue=this.$$rawModelValue=e,this.$$parserValid=void 0,this.$processModelValue()},$$setUpdateOnEvents:function(){this.$$updateEvents&&this.$$element.off(this.$$updateEvents,this.$$updateEventHandler),this.$$updateEvents=this.$options.getOption("updateOn"),this.$$updateEvents&&this.$$element.on(this.$$updateEvents,this.$$updateEventHandler)},$$updateEventHandler:function(e){this.$$debounceViewValueCommit(e&&e.type)}},Hi({clazz:Vo,set:function(e,t){e[t]=!0},unset:function(e,t){delete e[t]}});var Uo,Ho=["$rootScope",function(e){return{restrict:"A",require:["ngModel","^?form","^?ngModelOptions"],controller:Vo,priority:1,compile:function(t){return t.addClass(Bo).addClass("ng-untouched").addClass(zo),{pre:function(e,t,n,r){var i=r[0],o=r[1]||i.$$parentForm,a=r[2];a&&(i.$options=a.$options),i.$$initGetterSetters(),o.$addControl(i),n.$observe("name",(function(e){i.$name!==e&&i.$$parentForm.$$renameControl(i,e)})),e.$on("$destroy",(function(){i.$$parentForm.$removeControl(i)}))},post:function(t,n,r,i){var o=i[0];function a(){o.$setTouched()}o.$$setUpdateOnEvents(),n.on("blur",(function(){o.$touched||(e.$$phase?t.$evalAsync(a):t.$apply(a))}))}}}}}],Go=/(\s+|^)default(\s+|$)/;function Wo(e){this.$$options=e}Wo.prototype={getOption:function(e){return this.$$options[e]},createChild:function(e){var t=!1;return k(e=O({},e),(function(n,r){"$inherit"===n?"*"===r?t=!0:(e[r]=this.$$options[r],"updateOn"===r&&(e.updateOnDefault=this.$$options.updateOnDefault)):"updateOn"===r&&(e.updateOnDefault=!1,e[r]=K(n.replace(Go,(function(){return e.updateOnDefault=!0," "}))))}),this),t&&(delete e["*"],Xo(e,this.$$options)),Xo(e,Uo.$$options),new Wo(e)}},Uo=new Wo({updateOn:"",updateOnDefault:!0,debounce:0,getterSetter:!1,allowInvalid:!1,timezone:null});var Yo=function(){function e(e,t){this.$$attrs=e,this.$$scope=t}return e.$inject=["$attrs","$scope"],e.prototype={$onInit:function(){var e=this.parentCtrl?this.parentCtrl.$options:Uo,t=this.$$scope.$eval(this.$$attrs.ngModelOptions);this.$options=e.createChild(t)}},{restrict:"A",priority:10,require:{parentCtrl:"?^^ngModelOptions"},bindToController:!0,controller:e}};function Xo(e,t){k(t,(function(t,n){z(e[n])||(e[n]=t)}))}var Zo=Ni({terminal:!0,priority:1e3}),Qo=i("ngOptions"),Jo=/^\s*([\s\S]+?)(?:\s+as\s+([\s\S]+?))?(?:\s+group\s+by\s+([\s\S]+?))?(?:\s+disable\s+when\s+([\s\S]+?))?\s+for\s+(?:([$\w][$\w]*)|(?:\(\s*([$\w][$\w]*)\s*,\s*([$\w][$\w]*)\s*\)))\s+in\s+([\s\S]+?)(?:\s+track\s+by\s+([\s\S]+?))?$/,Ko=["$compile","$document","$parse",function(t,n,r){var i=e.document.createElement("option"),o=e.document.createElement("optgroup");return{restrict:"A",terminal:!0,require:["select","ngModel"],link:{pre:function(e,t,n,r){r[0].registerOption=D},post:function(e,s,l,c){for(var u=c[0],d=c[1],f=l.multiple,p=0,h=s.children(),g=h.length;p<g;p++)if(""===h[p].value){u.hasEmptyOption=!0,u.emptyOption=h.eq(p);break}s.empty();var v,m=!!u.emptyOption;a(i.cloneNode(!1)).val("?");var b=function(e,t,n){var i=e.match(Jo);if(!i)throw Qo("iexp","Expected expression in form of '_select_ (as _label_)? for (_key_,)?_value_ in _collection_' but got '{0}'. Element: {1}",e,xe(t));var o=i[5]||i[7],a=i[6],s=/ as /.test(i[0])&&i[1],l=i[9],c=r(i[2]?i[1]:o),u=s&&r(s)||c,d=l&&r(l),f=l?function(e,t){return d(n,t)}:function(e){return zt(e)},p=function(e,t){return f(e,y(e,t))},h=r(i[2]||i[1]),g=r(i[3]||""),v=r(i[4]||""),m=r(i[8]),b={},y=a?function(e,t){return b[a]=t,b[o]=e,b}:function(e){return b[o]=e,b};function x(e,t,n,r,i){this.selectValue=e,this.viewValue=t,this.label=n,this.group=r,this.disabled=i}function k(e){var t;if(!a&&w(e))t=e;else for(var n in t=[],e)e.hasOwnProperty(n)&&"$"!==n.charAt(0)&&t.push(n);return t}return{trackBy:l,getTrackByValue:p,getWatchables:r(m,(function(e){for(var t=[],r=k(e=e||[]),o=r.length,a=0;a<o;a++){var s=e===r?a:r[a],l=e[s],c=y(l,s),u=f(l,c);if(t.push(u),i[2]||i[1]){var d=h(n,c);t.push(d)}if(i[4]){var p=v(n,c);t.push(p)}}return t})),getOptions:function(){for(var e=[],t={},r=m(n)||[],i=k(r),o=i.length,a=0;a<o;a++){var s=r===i?a:i[a],c=r[s],d=y(c,s),b=u(n,d),w=f(b,d),A=new x(w,b,h(n,d),g(n,d),v(n,d));e.push(A),t[w]=A}return{items:e,selectValueMap:t,getOptionFromViewValue:function(e){return t[p(e)]},getViewValueFromOption:function(e){return l?oe(e.viewValue):e.viewValue}}}}}(l.ngOptions,s,e),y=n[0].createDocumentFragment();function x(e,t){var n=i.cloneNode(!1);t.appendChild(n),function(e,t){e.element=t,t.disabled=e.disabled,e.label!==t.label&&(t.label=e.label,t.textContent=e.label);t.value=e.selectValue}(e,n)}function A(e){var t=v.getOptionFromViewValue(e),n=t&&t.element;return n&&!n.selected&&(n.selected=!0),t}u.generateUnknownOptionValue=function(e){return"?"},f?(u.writeValue=function(e){if(v){var t=e&&e.map(A)||[];v.items.forEach((function(e){e.element.selected&&!re(t,e)&&(e.element.selected=!1)}))}},u.readValue=function(){var e=s.val()||[],t=[];return k(e,(function(e){var n=v.selectValueMap[e];n&&!n.disabled&&t.push(v.getViewValueFromOption(n))})),t},b.trackBy&&e.$watchCollection((function(){if(U(d.$viewValue))return d.$viewValue.map((function(e){return b.getTrackByValue(e)}))}),(function(){d.$render()}))):(u.writeValue=function(e){if(v){var t=s[0].options[s[0].selectedIndex],n=v.getOptionFromViewValue(e);t&&t.removeAttribute("selected"),n?(s[0].value!==n.selectValue&&(u.removeUnknownOption(),s[0].value=n.selectValue,n.element.selected=!0),n.element.setAttribute("selected","selected")):u.selectUnknownOrEmptyOption(e)}},u.readValue=function(){var e=v.selectValueMap[s.val()];return e&&!e.disabled?(u.unselectEmptyOption(),u.removeUnknownOption(),v.getViewValueFromOption(e)):null},b.trackBy&&e.$watch((function(){return b.getTrackByValue(d.$viewValue)}),(function(){d.$render()}))),m&&(t(u.emptyOption)(e),s.prepend(u.emptyOption),8===u.emptyOption[0].nodeType?(u.hasEmptyOption=!1,u.registerOption=function(e,t){""===t.val()&&(u.hasEmptyOption=!0,u.emptyOption=t,u.emptyOption.removeClass("ng-scope"),d.$render(),t.on("$destroy",(function(){var e=u.$isEmptyOptionSelected();u.hasEmptyOption=!1,u.emptyOption=void 0,e&&d.$render()})))}):u.emptyOption.removeClass("ng-scope")),e.$watchCollection(b.getWatchables,(function(){var e=v&&u.readValue();if(v)for(var t=v.items.length-1;t>=0;t--){var n=v.items[t];z(n.group)?Ot(n.element.parentNode):Ot(n.element)}v=b.getOptions();var r={};if(v.items.forEach((function(e){var t;z(e.group)?((t=r[e.group])||(t=o.cloneNode(!1),y.appendChild(t),t.label=null===e.group?"null":e.group,r[e.group]=t),x(e,t)):x(e,y)})),s[0].appendChild(y),d.$render(),!d.$isEmpty(e)){var i=u.readValue();(b.trackBy||f?se(e,i):e===i)||(d.$setViewValue(i),d.$render())}}))}}}}],ea=["$locale","$interpolate","$log",function(e,t,n){var r=/{}/g,i=/^when(Minus)?(.+)$/;return{link:function(o,a,s){var l,c=s.count,u=s.$attr.when&&a.attr(s.$attr.when),f=s.offset||0,p=o.$eval(u)||{},h={},g=t.startSymbol(),v=t.endSymbol(),m=g+c+"-"+f+v,b=y.noop;function x(e){a.text(e||"")}k(s,(function(e,t){var n=i.exec(t);if(n){var r=(n[1]?"-":"")+d(n[2]);p[r]=a.attr(s.$attr[t])}})),k(p,(function(e,n){h[n]=t(e.replace(r,m))})),o.$watch(c,(function(t){var r=parseFloat(t),i=j(r);if(i||r in p||(r=e.pluralCat(r-f)),!(r===l||i&&j(l))){b();var a=h[r];M(a)?(null!=t&&n.debug("ngPluralize: no rule defined for '"+r+"' in "+u),b=D,x()):b=o.$watch(a,x),l=r}}))}}}],ta=i("ngRef"),na=["$parse",function(e){return{priority:-1,restrict:"A",compile:function(t,n){var r=yn(ne(t)),i=e(n.ngRef),o=i.assign||function(){throw ta("nonassign",'Expression in ngRef="{0}" is non-assignable!',n.ngRef)};return function(e,t,a){var s;if(a.hasOwnProperty("ngRefRead")){if("$element"===a.ngRefRead)s=t;else if(!(s=t.data("$"+a.ngRefRead+"Controller")))throw ta("noctrl",'The controller for ngRefRead="{0}" could not be found on ngRef="{1}"',a.ngRefRead,n.ngRef)}else s=t.data("$"+r+"Controller");o(e,s=s||t),t.on("$destroy",(function(){i(e)===s&&o(e,null)}))}}}}],ra=["$parse","$animate","$compile",function(e,t,n){var r=i("ngRepeat"),o=function(e,t,n,r,i,o,a){e[n]=r,i&&(e[i]=o),e.$index=t,e.$first=0===t,e.$last=t===a-1,e.$middle=!(e.$first||e.$last),e.$odd=!(e.$even=0==(1&t))},a=function(e){return e.clone[0]},s=function(e){return e.clone[e.clone.length-1]},l=function(e,t,n){return zt(n)},c=function(e,t){return t};return{restrict:"A",multiElement:!0,transclude:"element",priority:1e3,terminal:!0,$$tlb:!0,compile:function(i,d){var f=d.ngRepeat,p=n.$$createComment("end ngRepeat",f),h=f.match(/^\s*([\s\S]+?)\s+in\s+([\s\S]+?)(?:\s+as\s+([\s\S]+?))?(?:\s+track\s+by\s+([\s\S]+?))?\s*$/);if(!h)throw r("iexp","Expected expression in form of '_item_ in _collection_[ track by _id_]' but got '{0}'.",f);var g=h[1],v=h[2],m=h[3],b=h[4];if(!(h=g.match(/^(?:(\s*[$\w]+)|\(\s*([$\w]+)\s*,\s*([$\w]+)\s*\))$/)))throw r("iidexp","'_item_' in '_item_ in _collection_' should be an identifier or '(_key_, _value_)' expression, but got '{0}'.",g);var y,x=h[3]||h[1],A=h[2];if(m&&(!/^[$a-zA-Z_][$a-zA-Z0-9_]*$/.test(m)||/^(null|undefined|this|\$index|\$first|\$middle|\$last|\$even|\$odd|\$parent|\$root|\$id)$/.test(m)))throw r("badident","alias '{0}' is invalid --- must be a valid JS identifier which is not a reserved name.",m);if(b){var E={$id:zt},S=e(b);y=function(e,t,n,r){return A&&(E[A]=t),E[x]=n,E.$index=r,S(e,E)}}return function(e,n,i,d,h){var g=Le();e.$watchCollection(v,(function(i){var d,v,b,S,C,$,O,_,T,j,P,D,R=n[0],I=Le();if(m&&(e[m]=i),w(i))T=i,_=y||l;else for(var N in _=y||c,T=[],i)u.call(i,N)&&"$"!==N.charAt(0)&&T.push(N);for(S=T.length,P=new Array(S),d=0;d<S;d++)if(C=i===T?d:T[d],$=i[C],O=_(e,C,$,d),g[O])j=g[O],delete g[O],I[O]=j,P[d]=j;else{if(I[O])throw k(P,(function(e){e&&e.scope&&(g[e.id]=e)})),r("dupes","Duplicates in a repeater are not allowed. Use 'track by' expression to specify unique keys. Repeater: {0}, Duplicate key: {1}, Duplicate value: {2}",f,O,$);P[d]={id:O,scope:void 0,clone:void 0},I[O]=!0}for(var M in E&&(E[x]=void 0),g){if(D=ze((j=g[M]).clone),t.leave(D),D[0].parentNode)for(d=0,v=D.length;d<v;d++)D[d].$$NG_REMOVED=!0;j.scope.$destroy()}for(d=0;d<S;d++)if(C=i===T?d:T[d],$=i[C],(j=P[d]).scope){b=R;do{b=b.nextSibling}while(b&&b.$$NG_REMOVED);a(j)!==b&&t.move(ze(j.clone),null,R),R=s(j),o(j.scope,d,x,$,A,C,S)}else h((function(e,n){j.scope=n;var r=p.cloneNode(!1);e[e.length++]=r,t.enter(e,null,R),R=r,j.clone=e,I[j.id]=j,o(j.scope,d,x,$,A,C,S)}));g=I}))}}}}],ia=["$animate",function(e){return{restrict:"A",multiElement:!0,link:function(t,n,r){t.$watch(r.ngShow,(function(t){e[t?"removeClass":"addClass"](n,"ng-hide",{tempClasses:"ng-hide-animate"})}))}}}],oa=["$animate",function(e){return{restrict:"A",multiElement:!0,link:function(t,n,r){t.$watch(r.ngHide,(function(t){e[t?"addClass":"removeClass"](n,"ng-hide",{tempClasses:"ng-hide-animate"})}))}}}],aa=Ni((function(e,t,n){e.$watchCollection(n.ngStyle,(function(e,n){n&&e!==n&&k(n,(function(e,n){t.css(n,"")})),e&&t.css(e)}))})),sa=["$animate","$compile",function(e,t){return{require:"ngSwitch",controller:["$scope",function(){this.cases={}}],link:function(n,r,i,o){var a=i.ngSwitch||i.on,s=[],l=[],c=[],u=[],d=function(e,t){return function(n){!1!==n&&e.splice(t,1)}};n.$watch(a,(function(n){for(var r,i;c.length;)e.cancel(c.pop());for(r=0,i=u.length;r<i;++r){var a=ze(l[r].clone);u[r].$destroy(),(c[r]=e.leave(a)).done(d(c,r))}l.length=0,u.length=0,(s=o.cases["!"+n]||o.cases["?"])&&k(s,(function(n){n.transclude((function(r,i){u.push(i);var o=n.element;r[r.length++]=t.$$createComment("end ngSwitchWhen");var a={clone:r};l.push(a),e.enter(r,o.parent(),o)}))}))}))}}}],la=Ni({transclude:"element",priority:1200,require:"^ngSwitch",multiElement:!0,link:function(e,t,n,r,i){k(n.ngSwitchWhen.split(n.ngSwitchWhenSeparator).sort().filter((function(e,t,n){return n[t-1]!==e})),(function(e){r.cases["!"+e]=r.cases["!"+e]||[],r.cases["!"+e].push({transclude:i,element:t})}))}}),ca=Ni({transclude:"element",priority:1200,require:"^ngSwitch",multiElement:!0,link:function(e,t,n,r,i){r.cases["?"]=r.cases["?"]||[],r.cases["?"].push({transclude:i,element:t})}}),ua=i("ngTransclude"),da=["$compile",function(e){return{restrict:"EAC",compile:function(t){var n=e(t.contents());return t.empty(),function(e,t,r,i,o){if(!o)throw ua("orphan","Illegal use of ngTransclude directive in the template! No parent directive that requires a transclusion found. Element: {0}",xe(t));r.ngTransclude===r.$attr.ngTransclude&&(r.ngTransclude="");var a=r.ngTransclude||r.ngTranscludeSlot;function s(){n(e,(function(e){t.append(e)}))}o((function(e,n){e.length&&function(e){for(var t=0,n=e.length;t<n;t++){var r=e[t];if(r.nodeType!==Fe||r.nodeValue.trim())return!0}}(e)?t.append(e):(s(),n.$destroy())}),null,a),a&&!o.isSlotFilled(a)&&s()}}}}],fa=["$templateCache",function(e){return{restrict:"E",terminal:!0,compile:function(t,n){if("text/ng-template"===n.type){var r=n.id,i=t[0].text;e.put(r,i)}}}}],pa={$setViewValue:D,$render:D};function ha(e,t){e.prop("selected",t),e.attr("selected",t)}var ga=["$element","$scope",function(t,n){var r=this,i=new Ft;r.selectValueMap={},r.ngModelCtrl=pa,r.multiple=!1,r.unknownOption=a(e.document.createElement("option")),r.hasEmptyOption=!1,r.emptyOption=void 0,r.renderUnknownOption=function(e){var n=r.generateUnknownOptionValue(e);r.unknownOption.val(n),t.prepend(r.unknownOption),ha(r.unknownOption,!0),t.val(n)},r.updateUnknownOption=function(e){var n=r.generateUnknownOptionValue(e);r.unknownOption.val(n),ha(r.unknownOption,!0),t.val(n)},r.generateUnknownOptionValue=function(e){return"? "+zt(e)+" ?"},r.removeUnknownOption=function(){r.unknownOption.parent()&&r.unknownOption.remove()},r.selectEmptyOption=function(){r.emptyOption&&(t.val(""),ha(r.emptyOption,!0))},r.unselectEmptyOption=function(){r.hasEmptyOption&&ha(r.emptyOption,!1)},n.$on("$destroy",(function(){r.renderUnknownOption=D})),r.readValue=function(){var e=t.val(),n=e in r.selectValueMap?r.selectValueMap[e]:e;return r.hasOption(n)?n:null},r.writeValue=function(e){var n=t[0].options[t[0].selectedIndex];if(n&&ha(a(n),!1),r.hasOption(e)){r.removeUnknownOption();var i=zt(e);t.val(i in r.selectValueMap?i:e);var o=t[0].options[t[0].selectedIndex];ha(a(o),!0)}else r.selectUnknownOrEmptyOption(e)},r.addOption=function(e,t){if(8!==t[0].nodeType){Me(e,'"option value"'),""===e&&(r.hasEmptyOption=!0,r.emptyOption=t);var n=i.get(e)||0;i.set(e,n+1),s()}},r.removeOption=function(e){var t=i.get(e);t&&(1===t?(i.delete(e),""===e&&(r.hasEmptyOption=!1,r.emptyOption=void 0)):i.set(e,t-1))},r.hasOption=function(e){return!!i.get(e)},r.$hasEmptyOption=function(){return r.hasEmptyOption},r.$isUnknownOptionSelected=function(){return t[0].options[0]===r.unknownOption[0]},r.$isEmptyOptionSelected=function(){return r.hasEmptyOption&&t[0].options[t[0].selectedIndex]===r.emptyOption[0]},r.selectUnknownOrEmptyOption=function(e){null==e&&r.emptyOption?(r.removeUnknownOption(),r.selectEmptyOption()):r.unknownOption.parent().length?r.updateUnknownOption(e):r.renderUnknownOption(e)};var o=!1;function s(){o||(o=!0,n.$$postDigest((function(){o=!1,r.ngModelCtrl.$render()})))}var l=!1;function c(e){l||(l=!0,n.$$postDigest((function(){n.$$destroyed||(l=!1,r.ngModelCtrl.$setViewValue(r.readValue()),e&&r.ngModelCtrl.$render())})))}r.registerOption=function(e,t,n,i,o){var a,l;n.$attr.ngValue?n.$observe("value",(function(e){var n,i=t.prop("selected");z(l)&&(r.removeOption(a),delete r.selectValueMap[l],n=!0),l=zt(e),a=e,r.selectValueMap[l]=e,r.addOption(e,t),t.attr("value",l),n&&i&&c()})):i?n.$observe("value",(function(e){var n;r.readValue();var i=t.prop("selected");z(a)&&(r.removeOption(a),n=!0),a=e,r.addOption(e,t),n&&i&&c()})):o?e.$watch(o,(function(e,i){n.$set("value",e);var o=t.prop("selected");i!==e&&r.removeOption(i),r.addOption(e,t),i&&o&&c()})):r.addOption(n.value,t);n.$observe("disabled",(function(e){("true"===e||e&&t.prop("selected"))&&(r.multiple?c(!0):(r.ngModelCtrl.$setViewValue(null),r.ngModelCtrl.$render()))})),t.on("$destroy",(function(){var e=r.readValue(),t=n.value;r.removeOption(t),s(),(r.multiple&&e&&-1!==e.indexOf(t)||e===t)&&c(!0)}))}}],va=function(){return{restrict:"E",require:["select","?ngModel"],controller:ga,priority:1,link:{pre:function(e,t,n,r){var i=r[0],o=r[1];if(!o)return void(i.registerOption=D);if(i.ngModelCtrl=o,t.on("change",(function(){i.removeUnknownOption(),e.$apply((function(){o.$setViewValue(i.readValue())}))})),n.multiple){i.multiple=!0,i.readValue=function(){var e=[];return k(t.find("option"),(function(t){if(t.selected&&!t.disabled){var n=t.value;e.push(n in i.selectValueMap?i.selectValueMap[n]:n)}})),e},i.writeValue=function(e){k(t.find("option"),(function(t){var n=!!e&&(re(e,t.value)||re(e,i.selectValueMap[t.value]));n!==t.selected&&ha(a(t),n)}))};var s,l=NaN;e.$watch((function(){l!==o.$viewValue||se(s,o.$viewValue)||(s=qe(o.$viewValue),o.$render()),l=o.$viewValue})),o.$isEmpty=function(e){return!e||0===e.length}}},post:function(e,t,n,r){var i=r[1];if(!i)return;var o=r[0];i.$render=function(){o.writeValue(i.$viewValue)}}}}},ma=["$interpolate",function(e){return{restrict:"E",priority:100,compile:function(t,n){var r,i;return z(n.ngValue)||(z(n.value)?r=e(n.value,!0):(i=e(t.text(),!0))||n.$set("value",t.text())),function(e,t,n){var o=t.parent(),a=o.data("$selectController")||o.parent().data("$selectController");a&&a.registerOption(e,t,n,r,i)}}}}],ba=["$parse",function(e){return{restrict:"A",require:"?ngModel",link:function(t,n,r,i){if(i){var o=r.hasOwnProperty("required")||e(r.ngRequired)(t);r.ngRequired||(r.required=!0),i.$validators.required=function(e,t){return!o||!i.$isEmpty(t)},r.$observe("required",(function(e){o!==e&&(o=e,i.$validate())}))}}}}],ya=["$parse",function(e){return{restrict:"A",require:"?ngModel",compile:function(t,n){var r,i;return n.ngPattern&&(r=n.ngPattern,i="/"===n.ngPattern.charAt(0)&&c.test(n.ngPattern)?function(){return n.ngPattern}:e(n.ngPattern)),function(e,t,n,o){if(o){var a=n.pattern;n.ngPattern?a=i(e):r=n.pattern;var s=ka(a,r,t);n.$observe("pattern",(function(e){var n=s;s=ka(e,r,t),(n&&n.toString())!==(s&&s.toString())&&o.$validate()})),o.$validators.pattern=function(e,t){return o.$isEmpty(t)||M(s)||s.test(t)}}}}}}],xa=["$parse",function(e){return{restrict:"A",require:"?ngModel",link:function(t,n,r,i){if(i){var o=r.maxlength||e(r.ngMaxlength)(t),a=Aa(o);r.$observe("maxlength",(function(e){o!==e&&(a=Aa(e),o=e,i.$validate())})),i.$validators.maxlength=function(e,t){return a<0||i.$isEmpty(t)||t.length<=a}}}}}],wa=["$parse",function(e){return{restrict:"A",require:"?ngModel",link:function(t,n,r,i){if(i){var o=r.minlength||e(r.ngMinlength)(t),a=Aa(o)||-1;r.$observe("minlength",(function(e){o!==e&&(a=Aa(e)||-1,o=e,i.$validate())})),i.$validators.minlength=function(e,t){return i.$isEmpty(t)||t.length>=a}}}}}];function ka(e,t,n){if(e){if(F(e)&&(e=new RegExp("^"+e+"$")),!e.test)throw i("ngPattern")("noregexp","Expected {0} to be a RegExp but was {1}. Element: {2}",t,e,xe(n));return e}}function Aa(e){var t=T(e);return j(t)?-1:t}e.angular.bootstrap?e.console&&console.log("WARNING: Tried to load AngularJS more than once."):(!function(){var t;if(!De){var n=ce();(s=M(n)?e.jQuery:n?e[n]:void 0)&&s.fn.on?(a=s,O(s.fn,{scope:Tt.scope,isolateScope:Tt.isolateScope,controller:Tt.controller,injector:Tt.injector,inheritedData:Tt.inheritedData})):a=ft,t=a.cleanData,a.cleanData=function(e){for(var n,r,i=0;null!=(r=e[i]);i++)(n=(a._data(r)||{}).events)&&n.$destroy&&a(r).triggerHandler("$destroy");t(e)},y.element=a,De=!0}}(),function(t){O(t,{errorHandlingConfig:n,bootstrap:Oe,copy:oe,extend:O,merge:_,equals:se,element:a,forEach:k,injector:Qt,noop:D,bind:fe,toJson:he,fromJson:ge,identity:R,isUndefined:M,isDefined:z,isString:F,isFunction:G,isObject:L,isNumber:q,isElement:te,isArray:U,version:Ue,isDate:V,callbacks:{$$counter:0},getTestability:Te,reloadWithDebugInfo:_e,UNSAFE_restoreLegacyJqLiteXHTMLReplacement:Re,$$minErr:i,$$csp:le,$$encodeUriSegment:Ae,$$encodeUriQuery:Ee,$$lowercase:d,$$stringify:Be,$$uppercase:f}),(l=function(e){var t=i("$injector"),n=i("ng");function r(e,t,n){return e[t]||(e[t]=n())}var o=r(e,"angular",Object);return o.$$minErr=o.$$minErr||i,r(o,"module",(function(){var e={};return function(i,o,a){var s={};return function(e,t){if("hasOwnProperty"===e)throw n("badname","hasOwnProperty is not a valid {0} name",t)}(i,"module"),o&&e.hasOwnProperty(i)&&(e[i]=null),r(e,i,(function(){if(!o)throw t("nomod","Module '{0}' is not available! You either misspelled the module name or forgot to load it. If registering a module ensure that you specify the dependencies as the second argument.",i);var e=[],r=[],l=[],c=d("$injector","invoke","push",r),u={_invokeQueue:e,_configBlocks:r,_runBlocks:l,info:function(e){if(z(e)){if(!L(e))throw n("aobj","Argument '{0}' must be an object","value");return s=e,this}return s},requires:o,name:i,provider:f("$provide","provider"),factory:f("$provide","factory"),service:f("$provide","service"),value:d("$provide","value"),constant:d("$provide","constant","unshift"),decorator:f("$provide","decorator",r),animation:f("$animateProvider","register"),filter:f("$filterProvider","register"),controller:f("$controllerProvider","register"),directive:f("$compileProvider","directive"),component:f("$compileProvider","component"),config:c,run:function(e){return l.push(e),this}};return a&&c(a),u;function d(t,n,r,i){return i||(i=e),function(){return i[r||"push"]([t,n,arguments]),u}}function f(t,n,r){return r||(r=e),function(e,o){return o&&G(o)&&(o.$$moduleName=i),r.push([t,n,arguments]),u}}}))}}))}(e))("ng",["ngLocale"],["$provide",function(e){e.provider({$$sanitizeUri:qr}),e.provider("$compile",gn).directive({a:Mi,input:vo,textarea:vo,form:qi,script:fa,select:va,option:ma,ngBind:xo,ngBindHtml:ko,ngBindTemplate:wo,ngClass:So,ngClassEven:$o,ngClassOdd:Co,ngCloak:Oo,ngController:_o,ngForm:Vi,ngHide:oa,ngIf:Do,ngInclude:Ro,ngInit:No,ngNonBindable:Zo,ngPluralize:ea,ngRef:na,ngRepeat:ra,ngShow:ia,ngStyle:aa,ngSwitch:sa,ngSwitchWhen:la,ngSwitchDefault:ca,ngOptions:Ko,ngTransclude:da,ngModel:Ho,ngList:Mo,ngChange:Ao,pattern:ya,ngPattern:ya,required:ba,ngRequired:ba,minlength:wa,ngMinlength:wa,maxlength:xa,ngMaxlength:xa,ngValue:yo,ngModelOptions:Yo}).directive({ngInclude:Io,input:mo}).directive(zi).directive(To),e.provider({$anchorScroll:Jt,$animate:on,$animateCss:ln,$$animateJs:nn,$$animateQueue:rn,$$AnimateRunner:sn,$$animateAsyncRun:an,$browser:un,$cacheFactory:dn,$controller:Sn,$document:Cn,$$isDocumentHidden:$n,$exceptionHandler:On,$filter:pi,$$forceReflow:_n,$interpolate:Wn,$interval:Xn,$$intervalFactory:Zn,$http:Vn,$httpParamSerializer:Nn,$httpParamSerializerJQLike:Mn,$httpBackend:Hn,$xhrFactory:Un,$jsonpCallbacks:Qn,$location:hr,$log:gr,$parse:Dr,$rootScope:Fr,$q:Rr,$$q:Ir,$sce:Xr,$sceDelegate:Yr,$sniffer:Zr,$$taskTrackerFactory:Qr,$templateCache:fn,$templateRequest:ei,$$testability:ti,$timeout:ri,$window:ui,$$rAF:Br,$$jqLite:Mt,$$Map:qt,$$cookieReader:fi})}]).info({angularVersion:"1.8.2"})}(y),y.module("ngLocale",[],["$provide",function(e){var t="one",n="other";e.value("$locale",{DATETIME_FORMATS:{AMPMS:["AM","PM"],DAY:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],ERANAMES:["Before Christ","Anno Domini"],ERAS:["BC","AD"],FIRSTDAYOFWEEK:6,MONTH:["January","February","March","April","May","June","July","August","September","October","November","December"],SHORTDAY:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],SHORTMONTH:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],STANDALONEMONTH:["January","February","March","April","May","June","July","August","September","October","November","December"],WEEKENDRANGE:[5,6],fullDate:"EEEE, MMMM d, y",longDate:"MMMM d, y",medium:"MMM d, y h:mm:ss a",mediumDate:"MMM d, y",mediumTime:"h:mm:ss a",short:"M/d/yy h:mm a",shortDate:"M/d/yy",shortTime:"h:mm a"},NUMBER_FORMATS:{CURRENCY_SYM:"$",DECIMAL_SEP:".",GROUP_SEP:",",PATTERNS:[{gSize:3,lgSize:3,maxFrac:3,minFrac:0,minInt:1,negPre:"-",negSuf:"",posPre:"",posSuf:""},{gSize:3,lgSize:3,maxFrac:2,minFrac:2,minInt:1,negPre:"-¤",negSuf:"",posPre:"¤",posSuf:""}]},id:"en-us",localeID:"en_US",pluralCat:function(e,r){var i=0|e,o=function(e,t){var n=t;void 0===n&&(n=Math.min(function(e){var t=(e+="").indexOf(".");return-1==t?0:e.length-t-1}(e),3));var r=Math.pow(10,n);return{v:n,f:(e*r|0)%r}}(e,r);return 1==i&&0==o.v?t:n}})}]),a((function(){$e(e.document,Oe)})))}(window),!window.angular.$$csp().noInlineStyle&&window.angular.element(document.head).prepend(window.angular.element("<style>").text('@charset "UTF-8";[ng\\:cloak],[ng-cloak],[data-ng-cloak],[x-ng-cloak],.ng-cloak,.x-ng-cloak,.ng-hide:not(.ng-hide-animate){display:none !important;}ng\\:form{display:block;}.ng-animate-shim{visibility:hidden;}.ng-anchor{position:absolute;}'))},function(e,t,n){"use strict";n(210);const r=n(31),i=n(9);window.jQuery=r,n(217),n(218),n(219),n(225),n(227),i.module("dbt",["ngRoute","ui.router","hc.marked"]).config(["markedProvider","$locationProvider",function(e,t){e.setOptions({gfm:!0,sanitize:!0}),e.setRenderer({table:function(e,t){return"<table class='table'><thead>"+e+"</thead><tbody>"+t+"</tbody></table>"}}),t.html5Mode({enabled:!1}),r(document).tooltip({selector:'[data-toggle="tooltip"]',placement:function(e,t){return r(t).attr("data-placement")?r(t).attr("data-placement"):"auto"},container:"body"}),r(document).ready((function(){r("[data-toggle=popover]").popover({container:"body",html:!0})}))}])},function(e,t,n){var r=n(211);"string"==typeof r&&(r=[[e.i,r,""]]);var i={hmr:!0,transform:void 0,insertInto:void 0};n(40)(r,i);r.locals&&(e.exports=r.locals)},function(e,t,n){var r=n(212);(e.exports=n(39)(!1)).push([e.i,'@media (max-width: 960px){[data-large]{display:none !important}}@media (min-width: 961px){[data-small]{display:none !important}}@media screen{[data-print]{display:none !important}}@media print{[data-screen]{display:none !important}}html.touchevents [data-click]{display:none !important}html.no-touchevents [data-touch]{display:none !important}/*! normalize.css v3.0.3 | MIT License | github.com/necolas/normalize.css */html{font-family:sans-serif;-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%}body{margin:0}article,aside,details,figcaption,figure,footer,header,hgroup,main,menu,nav,section,summary{display:block}audio,canvas,progress,video{display:inline-block;vertical-align:baseline}audio:not([controls]){display:none;height:0}[hidden],template{display:none}a{background-color:transparent}a:active,a:hover{outline:0}abbr[title]{border-bottom:1px dotted}b,strong{font-weight:bold}dfn{font-style:italic}h1{font-size:2em;margin:0.67em 0}mark{background:#ff0;color:#000}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sup{top:-0.5em}sub{bottom:-0.25em}img{border:0}svg:not(:root){overflow:hidden}figure{margin:1em 40px}hr{box-sizing:content-box;height:0}pre{overflow:auto}code,kbd,pre,samp{font-family:monospace, monospace;font-size:1em}button,input,optgroup,select,textarea{color:inherit;font:inherit;margin:0}button{overflow:visible}button,select{text-transform:none}button,html input[type="button"],input[type="reset"],input[type="submit"]{-webkit-appearance:button;cursor:pointer}button[disabled],html input[disabled]{cursor:default}button::-moz-focus-inner,input::-moz-focus-inner{border:0;padding:0}input{line-height:normal}input[type="checkbox"],input[type="radio"]{box-sizing:border-box;padding:0}input[type="number"]::-webkit-inner-spin-button,input[type="number"]::-webkit-outer-spin-button{height:auto}input[type="search"]{-webkit-appearance:textfield;box-sizing:content-box}input[type="search"]::-webkit-search-cancel-button,input[type="search"]::-webkit-search-decoration{-webkit-appearance:none}fieldset{border:1px solid #c0c0c0;margin:0 2px;padding:0.35em 0.625em 0.75em}legend{border:0;padding:0}textarea{overflow:auto}optgroup{font-weight:bold}table{border-collapse:collapse;border-spacing:0}td,th{padding:0}*{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}*:before,*:after{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}html{font-size:10px;-webkit-tap-highlight-color:transparent}body{font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Oxygen,Ubuntu,Cantarell,"Fira Sans","Droid Sans","Helvetica Neue",Helvetica,Arial,sans-serif;font-size:1rem;line-height:1.6;color:#5e666c;background-color:#f9fafb}input,button,select,textarea{font-family:inherit;font-size:inherit;line-height:inherit}a{color:#0bb;text-decoration:none}a:hover,a:focus{color:#009595;text-decoration:none}a:focus{outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}figure{margin:0}img{vertical-align:middle}.img-responsive{display:block;max-width:100%;height:auto}.img-rounded{border-radius:4px}.img-thumbnail{padding:0;line-height:1.6;background-color:#fff;border:1px solid transparent;border-radius:4px;-webkit-transition:all 0.2s ease-in-out;-o-transition:all 0.2s ease-in-out;transition:all 0.2s ease-in-out;display:inline-block;max-width:100%;height:auto}.img-circle{border-radius:50%}hr{margin-top:1.6rem;margin-bottom:1.6rem;border:0;border-top:1px solid rgba(0,30,60,0.075)}.sr-only{position:absolute;width:1px;height:1px;margin:-1px;padding:0;overflow:hidden;clip:rect(0, 0, 0, 0);border:0}.sr-only-focusable:active,.sr-only-focusable:focus{position:static;width:auto;height:auto;margin:0;overflow:visible;clip:auto}[role="button"]{cursor:pointer}h1,h2,h3,h4,h5,h6,.h1,.h2,.h3,.h4,.h5,.h6{font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Oxygen,Ubuntu,Cantarell,"Fira Sans","Droid Sans","Helvetica Neue",Helvetica,Arial,sans-serif;font-weight:normal;line-height:false;color:#313539}h1 small,h1 .small,h2 small,h2 .small,h3 small,h3 .small,h4 small,h4 .small,h5 small,h5 .small,h6 small,h6 .small,.h1 small,.h1 .small,.h2 small,.h2 .small,.h3 small,.h3 .small,.h4 small,.h4 .small,.h5 small,.h5 .small,.h6 small,.h6 .small{font-weight:normal;line-height:1;color:#8b969e}h1,.h1,h2,.h2,h3,.h3{margin-top:1.6rem;margin-bottom:.8rem}h1 small,h1 .small,.h1 small,.h1 .small,h2 small,h2 .small,.h2 small,.h2 .small,h3 small,h3 .small,.h3 small,.h3 .small{font-size:65%}h4,.h4,h5,.h5,h6,.h6{margin-top:.8rem;margin-bottom:.8rem}h4 small,h4 .small,.h4 small,.h4 .small,h5 small,h5 .small,.h5 small,.h5 .small,h6 small,h6 .small,.h6 small,.h6 .small{font-size:75%}h1,.h1{font-size:1.7142857143rem}h2,.h2{font-size:1.7142857143rem}h3,.h3{font-size:1.2857142857rem}h4,.h4{font-size:1.1428571429rem}h5,.h5{font-size:1rem}h6,.h6{font-size:1rem}p{margin:0 0 .8rem}.lead{margin-bottom:1.6rem;font-size:1rem;font-weight:300;line-height:1.4}@media (min-width: 540px){.lead{font-size:1.5rem}}small,.small{font-size:92%}mark,.mark{background-color:#fff6ec;padding:.2em}.text-left{text-align:left}.text-right{text-align:right}.text-center{text-align:center}.text-justify{text-align:justify}.text-nowrap{white-space:nowrap}.text-lowercase{text-transform:lowercase}.text-uppercase,.initialism{text-transform:uppercase}.text-capitalize{text-transform:capitalize}.text-muted{color:#8b969e}.text-primary{color:#0bb}a.text-primary:hover,a.text-primary:focus{color:#088}.text-success{color:#48a71c}a.text-success:hover,a.text-success:focus{color:#357b15}.text-info{color:#0aa}a.text-info:hover,a.text-info:focus{color:#077}.text-warning{color:#ff6316}a.text-warning:hover,a.text-warning:focus{color:#e24b00}.text-danger{color:#ff694b}a.text-danger:hover,a.text-danger:focus{color:#ff3f18}.bg-primary{color:#fff}.bg-primary{background-color:#0bb}a.bg-primary:hover,a.bg-primary:focus{background-color:#088}.bg-success{background-color:#f3faec}a.bg-success:hover,a.bg-success:focus{background-color:#daefc4}.bg-info{background-color:#edfafa}a.bg-info:hover,a.bg-info:focus{background-color:#c5efef}.bg-warning{background-color:#fff6ec}a.bg-warning:hover,a.bg-warning:focus{background-color:#ffdeb9}.bg-danger{background-color:#fff5f4}a.bg-danger:hover,a.bg-danger:focus{background-color:#ffc7c1}.page-header{padding-bottom:-.2rem;margin:3.2rem 0 1.6rem;border-bottom:1px solid #f7f7f8}ul,ol{margin-top:0;margin-bottom:.8rem}ul ul,ul ol,ol ul,ol ol{margin-bottom:0}.list-unstyled{padding-left:0;list-style:none}.list-inline{padding-left:0;list-style:none;margin-left:-5px}.list-inline>li{display:inline-block;padding-left:5px;padding-right:5px}dl{margin-top:0;margin-bottom:1.6rem}dt,dd{line-height:1.6}dt{font-weight:bold}dd{margin-left:0}.dl-horizontal dd:before,.dl-horizontal dd:after{content:" ";display:table}.dl-horizontal dd:after{clear:both}@media (min-width: 260px){.dl-horizontal dt{float:left;width:160px;clear:left;text-align:right;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.dl-horizontal dd{margin-left:180px}}abbr[title],abbr[data-original-title]{cursor:help;border-bottom:1px dotted rgba(0,30,60,0.075)}.initialism{font-size:90%}blockquote{padding:.8rem 1.6rem;margin:0 0 1.6rem;font-size:1rem;border-left:5px solid transparent}blockquote p:last-child,blockquote ul:last-child,blockquote ol:last-child{margin-bottom:0}blockquote footer,blockquote small,blockquote .small{display:block;font-size:80%;line-height:1.6;color:#8b969e}blockquote footer:before,blockquote small:before,blockquote .small:before{content:\'\\2014 \\A0\'}.blockquote-reverse,blockquote.pull-right{padding-right:15px;padding-left:0;border-right:5px solid transparent;border-left:0;text-align:right}.blockquote-reverse footer:before,.blockquote-reverse small:before,.blockquote-reverse .small:before,blockquote.pull-right footer:before,blockquote.pull-right small:before,blockquote.pull-right .small:before{content:\'\'}.blockquote-reverse footer:after,.blockquote-reverse small:after,.blockquote-reverse .small:after,blockquote.pull-right footer:after,blockquote.pull-right small:after,blockquote.pull-right .small:after{content:\'\\A0 \\2014\'}address{margin-bottom:1.6rem;font-style:normal;line-height:1.6}code,kbd,pre,samp{font-family:"Monaco",monospace}code{padding:2px 4px;font-size:90%;color:#313539;background-color:transparent;border-radius:4px}kbd{padding:2px 4px;font-size:90%;color:#313539;background-color:transparent;border-radius:4px;box-shadow:inset 0 -1px 0 rgba(0,0,0,0.25)}kbd kbd{padding:0;font-size:100%;font-weight:bold;box-shadow:none}pre{display:block;padding:.3rem;margin:0 0 .8rem;font-size:0rem;line-height:1.6;word-break:break-all;word-wrap:break-word;color:#fff;background-color:#005e7a;border:1px solid transparent;border-radius:4px}pre code{padding:0;font-size:inherit;color:inherit;white-space:pre-wrap;background-color:transparent;border-radius:0}.pre-scrollable{max-height:340px;overflow-y:scroll}.container{margin-right:auto;margin-left:auto;padding-left:30px;padding-right:30px}.container:before,.container:after{content:" ";display:table}.container:after{clear:both}@media (min-width: 540px){.container{width:780px}}@media (min-width: 768px){.container{width:1000px}}@media (min-width: 960px){.container{width:1200px}}.container-fluid{margin-right:auto;margin-left:auto;padding-left:30px;padding-right:30px}.container-fluid:before,.container-fluid:after{content:" ";display:table}.container-fluid:after{clear:both}.row{margin-left:-30px;margin-right:-30px}.row:before,.row:after{content:" ";display:table}.row:after{clear:both}.col-xs-1,.col-sm-1,.col-md-1,.col-lg-1,.col-xs-2,.col-sm-2,.col-md-2,.col-lg-2,.col-xs-3,.col-sm-3,.col-md-3,.col-lg-3,.col-xs-4,.col-sm-4,.col-md-4,.col-lg-4,.col-xs-5,.col-sm-5,.col-md-5,.col-lg-5,.col-xs-6,.col-sm-6,.col-md-6,.col-lg-6,.col-xs-7,.col-sm-7,.col-md-7,.col-lg-7,.col-xs-8,.col-sm-8,.col-md-8,.col-lg-8,.col-xs-9,.col-sm-9,.col-md-9,.col-lg-9,.col-xs-10,.col-sm-10,.col-md-10,.col-lg-10,.col-xs-11,.col-sm-11,.col-md-11,.col-lg-11,.col-xs-12,.col-sm-12,.col-md-12,.col-lg-12{position:relative;min-height:1px;padding-left:30px;padding-right:30px}.col-xs-1,.col-xs-2,.col-xs-3,.col-xs-4,.col-xs-5,.col-xs-6,.col-xs-7,.col-xs-8,.col-xs-9,.col-xs-10,.col-xs-11,.col-xs-12{float:left}.col-xs-1{width:8.3333333333%}.col-xs-2{width:16.6666666667%}.col-xs-3{width:25%}.col-xs-4{width:33.3333333333%}.col-xs-5{width:41.6666666667%}.col-xs-6{width:50%}.col-xs-7{width:58.3333333333%}.col-xs-8{width:66.6666666667%}.col-xs-9{width:75%}.col-xs-10{width:83.3333333333%}.col-xs-11{width:91.6666666667%}.col-xs-12{width:100%}.col-xs-pull-0{right:auto}.col-xs-pull-1{right:8.3333333333%}.col-xs-pull-2{right:16.6666666667%}.col-xs-pull-3{right:25%}.col-xs-pull-4{right:33.3333333333%}.col-xs-pull-5{right:41.6666666667%}.col-xs-pull-6{right:50%}.col-xs-pull-7{right:58.3333333333%}.col-xs-pull-8{right:66.6666666667%}.col-xs-pull-9{right:75%}.col-xs-pull-10{right:83.3333333333%}.col-xs-pull-11{right:91.6666666667%}.col-xs-pull-12{right:100%}.col-xs-push-0{left:auto}.col-xs-push-1{left:8.3333333333%}.col-xs-push-2{left:16.6666666667%}.col-xs-push-3{left:25%}.col-xs-push-4{left:33.3333333333%}.col-xs-push-5{left:41.6666666667%}.col-xs-push-6{left:50%}.col-xs-push-7{left:58.3333333333%}.col-xs-push-8{left:66.6666666667%}.col-xs-push-9{left:75%}.col-xs-push-10{left:83.3333333333%}.col-xs-push-11{left:91.6666666667%}.col-xs-push-12{left:100%}.col-xs-offset-0{margin-left:0%}.col-xs-offset-1{margin-left:8.3333333333%}.col-xs-offset-2{margin-left:16.6666666667%}.col-xs-offset-3{margin-left:25%}.col-xs-offset-4{margin-left:33.3333333333%}.col-xs-offset-5{margin-left:41.6666666667%}.col-xs-offset-6{margin-left:50%}.col-xs-offset-7{margin-left:58.3333333333%}.col-xs-offset-8{margin-left:66.6666666667%}.col-xs-offset-9{margin-left:75%}.col-xs-offset-10{margin-left:83.3333333333%}.col-xs-offset-11{margin-left:91.6666666667%}.col-xs-offset-12{margin-left:100%}@media (min-width: 540px){.col-sm-1,.col-sm-2,.col-sm-3,.col-sm-4,.col-sm-5,.col-sm-6,.col-sm-7,.col-sm-8,.col-sm-9,.col-sm-10,.col-sm-11,.col-sm-12{float:left}.col-sm-1{width:8.3333333333%}.col-sm-2{width:16.6666666667%}.col-sm-3{width:25%}.col-sm-4{width:33.3333333333%}.col-sm-5{width:41.6666666667%}.col-sm-6{width:50%}.col-sm-7{width:58.3333333333%}.col-sm-8{width:66.6666666667%}.col-sm-9{width:75%}.col-sm-10{width:83.3333333333%}.col-sm-11{width:91.6666666667%}.col-sm-12{width:100%}.col-sm-pull-0{right:auto}.col-sm-pull-1{right:8.3333333333%}.col-sm-pull-2{right:16.6666666667%}.col-sm-pull-3{right:25%}.col-sm-pull-4{right:33.3333333333%}.col-sm-pull-5{right:41.6666666667%}.col-sm-pull-6{right:50%}.col-sm-pull-7{right:58.3333333333%}.col-sm-pull-8{right:66.6666666667%}.col-sm-pull-9{right:75%}.col-sm-pull-10{right:83.3333333333%}.col-sm-pull-11{right:91.6666666667%}.col-sm-pull-12{right:100%}.col-sm-push-0{left:auto}.col-sm-push-1{left:8.3333333333%}.col-sm-push-2{left:16.6666666667%}.col-sm-push-3{left:25%}.col-sm-push-4{left:33.3333333333%}.col-sm-push-5{left:41.6666666667%}.col-sm-push-6{left:50%}.col-sm-push-7{left:58.3333333333%}.col-sm-push-8{left:66.6666666667%}.col-sm-push-9{left:75%}.col-sm-push-10{left:83.3333333333%}.col-sm-push-11{left:91.6666666667%}.col-sm-push-12{left:100%}.col-sm-offset-0{margin-left:0%}.col-sm-offset-1{margin-left:8.3333333333%}.col-sm-offset-2{margin-left:16.6666666667%}.col-sm-offset-3{margin-left:25%}.col-sm-offset-4{margin-left:33.3333333333%}.col-sm-offset-5{margin-left:41.6666666667%}.col-sm-offset-6{margin-left:50%}.col-sm-offset-7{margin-left:58.3333333333%}.col-sm-offset-8{margin-left:66.6666666667%}.col-sm-offset-9{margin-left:75%}.col-sm-offset-10{margin-left:83.3333333333%}.col-sm-offset-11{margin-left:91.6666666667%}.col-sm-offset-12{margin-left:100%}}@media (min-width: 768px){.col-md-1,.col-md-2,.col-md-3,.col-md-4,.col-md-5,.col-md-6,.col-md-7,.col-md-8,.col-md-9,.col-md-10,.col-md-11,.col-md-12{float:left}.col-md-1{width:8.3333333333%}.col-md-2{width:16.6666666667%}.col-md-3{width:25%}.col-md-4{width:33.3333333333%}.col-md-5{width:41.6666666667%}.col-md-6{width:50%}.col-md-7{width:58.3333333333%}.col-md-8{width:66.6666666667%}.col-md-9{width:75%}.col-md-10{width:83.3333333333%}.col-md-11{width:91.6666666667%}.col-md-12{width:100%}.col-md-pull-0{right:auto}.col-md-pull-1{right:8.3333333333%}.col-md-pull-2{right:16.6666666667%}.col-md-pull-3{right:25%}.col-md-pull-4{right:33.3333333333%}.col-md-pull-5{right:41.6666666667%}.col-md-pull-6{right:50%}.col-md-pull-7{right:58.3333333333%}.col-md-pull-8{right:66.6666666667%}.col-md-pull-9{right:75%}.col-md-pull-10{right:83.3333333333%}.col-md-pull-11{right:91.6666666667%}.col-md-pull-12{right:100%}.col-md-push-0{left:auto}.col-md-push-1{left:8.3333333333%}.col-md-push-2{left:16.6666666667%}.col-md-push-3{left:25%}.col-md-push-4{left:33.3333333333%}.col-md-push-5{left:41.6666666667%}.col-md-push-6{left:50%}.col-md-push-7{left:58.3333333333%}.col-md-push-8{left:66.6666666667%}.col-md-push-9{left:75%}.col-md-push-10{left:83.3333333333%}.col-md-push-11{left:91.6666666667%}.col-md-push-12{left:100%}.col-md-offset-0{margin-left:0%}.col-md-offset-1{margin-left:8.3333333333%}.col-md-offset-2{margin-left:16.6666666667%}.col-md-offset-3{margin-left:25%}.col-md-offset-4{margin-left:33.3333333333%}.col-md-offset-5{margin-left:41.6666666667%}.col-md-offset-6{margin-left:50%}.col-md-offset-7{margin-left:58.3333333333%}.col-md-offset-8{margin-left:66.6666666667%}.col-md-offset-9{margin-left:75%}.col-md-offset-10{margin-left:83.3333333333%}.col-md-offset-11{margin-left:91.6666666667%}.col-md-offset-12{margin-left:100%}}@media (min-width: 960px){.col-lg-1,.col-lg-2,.col-lg-3,.col-lg-4,.col-lg-5,.col-lg-6,.col-lg-7,.col-lg-8,.col-lg-9,.col-lg-10,.col-lg-11,.col-lg-12{float:left}.col-lg-1{width:8.3333333333%}.col-lg-2{width:16.6666666667%}.col-lg-3{width:25%}.col-lg-4{width:33.3333333333%}.col-lg-5{width:41.6666666667%}.col-lg-6{width:50%}.col-lg-7{width:58.3333333333%}.col-lg-8{width:66.6666666667%}.col-lg-9{width:75%}.col-lg-10{width:83.3333333333%}.col-lg-11{width:91.6666666667%}.col-lg-12{width:100%}.col-lg-pull-0{right:auto}.col-lg-pull-1{right:8.3333333333%}.col-lg-pull-2{right:16.6666666667%}.col-lg-pull-3{right:25%}.col-lg-pull-4{right:33.3333333333%}.col-lg-pull-5{right:41.6666666667%}.col-lg-pull-6{right:50%}.col-lg-pull-7{right:58.3333333333%}.col-lg-pull-8{right:66.6666666667%}.col-lg-pull-9{right:75%}.col-lg-pull-10{right:83.3333333333%}.col-lg-pull-11{right:91.6666666667%}.col-lg-pull-12{right:100%}.col-lg-push-0{left:auto}.col-lg-push-1{left:8.3333333333%}.col-lg-push-2{left:16.6666666667%}.col-lg-push-3{left:25%}.col-lg-push-4{left:33.3333333333%}.col-lg-push-5{left:41.6666666667%}.col-lg-push-6{left:50%}.col-lg-push-7{left:58.3333333333%}.col-lg-push-8{left:66.6666666667%}.col-lg-push-9{left:75%}.col-lg-push-10{left:83.3333333333%}.col-lg-push-11{left:91.6666666667%}.col-lg-push-12{left:100%}.col-lg-offset-0{margin-left:0%}.col-lg-offset-1{margin-left:8.3333333333%}.col-lg-offset-2{margin-left:16.6666666667%}.col-lg-offset-3{margin-left:25%}.col-lg-offset-4{margin-left:33.3333333333%}.col-lg-offset-5{margin-left:41.6666666667%}.col-lg-offset-6{margin-left:50%}.col-lg-offset-7{margin-left:58.3333333333%}.col-lg-offset-8{margin-left:66.6666666667%}.col-lg-offset-9{margin-left:75%}.col-lg-offset-10{margin-left:83.3333333333%}.col-lg-offset-11{margin-left:91.6666666667%}.col-lg-offset-12{margin-left:100%}}table{background-color:transparent}caption{padding-top:.6785714286rem 1.25rem;padding-bottom:.6785714286rem 1.25rem;color:#8b969e;text-align:left}th{text-align:left}.table{width:100%;max-width:100%;margin-bottom:1.6rem}.table>thead>tr>th,.table>thead>tr>td,.table>tbody>tr>th,.table>tbody>tr>td,.table>tfoot>tr>th,.table>tfoot>tr>td{padding:.6785714286rem 1.25rem;line-height:1.6;vertical-align:top;border-top:1px solid rgba(0,30,60,0.075)}.table>thead>tr>th{vertical-align:bottom;border-bottom:2px solid rgba(0,30,60,0.075)}.table>caption+thead>tr:first-child>th,.table>caption+thead>tr:first-child>td,.table>colgroup+thead>tr:first-child>th,.table>colgroup+thead>tr:first-child>td,.table>thead:first-child>tr:first-child>th,.table>thead:first-child>tr:first-child>td{border-top:0}.table>tbody+tbody{border-top:2px solid rgba(0,30,60,0.075)}.table .table{background-color:#f9fafb}.table-condensed>thead>tr>th,.table-condensed>thead>tr>td,.table-condensed>tbody>tr>th,.table-condensed>tbody>tr>td,.table-condensed>tfoot>tr>th,.table-condensed>tfoot>tr>td{padding:.4464285714rem .875rem}.table-bordered{border:1px solid rgba(0,30,60,0.075)}.table-bordered>thead>tr>th,.table-bordered>thead>tr>td,.table-bordered>tbody>tr>th,.table-bordered>tbody>tr>td,.table-bordered>tfoot>tr>th,.table-bordered>tfoot>tr>td{border:1px solid rgba(0,30,60,0.075)}.table-bordered>thead>tr>th,.table-bordered>thead>tr>td{border-bottom-width:2px}.table-striped>tbody>tr:nth-of-type(odd){background-color:#f9fafb}.table-hover>tbody>tr:hover{background-color:#f9fafb}table col[class*="col-"]{position:static;float:none;display:table-column}table td[class*="col-"],table th[class*="col-"]{position:static;float:none;display:table-cell}.table>thead>tr>td.active,.table>thead>tr>th.active,.table>thead>tr.active>td,.table>thead>tr.active>th,.table>tbody>tr>td.active,.table>tbody>tr>th.active,.table>tbody>tr.active>td,.table>tbody>tr.active>th,.table>tfoot>tr>td.active,.table>tfoot>tr>th.active,.table>tfoot>tr.active>td,.table>tfoot>tr.active>th{background-color:#f9fafb}.table-hover>tbody>tr>td.active:hover,.table-hover>tbody>tr>th.active:hover,.table-hover>tbody>tr.active:hover>td,.table-hover>tbody>tr:hover>.active,.table-hover>tbody>tr.active:hover>th{background-color:#eaedf1}.table>thead>tr>td.success,.table>thead>tr>th.success,.table>thead>tr.success>td,.table>thead>tr.success>th,.table>tbody>tr>td.success,.table>tbody>tr>th.success,.table>tbody>tr.success>td,.table>tbody>tr.success>th,.table>tfoot>tr>td.success,.table>tfoot>tr>th.success,.table>tfoot>tr.success>td,.table>tfoot>tr.success>th{background-color:#f3faec}.table-hover>tbody>tr>td.success:hover,.table-hover>tbody>tr>th.success:hover,.table-hover>tbody>tr.success:hover>td,.table-hover>tbody>tr:hover>.success,.table-hover>tbody>tr.success:hover>th{background-color:#e6f5d8}.table>thead>tr>td.info,.table>thead>tr>th.info,.table>thead>tr.info>td,.table>thead>tr.info>th,.table>tbody>tr>td.info,.table>tbody>tr>th.info,.table>tbody>tr.info>td,.table>tbody>tr.info>th,.table>tfoot>tr>td.info,.table>tfoot>tr>th.info,.table>tfoot>tr.info>td,.table>tfoot>tr.info>th{background-color:#edfafa}.table-hover>tbody>tr>td.info:hover,.table-hover>tbody>tr>th.info:hover,.table-hover>tbody>tr.info:hover>td,.table-hover>tbody>tr:hover>.info,.table-hover>tbody>tr.info:hover>th{background-color:#d9f4f4}.table>thead>tr>td.warning,.table>thead>tr>th.warning,.table>thead>tr.warning>td,.table>thead>tr.warning>th,.table>tbody>tr>td.warning,.table>tbody>tr>th.warning,.table>tbody>tr.warning>td,.table>tbody>tr.warning>th,.table>tfoot>tr>td.warning,.table>tfoot>tr>th.warning,.table>tfoot>tr.warning>td,.table>tfoot>tr.warning>th{background-color:#fff6ec}.table-hover>tbody>tr>td.warning:hover,.table-hover>tbody>tr>th.warning:hover,.table-hover>tbody>tr.warning:hover>td,.table-hover>tbody>tr:hover>.warning,.table-hover>tbody>tr.warning:hover>th{background-color:#ffead3}.table>thead>tr>td.danger,.table>thead>tr>th.danger,.table>thead>tr.danger>td,.table>thead>tr.danger>th,.table>tbody>tr>td.danger,.table>tbody>tr>th.danger,.table>tbody>tr.danger>td,.table>tbody>tr.danger>th,.table>tfoot>tr>td.danger,.table>tfoot>tr>th.danger,.table>tfoot>tr.danger>td,.table>tfoot>tr.danger>th{background-color:#fff5f4}.table-hover>tbody>tr>td.danger:hover,.table-hover>tbody>tr>th.danger:hover,.table-hover>tbody>tr.danger:hover>td,.table-hover>tbody>tr:hover>.danger,.table-hover>tbody>tr.danger:hover>th{background-color:#ffdedb}.table-responsive{overflow-x:auto;min-height:0.01%}@media screen and (max-width: 539px){.table-responsive{width:100%;margin-bottom:1.2rem;overflow-y:hidden;-ms-overflow-style:-ms-autohiding-scrollbar;border:1px solid rgba(0,30,60,0.075)}.table-responsive>.table{margin-bottom:0}.table-responsive>.table>thead>tr>th,.table-responsive>.table>thead>tr>td,.table-responsive>.table>tbody>tr>th,.table-responsive>.table>tbody>tr>td,.table-responsive>.table>tfoot>tr>th,.table-responsive>.table>tfoot>tr>td{white-space:nowrap}.table-responsive>.table-bordered{border:0}.table-responsive>.table-bordered>thead>tr>th:first-child,.table-responsive>.table-bordered>thead>tr>td:first-child,.table-responsive>.table-bordered>tbody>tr>th:first-child,.table-responsive>.table-bordered>tbody>tr>td:first-child,.table-responsive>.table-bordered>tfoot>tr>th:first-child,.table-responsive>.table-bordered>tfoot>tr>td:first-child{border-left:0}.table-responsive>.table-bordered>thead>tr>th:last-child,.table-responsive>.table-bordered>thead>tr>td:last-child,.table-responsive>.table-bordered>tbody>tr>th:last-child,.table-responsive>.table-bordered>tbody>tr>td:last-child,.table-responsive>.table-bordered>tfoot>tr>th:last-child,.table-responsive>.table-bordered>tfoot>tr>td:last-child{border-right:0}.table-responsive>.table-bordered>tbody>tr:last-child>th,.table-responsive>.table-bordered>tbody>tr:last-child>td,.table-responsive>.table-bordered>tfoot>tr:last-child>th,.table-responsive>.table-bordered>tfoot>tr:last-child>td{border-bottom:0}}fieldset{padding:0;margin:0;border:0;min-width:0}legend{display:block;width:100%;padding:0;margin-bottom:1.6rem;font-size:1.5rem;line-height:inherit;color:#8b969e;border:0;border-bottom:1px solid rgba(0,30,60,0.075)}label{display:inline-block;max-width:100%;margin-bottom:5px;font-weight:bold}input[type="search"]{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}input[type="radio"],input[type="checkbox"]{margin:4px 0 0;margin-top:1px \\9;line-height:normal}input[type="file"]{display:block}input[type="range"]{display:block;width:100%}select[multiple],select[size]{height:auto}input[type="file"]:focus,input[type="radio"]:focus,input[type="checkbox"]:focus{outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}output{display:block;padding-top:1.6785714286rem;font-size:1rem;line-height:1.6;color:#484e53}.form-control{display:block;width:100%;height:2.8571428571rem;padding:.6785714286rem 1.25rem;font-size:1rem;line-height:1.6;color:#484e53;background-color:#f0f2f4;background-image:none;border:1px solid transparent;border-radius:4px;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);-webkit-transition:border-color ease-in-out 0.15s,box-shadow ease-in-out 0.15s;-o-transition:border-color ease-in-out 0.15s,box-shadow ease-in-out 0.15s;transition:border-color ease-in-out 0.15s,box-shadow ease-in-out 0.15s}.form-control:focus{border-color:transparent;outline:0;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 8px rgba(0,0,0,0.6);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 8px rgba(0,0,0,0.6)}.form-control::-moz-placeholder{color:#a8b1b7;opacity:1}.form-control:-ms-input-placeholder{color:#a8b1b7}.form-control::-webkit-input-placeholder{color:#a8b1b7}.form-control::-ms-expand{border:0;background-color:transparent}.form-control[disabled],.form-control[readonly],fieldset[disabled] .form-control{background-color:#e4e6eb;opacity:1}.form-control[disabled],fieldset[disabled] .form-control{cursor:not-allowed}textarea.form-control{height:auto}input[type="search"]{-webkit-appearance:none}@media screen and (-webkit-min-device-pixel-ratio: 0){input[type="date"].form-control,input[type="time"].form-control,input[type="datetime-local"].form-control,input[type="month"].form-control{line-height:2.8571428571rem}input[type="date"].input-sm,.input-group-sm>input[type="date"].form-control,.input-group-sm>input[type="date"].input-group-addon,.input-group-sm>.input-group-btn>input[type="date"].btn,.input-group-sm input[type="date"],input[type="time"].input-sm,.input-group-sm>input[type="time"].form-control,.input-group-sm>input[type="time"].input-group-addon,.input-group-sm>.input-group-btn>input[type="time"].btn,.input-group-sm input[type="time"],input[type="datetime-local"].input-sm,.input-group-sm>input[type="datetime-local"].form-control,.input-group-sm>input[type="datetime-local"].input-group-addon,.input-group-sm>.input-group-btn>input[type="datetime-local"].btn,.input-group-sm input[type="datetime-local"],input[type="month"].input-sm,.input-group-sm>input[type="month"].form-control,.input-group-sm>input[type="month"].input-group-addon,.input-group-sm>.input-group-btn>input[type="month"].btn,.input-group-sm input[type="month"]{line-height:2.2857142857rem}input[type="date"].input-lg,.input-group-lg>input[type="date"].form-control,.input-group-lg>input[type="date"].input-group-addon,.input-group-lg>.input-group-btn>input[type="date"].btn,.input-group-lg input[type="date"],input[type="time"].input-lg,.input-group-lg>input[type="time"].form-control,.input-group-lg>input[type="time"].input-group-addon,.input-group-lg>.input-group-btn>input[type="time"].btn,.input-group-lg input[type="time"],input[type="datetime-local"].input-lg,.input-group-lg>input[type="datetime-local"].form-control,.input-group-lg>input[type="datetime-local"].input-group-addon,.input-group-lg>.input-group-btn>input[type="datetime-local"].btn,.input-group-lg input[type="datetime-local"],input[type="month"].input-lg,.input-group-lg>input[type="month"].form-control,.input-group-lg>input[type="month"].input-group-addon,.input-group-lg>.input-group-btn>input[type="month"].btn,.input-group-lg input[type="month"]{line-height:4.2857142857rem}}.form-group{margin-bottom:15px}.radio,.checkbox{position:relative;display:block;margin-top:10px;margin-bottom:10px}.radio label,.checkbox label{min-height:1.6rem;padding-left:20px;margin-bottom:0;font-weight:normal;cursor:pointer}.radio input[type="radio"],.radio-inline input[type="radio"],.checkbox input[type="checkbox"],.checkbox-inline input[type="checkbox"]{position:absolute;margin-left:-20px;margin-top:4px \\9}.radio+.radio,.checkbox+.checkbox{margin-top:-5px}.radio-inline,.checkbox-inline{position:relative;display:inline-block;padding-left:20px;margin-bottom:0;vertical-align:middle;font-weight:normal;cursor:pointer}.radio-inline+.radio-inline,.checkbox-inline+.checkbox-inline{margin-top:0;margin-left:10px}input[type="radio"][disabled],input[type="radio"].disabled,fieldset[disabled] input[type="radio"],input[type="checkbox"][disabled],input[type="checkbox"].disabled,fieldset[disabled] input[type="checkbox"]{cursor:not-allowed}.radio-inline.disabled,fieldset[disabled] .radio-inline,.checkbox-inline.disabled,fieldset[disabled] .checkbox-inline{cursor:not-allowed}.radio.disabled label,fieldset[disabled] .radio label,.checkbox.disabled label,fieldset[disabled] .checkbox label{cursor:not-allowed}.form-control-static,.form-grid .form-row .form-label label{padding-top:1.6785714286rem;padding-bottom:1.6785714286rem;margin-bottom:0;min-height:2.6rem}.form-control-static.input-lg,.input-group-lg>.form-control-static.form-control,.form-grid .form-row .form-label .input-group-lg>label.form-control,.input-group-lg>.form-control-static.input-group-addon,.form-grid .form-row .form-label .input-group-lg>label.input-group-addon,.input-group-lg>.input-group-btn>.form-control-static.btn,.form-grid .form-row .form-label .input-group-lg>.input-group-btn>label.btn,.form-grid .form-row .form-label label.input-lg,.form-control-static.input-sm,.input-group-sm>.form-control-static.form-control,.form-grid .form-row .form-label .input-group-sm>label.form-control,.input-group-sm>.form-control-static.input-group-addon,.form-grid .form-row .form-label .input-group-sm>label.input-group-addon,.input-group-sm>.input-group-btn>.form-control-static.btn,.form-grid .form-row .form-label .input-group-sm>.input-group-btn>label.btn,.form-grid .form-row .form-label label.input-sm{padding-left:0;padding-right:0}.input-sm,.input-group-sm>.form-control,.input-group-sm>.input-group-addon,.input-group-sm>.input-group-btn>.btn{height:2.2857142857rem;padding:.4464285714rem .875rem;font-size:.9285714286rem;line-height:1.6;border-radius:4px}select.input-sm,.input-group-sm>select.form-control,.input-group-sm>select.input-group-addon,.input-group-sm>.input-group-btn>select.btn{height:2.2857142857rem;line-height:2.2857142857rem}textarea.input-sm,.input-group-sm>textarea.form-control,.input-group-sm>textarea.input-group-addon,.input-group-sm>.input-group-btn>textarea.btn,select[multiple].input-sm,.input-group-sm>select[multiple].form-control,.input-group-sm>select[multiple].input-group-addon,.input-group-sm>.input-group-btn>select[multiple].btn{height:auto}.form-group-sm .form-control{height:2.2857142857rem;padding:.4464285714rem .875rem;font-size:.9285714286rem;line-height:1.6;border-radius:4px}.form-group-sm select.form-control{height:2.2857142857rem;line-height:2.2857142857rem}.form-group-sm textarea.form-control,.form-group-sm select[multiple].form-control{height:auto}.form-group-sm .form-control-static,.form-group-sm .form-grid .form-row .form-label label,.form-grid .form-row .form-label .form-group-sm label{height:2.2857142857rem;min-height:2.5285714286rem;padding:1.4464285714rem .875rem;font-size:.9285714286rem;line-height:1.6}.input-lg,.input-group-lg>.form-control,.input-group-lg>.input-group-addon,.input-group-lg>.input-group-btn>.btn{height:4.2857142857rem;padding:1.2857142857rem 1.875rem;font-size:1.1428571429rem;line-height:1.6;border-radius:4px}select.input-lg,.input-group-lg>select.form-control,.input-group-lg>select.input-group-addon,.input-group-lg>.input-group-btn>select.btn{height:4.2857142857rem;line-height:4.2857142857rem}textarea.input-lg,.input-group-lg>textarea.form-control,.input-group-lg>textarea.input-group-addon,.input-group-lg>.input-group-btn>textarea.btn,select[multiple].input-lg,.input-group-lg>select[multiple].form-control,.input-group-lg>select[multiple].input-group-addon,.input-group-lg>.input-group-btn>select[multiple].btn{height:auto}.form-group-lg .form-control{height:4.2857142857rem;padding:1.2857142857rem 1.875rem;font-size:1.1428571429rem;line-height:1.6;border-radius:4px}.form-group-lg select.form-control{height:4.2857142857rem;line-height:4.2857142857rem}.form-group-lg textarea.form-control,.form-group-lg select[multiple].form-control{height:auto}.form-group-lg .form-control-static,.form-group-lg .form-grid .form-row .form-label label,.form-grid .form-row .form-label .form-group-lg label{height:4.2857142857rem;min-height:2.7428571429rem;padding:2.2857142857rem 1.875rem;font-size:1.1428571429rem;line-height:1.6}.has-feedback{position:relative}.has-feedback .form-control{padding-right:3.5714285714rem}.form-control-feedback{position:absolute;top:0;right:0;z-index:2;display:block;width:2.8571428571rem;height:2.8571428571rem;line-height:2.8571428571rem;text-align:center;pointer-events:none}.input-lg+.form-control-feedback,.input-group-lg>.form-control+.form-control-feedback,.input-group-lg>.input-group-addon+.form-control-feedback,.input-group-lg>.input-group-btn>.btn+.form-control-feedback,.input-group-lg+.form-control-feedback,.form-group-lg .form-control+.form-control-feedback{width:4.2857142857rem;height:4.2857142857rem;line-height:4.2857142857rem}.input-sm+.form-control-feedback,.input-group-sm>.form-control+.form-control-feedback,.input-group-sm>.input-group-addon+.form-control-feedback,.input-group-sm>.input-group-btn>.btn+.form-control-feedback,.input-group-sm+.form-control-feedback,.form-group-sm .form-control+.form-control-feedback{width:2.2857142857rem;height:2.2857142857rem;line-height:2.2857142857rem}.has-success .help-block,.has-success .control-label,.has-success .radio,.has-success .checkbox,.has-success .radio-inline,.has-success .checkbox-inline,.has-success.radio label,.has-success.checkbox label,.has-success.radio-inline label,.has-success.checkbox-inline label{color:#48a71c}.has-success .form-control{border-color:#48a71c;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075)}.has-success .form-control:focus{border-color:#357b15;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #79e049;box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #79e049}.has-success .input-group-addon{color:#48a71c;border-color:#48a71c;background-color:#f3faec}.has-success .form-control-feedback{color:#48a71c}.has-warning .help-block,.has-warning .control-label,.has-warning .radio,.has-warning .checkbox,.has-warning .radio-inline,.has-warning .checkbox-inline,.has-warning.radio label,.has-warning.checkbox label,.has-warning.radio-inline label,.has-warning.checkbox-inline label{color:#ff6316}.has-warning .form-control{border-color:#ff6316;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075)}.has-warning .form-control:focus{border-color:#e24b00;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #ffa77c;box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #ffa77c}.has-warning .input-group-addon{color:#ff6316;border-color:#ff6316;background-color:#fff6ec}.has-warning .form-control-feedback{color:#ff6316}.has-error .help-block,.has-error .control-label,.has-error .radio,.has-error .checkbox,.has-error .radio-inline,.has-error .checkbox-inline,.has-error.radio label,.has-error.checkbox label,.has-error.radio-inline label,.has-error.checkbox-inline label{color:#ff694b}.has-error .form-control{border-color:#ff694b;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075)}.has-error .form-control:focus{border-color:#ff3f18;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #ffbeb1;box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #ffbeb1}.has-error .input-group-addon{color:#ff694b;border-color:#ff694b;background-color:#fff5f4}.has-error .form-control-feedback{color:#ff694b}.has-feedback label ~ .form-control-feedback{top:6.6rem}.has-feedback label.sr-only ~ .form-control-feedback{top:0}.help-block{display:block;margin-top:5px;margin-bottom:10px;color:#9ea6ab}@media (min-width: 540px){.form-inline .form-group{display:inline-block;margin-bottom:0;vertical-align:middle}.form-inline .form-control{display:inline-block;width:auto;vertical-align:middle}.form-inline .form-control-static,.form-inline .form-grid .form-row .form-label label,.form-grid .form-row .form-label .form-inline label{display:inline-block}.form-inline .input-group{display:inline-table;vertical-align:middle}.form-inline .input-group .input-group-addon,.form-inline .input-group .input-group-btn,.form-inline .input-group .form-control{width:auto}.form-inline .input-group>.form-control{width:100%}.form-inline .control-label{margin-bottom:0;vertical-align:middle}.form-inline .radio,.form-inline .checkbox{display:inline-block;margin-top:0;margin-bottom:0;vertical-align:middle}.form-inline .radio label,.form-inline .checkbox label{padding-left:0}.form-inline .radio input[type="radio"],.form-inline .checkbox input[type="checkbox"]{position:relative;margin-left:0}.form-inline .has-feedback .form-control-feedback{top:0}}.form-horizontal .radio,.form-horizontal .checkbox,.form-horizontal .radio-inline,.form-horizontal .checkbox-inline{margin-top:0;margin-bottom:0;padding-top:1.6785714286rem}.form-horizontal .radio,.form-horizontal .checkbox{min-height:3.2785714286rem}.form-horizontal .form-group{margin-left:-30px;margin-right:-30px}.form-horizontal .form-group:before,.form-horizontal .form-group:after{content:" ";display:table}.form-horizontal .form-group:after{clear:both}@media (min-width: 540px){.form-horizontal .control-label{text-align:right;margin-bottom:0;padding-top:1.6785714286rem}}.form-horizontal .has-feedback .form-control-feedback{right:30px}@media (min-width: 540px){.form-horizontal .form-group-lg .control-label{padding-top:2.2857142857rem;font-size:1.1428571429rem}}@media (min-width: 540px){.form-horizontal .form-group-sm .control-label{padding-top:1.4464285714rem;font-size:.9285714286rem}}.btn{display:inline-block;margin-bottom:0;font-weight:bold;text-align:center;vertical-align:middle;touch-action:manipulation;cursor:pointer;background-image:none;border:1px solid transparent;white-space:nowrap;padding:.6785714286rem 1.25rem;font-size:1rem;line-height:1.6;border-radius:4px;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.btn:focus,.btn.focus,.btn:active:focus,.btn:active.focus,.btn.active:focus,.btn.active.focus{outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}.btn:hover,.btn:focus,.btn.focus{color:#484e53;text-decoration:none}.btn:active,.btn.active{outline:0;background-image:none;-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,0.125);box-shadow:inset 0 3px 5px rgba(0,0,0,0.125)}.btn.disabled,.btn[disabled],fieldset[disabled] .btn{cursor:not-allowed;opacity:.65;filter:alpha(opacity=65);-webkit-box-shadow:none;box-shadow:none}a.btn.disabled,fieldset[disabled] a.btn{pointer-events:none}.btn-default{color:#484e53;background-color:#f0f2f4;border-color:transparent}.btn-default:focus,.btn-default.focus{color:#484e53;background-color:#e9ebef}.btn-default:hover{color:#484e53;background-color:#e9ebef}.btn-default:active,.btn-default.active,.open>.btn-default.dropdown-toggle{color:#484e53;background-color:#e9ebef}.btn-default:active:hover,.btn-default:active:focus,.btn-default:active.focus,.btn-default.active:hover,.btn-default.active:focus,.btn-default.active.focus,.open>.btn-default.dropdown-toggle:hover,.open>.btn-default.dropdown-toggle:focus,.open>.btn-default.dropdown-toggle.focus{color:#484e53;background-color:#e9ebef}.btn-default:active,.btn-default.active,.open>.btn-default.dropdown-toggle{background-image:none}.btn-default.disabled:hover,.btn-default.disabled:focus,.btn-default.disabled.focus,.btn-default[disabled]:hover,.btn-default[disabled]:focus,.btn-default[disabled].focus,fieldset[disabled] .btn-default:hover,fieldset[disabled] .btn-default:focus,fieldset[disabled] .btn-default.focus{background-color:#f0f2f4;border-color:transparent}.btn-default .badge{color:#f0f2f4;background-color:#484e53}.btn-primary{color:#fff;background-color:#0bb;border-color:transparent}.btn-primary:focus,.btn-primary.focus{color:#fff;background-color:#009595}.btn-primary:hover{color:#fff;background-color:#009595}.btn-primary:active,.btn-primary.active,.open>.btn-primary.dropdown-toggle{color:#fff;background-color:#009595}.btn-primary:active:hover,.btn-primary:active:focus,.btn-primary:active.focus,.btn-primary.active:hover,.btn-primary.active:focus,.btn-primary.active.focus,.open>.btn-primary.dropdown-toggle:hover,.open>.btn-primary.dropdown-toggle:focus,.open>.btn-primary.dropdown-toggle.focus{color:#fff;background-color:#009595}.btn-primary:active,.btn-primary.active,.open>.btn-primary.dropdown-toggle{background-image:none}.btn-primary.disabled:hover,.btn-primary.disabled:focus,.btn-primary.disabled.focus,.btn-primary[disabled]:hover,.btn-primary[disabled]:focus,.btn-primary[disabled].focus,fieldset[disabled] .btn-primary:hover,fieldset[disabled] .btn-primary:focus,fieldset[disabled] .btn-primary.focus{background-color:#0bb;border-color:transparent}.btn-primary .badge{color:#0bb;background-color:#fff}.btn-success{color:#fff;background-color:#7ec631;border-color:transparent}.btn-success:focus,.btn-success.focus{color:#fff;background-color:#48a71c}.btn-success:hover{color:#fff;background-color:#48a71c}.btn-success:active,.btn-success.active,.open>.btn-success.dropdown-toggle{color:#fff;background-color:#48a71c}.btn-success:active:hover,.btn-success:active:focus,.btn-success:active.focus,.btn-success.active:hover,.btn-success.active:focus,.btn-success.active.focus,.open>.btn-success.dropdown-toggle:hover,.open>.btn-success.dropdown-toggle:focus,.open>.btn-success.dropdown-toggle.focus{color:#fff;background-color:#48a71c}.btn-success:active,.btn-success.active,.open>.btn-success.dropdown-toggle{background-image:none}.btn-success.disabled:hover,.btn-success.disabled:focus,.btn-success.disabled.focus,.btn-success[disabled]:hover,.btn-success[disabled]:focus,.btn-success[disabled].focus,fieldset[disabled] .btn-success:hover,fieldset[disabled] .btn-success:focus,fieldset[disabled] .btn-success.focus{background-color:#7ec631;border-color:transparent}.btn-success .badge{color:#7ec631;background-color:#fff}.btn-info{color:#fff;background-color:#0bb;border-color:transparent}.btn-info:focus,.btn-info.focus{color:#fff;background-color:#009595}.btn-info:hover{color:#fff;background-color:#009595}.btn-info:active,.btn-info.active,.open>.btn-info.dropdown-toggle{color:#fff;background-color:#009595}.btn-info:active:hover,.btn-info:active:focus,.btn-info:active.focus,.btn-info.active:hover,.btn-info.active:focus,.btn-info.active.focus,.open>.btn-info.dropdown-toggle:hover,.open>.btn-info.dropdown-toggle:focus,.open>.btn-info.dropdown-toggle.focus{color:#fff;background-color:#009595}.btn-info:active,.btn-info.active,.open>.btn-info.dropdown-toggle{background-image:none}.btn-info.disabled:hover,.btn-info.disabled:focus,.btn-info.disabled.focus,.btn-info[disabled]:hover,.btn-info[disabled]:focus,.btn-info[disabled].focus,fieldset[disabled] .btn-info:hover,fieldset[disabled] .btn-info:focus,fieldset[disabled] .btn-info.focus{background-color:#0bb;border-color:transparent}.btn-info .badge{color:#0bb;background-color:#fff}.btn-warning{color:#fff;background-color:#ff9b26;border-color:transparent}.btn-warning:focus,.btn-warning.focus{color:#fff;background-color:#ff6316}.btn-warning:hover{color:#fff;background-color:#ff6316}.btn-warning:active,.btn-warning.active,.open>.btn-warning.dropdown-toggle{color:#fff;background-color:#ff6316}.btn-warning:active:hover,.btn-warning:active:focus,.btn-warning:active.focus,.btn-warning.active:hover,.btn-warning.active:focus,.btn-warning.active.focus,.open>.btn-warning.dropdown-toggle:hover,.open>.btn-warning.dropdown-toggle:focus,.open>.btn-warning.dropdown-toggle.focus{color:#fff;background-color:#ff6316}.btn-warning:active,.btn-warning.active,.open>.btn-warning.dropdown-toggle{background-image:none}.btn-warning.disabled:hover,.btn-warning.disabled:focus,.btn-warning.disabled.focus,.btn-warning[disabled]:hover,.btn-warning[disabled]:focus,.btn-warning[disabled].focus,fieldset[disabled] .btn-warning:hover,fieldset[disabled] .btn-warning:focus,fieldset[disabled] .btn-warning.focus{background-color:#ff9b26;border-color:transparent}.btn-warning .badge{color:#ff9b26;background-color:#fff}.btn-danger{color:#fff;background-color:#ff694b;border-color:transparent}.btn-danger:focus,.btn-danger.focus{color:#fff;background-color:#ff3c2b}.btn-danger:hover{color:#fff;background-color:#ff3c2b}.btn-danger:active,.btn-danger.active,.open>.btn-danger.dropdown-toggle{color:#fff;background-color:#ff3c2b}.btn-danger:active:hover,.btn-danger:active:focus,.btn-danger:active.focus,.btn-danger.active:hover,.btn-danger.active:focus,.btn-danger.active.focus,.open>.btn-danger.dropdown-toggle:hover,.open>.btn-danger.dropdown-toggle:focus,.open>.btn-danger.dropdown-toggle.focus{color:#fff;background-color:#ff3c2b}.btn-danger:active,.btn-danger.active,.open>.btn-danger.dropdown-toggle{background-image:none}.btn-danger.disabled:hover,.btn-danger.disabled:focus,.btn-danger.disabled.focus,.btn-danger[disabled]:hover,.btn-danger[disabled]:focus,.btn-danger[disabled].focus,fieldset[disabled] .btn-danger:hover,fieldset[disabled] .btn-danger:focus,fieldset[disabled] .btn-danger.focus{background-color:#ff694b;border-color:transparent}.btn-danger .badge{color:#ff694b;background-color:#fff}.btn-link{color:#0bb;font-weight:normal;border-radius:0}.btn-link,.btn-link:active,.btn-link.active,.btn-link[disabled],fieldset[disabled] .btn-link{background-color:transparent;-webkit-box-shadow:none;box-shadow:none}.btn-link,.btn-link:hover,.btn-link:focus,.btn-link:active{border-color:transparent}.btn-link:hover,.btn-link:focus{color:#009595;text-decoration:none;background-color:transparent}.btn-link[disabled]:hover,.btn-link[disabled]:focus,fieldset[disabled] .btn-link:hover,fieldset[disabled] .btn-link:focus{color:#8b969e;text-decoration:none}.btn-lg,.btn-group-lg>.btn{padding:1.2857142857rem 1.875rem;font-size:1.1428571429rem;line-height:1.6;border-radius:4px}.btn-sm,.btn-group-sm>.btn{padding:.4464285714rem .875rem;font-size:.9285714286rem;line-height:1.6;border-radius:4px}.btn-xs,.btn-group-xs>.btn{padding:1px 5px;font-size:.9285714286rem;line-height:1.6;border-radius:4px}.btn-block{display:block;width:100%}.btn-block+.btn-block{margin-top:5px}input[type="submit"].btn-block,input[type="reset"].btn-block,input[type="button"].btn-block{width:100%}.fade{opacity:0;-webkit-transition:opacity 0.15s linear;-o-transition:opacity 0.15s linear;transition:opacity 0.15s linear}.fade.in{opacity:1}.collapse{display:none}.collapse.in{display:block}tr.collapse.in{display:table-row}tbody.collapse.in{display:table-row-group}.collapsing{position:relative;height:0;overflow:hidden;-webkit-transition-property:height,visibility;transition-property:height,visibility;-webkit-transition-duration:0.35s;transition-duration:0.35s;-webkit-transition-timing-function:ease;transition-timing-function:ease}.caret{display:inline-block;width:0;height:0;margin-left:2px;vertical-align:middle;border-top:4px dashed;border-top:4px solid \\9 ;border-right:4px solid transparent;border-left:4px solid transparent}.dropup,.dropdown{position:relative}.dropdown-toggle:focus{outline:0}.dropdown-menu{position:absolute;top:100%;left:0;z-index:1000;display:none;float:left;min-width:160px;padding:5px 0;margin:2px 0 0;list-style:none;font-size:1rem;text-align:left;background-color:#fff;border:1px solid transparent;border:1px solid transparent;border-radius:4px;-webkit-box-shadow:0 6px 12px rgba(0,0,0,0.175);box-shadow:0 6px 12px rgba(0,0,0,0.175);background-clip:padding-box}.dropdown-menu.pull-right{right:0;left:auto}.dropdown-menu .divider{height:1px;margin:-.2rem 0;overflow:hidden;background-color:rgba(0,30,60,0.075)}.dropdown-menu>li>a{display:block;padding:3px 20px;clear:both;font-weight:normal;line-height:1.6;color:#5e666c;white-space:nowrap}.dropdown-menu>li>a:hover,.dropdown-menu>li>a:focus{text-decoration:none;color:#313539;background-color:#f9fafb}.dropdown-menu>.active>a,.dropdown-menu>.active>a:hover,.dropdown-menu>.active>a:focus{color:#fff;text-decoration:none;outline:0;background-color:#0bb}.dropdown-menu>.disabled>a,.dropdown-menu>.disabled>a:hover,.dropdown-menu>.disabled>a:focus{color:#8b969e}.dropdown-menu>.disabled>a:hover,.dropdown-menu>.disabled>a:focus{text-decoration:none;background-color:transparent;background-image:none;filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);cursor:not-allowed}.open>.dropdown-menu{display:block}.open>a{outline:0}.dropdown-menu-right{left:auto;right:0}.dropdown-menu-left{left:0;right:auto}.dropdown-header{display:block;padding:3px 20px;font-size:.9285714286rem;line-height:1.6;color:#8b969e;white-space:nowrap}.dropdown-backdrop{position:fixed;left:0;right:0;bottom:0;top:0;z-index:990}.pull-right>.dropdown-menu{right:0;left:auto}.dropup .caret,.navbar-fixed-bottom .dropdown .caret{border-top:0;border-bottom:4px dashed;border-bottom:4px solid \\9 ;content:""}.dropup .dropdown-menu,.navbar-fixed-bottom .dropdown .dropdown-menu{top:auto;bottom:100%;margin-bottom:2px}@media (min-width: 960px){.navbar-right .dropdown-menu{right:0;left:auto}.navbar-right .dropdown-menu-left{left:0;right:auto}}.btn-group,.btn-group-vertical{position:relative;display:inline-block;vertical-align:middle}.btn-group>.btn,.btn-group-vertical>.btn{position:relative;float:left}.btn-group>.btn:hover,.btn-group>.btn:focus,.btn-group>.btn:active,.btn-group>.btn.active,.btn-group-vertical>.btn:hover,.btn-group-vertical>.btn:focus,.btn-group-vertical>.btn:active,.btn-group-vertical>.btn.active{z-index:2}.btn-group .btn+.btn,.btn-group .btn+.btn-group,.btn-group .btn-group+.btn,.btn-group .btn-group+.btn-group{margin-left:-1px}.btn-toolbar{margin-left:-5px}.btn-toolbar:before,.btn-toolbar:after{content:" ";display:table}.btn-toolbar:after{clear:both}.btn-toolbar .btn,.btn-toolbar .btn-group,.btn-toolbar .input-group{float:left}.btn-toolbar>.btn,.btn-toolbar>.btn-group,.btn-toolbar>.input-group{margin-left:5px}.btn-group>.btn:not(:first-child):not(:last-child):not(.dropdown-toggle){border-radius:0}.btn-group>.btn:first-child{margin-left:0}.btn-group>.btn:first-child:not(:last-child):not(.dropdown-toggle){border-bottom-right-radius:0;border-top-right-radius:0}.btn-group>.btn:last-child:not(:first-child),.btn-group>.dropdown-toggle:not(:first-child){border-bottom-left-radius:0;border-top-left-radius:0}.btn-group>.btn-group{float:left}.btn-group>.btn-group:not(:first-child):not(:last-child)>.btn{border-radius:0}.btn-group>.btn-group:first-child:not(:last-child)>.btn:last-child,.btn-group>.btn-group:first-child:not(:last-child)>.dropdown-toggle{border-bottom-right-radius:0;border-top-right-radius:0}.btn-group>.btn-group:last-child:not(:first-child)>.btn:first-child{border-bottom-left-radius:0;border-top-left-radius:0}.btn-group .dropdown-toggle:active,.btn-group.open .dropdown-toggle{outline:0}.btn-group>.btn+.dropdown-toggle{padding-left:8px;padding-right:8px}.btn-group>.btn-lg+.dropdown-toggle,.btn-group-lg.btn-group>.btn+.dropdown-toggle{padding-left:12px;padding-right:12px}.btn-group.open .dropdown-toggle.btn-link{-webkit-box-shadow:none;box-shadow:none}.btn .caret{margin-left:0}.btn-lg .caret,.btn-group-lg>.btn .caret{border-width:5px 5px 0;border-bottom-width:0}.dropup .btn-lg .caret,.dropup .btn-group-lg>.btn .caret{border-width:0 5px 5px}.btn-group-vertical>.btn,.btn-group-vertical>.btn-group,.btn-group-vertical>.btn-group>.btn{display:block;float:none;width:100%;max-width:100%}.btn-group-vertical>.btn-group:before,.btn-group-vertical>.btn-group:after{content:" ";display:table}.btn-group-vertical>.btn-group:after{clear:both}.btn-group-vertical>.btn-group>.btn{float:none}.btn-group-vertical>.btn+.btn,.btn-group-vertical>.btn+.btn-group,.btn-group-vertical>.btn-group+.btn,.btn-group-vertical>.btn-group+.btn-group{margin-top:-1px;margin-left:0}.btn-group-vertical>.btn:not(:first-child):not(:last-child){border-radius:0}.btn-group-vertical>.btn:first-child:not(:last-child){border-top-right-radius:4px;border-top-left-radius:4px;border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn:last-child:not(:first-child){border-top-right-radius:0;border-top-left-radius:0;border-bottom-right-radius:4px;border-bottom-left-radius:4px}.btn-group-vertical>.btn-group:not(:first-child):not(:last-child)>.btn{border-radius:0}.btn-group-vertical>.btn-group:first-child:not(:last-child)>.btn:last-child,.btn-group-vertical>.btn-group:first-child:not(:last-child)>.dropdown-toggle{border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn-group:last-child:not(:first-child)>.btn:first-child{border-top-right-radius:0;border-top-left-radius:0}.btn-group-justified{display:table;width:100%;table-layout:fixed;border-collapse:separate}.btn-group-justified>.btn,.btn-group-justified>.btn-group{float:none;display:table-cell;width:1%}.btn-group-justified>.btn-group .btn{width:100%}.btn-group-justified>.btn-group .dropdown-menu{left:auto}[data-toggle="buttons"]>.btn input[type="radio"],[data-toggle="buttons"]>.btn input[type="checkbox"],[data-toggle="buttons"]>.btn-group>.btn input[type="radio"],[data-toggle="buttons"]>.btn-group>.btn input[type="checkbox"]{position:absolute;clip:rect(0, 0, 0, 0);pointer-events:none}.input-group{position:relative;display:table;border-collapse:separate}.input-group[class*="col-"]{float:none;padding-left:0;padding-right:0}.input-group .form-control{position:relative;z-index:2;float:left;width:100%;margin-bottom:0}.input-group .form-control:focus{z-index:3}.input-group-addon,.input-group-btn,.input-group .form-control{display:table-cell}.input-group-addon:not(:first-child):not(:last-child),.input-group-btn:not(:first-child):not(:last-child),.input-group .form-control:not(:first-child):not(:last-child){border-radius:0}.input-group-addon,.input-group-btn{width:1%;white-space:nowrap;vertical-align:middle}.input-group-addon{padding:.6785714286rem 1.25rem;font-size:1rem;font-weight:normal;line-height:1;color:#484e53;text-align:center;background-color:#f0f2f4;border:1px solid transparent;border-radius:4px}.input-group-addon.input-sm,.input-group-sm>.input-group-addon,.input-group-sm>.input-group-btn>.input-group-addon.btn{padding:.4464285714rem .875rem;font-size:.9285714286rem;border-radius:4px}.input-group-addon.input-lg,.input-group-lg>.input-group-addon,.input-group-lg>.input-group-btn>.input-group-addon.btn{padding:1.2857142857rem 1.875rem;font-size:1.1428571429rem;border-radius:4px}.input-group-addon input[type="radio"],.input-group-addon input[type="checkbox"]{margin-top:0}.input-group .form-control:first-child,.input-group-addon:first-child,.input-group-btn:first-child>.btn,.input-group-btn:first-child>.btn-group>.btn,.input-group-btn:first-child>.dropdown-toggle,.input-group-btn:last-child>.btn:not(:last-child):not(.dropdown-toggle),.input-group-btn:last-child>.btn-group:not(:last-child)>.btn{border-bottom-right-radius:0;border-top-right-radius:0}.input-group-addon:first-child{border-right:0}.input-group .form-control:last-child,.input-group-addon:last-child,.input-group-btn:last-child>.btn,.input-group-btn:last-child>.btn-group>.btn,.input-group-btn:last-child>.dropdown-toggle,.input-group-btn:first-child>.btn:not(:first-child),.input-group-btn:first-child>.btn-group:not(:first-child)>.btn{border-bottom-left-radius:0;border-top-left-radius:0}.input-group-addon:last-child{border-left:0}.input-group-btn{position:relative;font-size:0;white-space:nowrap}.input-group-btn>.btn{position:relative}.input-group-btn>.btn+.btn{margin-left:-1px}.input-group-btn>.btn:hover,.input-group-btn>.btn:focus,.input-group-btn>.btn:active{z-index:2}.input-group-btn:first-child>.btn,.input-group-btn:first-child>.btn-group{margin-right:-1px}.input-group-btn:last-child>.btn,.input-group-btn:last-child>.btn-group{z-index:2;margin-left:-1px}.nav{margin-bottom:0;padding-left:0;list-style:none}.nav:before,.nav:after{content:" ";display:table}.nav:after{clear:both}.nav>li{position:relative;display:block}.nav>li>a{position:relative;display:block;padding:.6785714286rem .875rem}.nav>li>a:hover,.nav>li>a:focus{text-decoration:none;background-color:#f9fafb}.nav>li.disabled>a{color:#8b969e}.nav>li.disabled>a:hover,.nav>li.disabled>a:focus{color:#8b969e;text-decoration:none;background-color:transparent;cursor:not-allowed}.nav .open>a,.nav .open>a:hover,.nav .open>a:focus{background-color:#f9fafb;border-color:#0bb}.nav .nav-divider{height:1px;margin:-.2rem 0;overflow:hidden;background-color:#e5e5e5}.nav>li>a>img{max-width:none}.nav-tabs{border-bottom:1px solid rgba(0,30,60,0.075)}.nav-tabs>li{float:left;margin-bottom:-1px}.nav-tabs>li>a{margin-right:2px;line-height:1.6;border:1px solid transparent;border-radius:4px 4px 0 0}.nav-tabs>li>a:hover{border-color:#ff694b #ff694b rgba(0,30,60,0.075)}.nav-tabs>li.active>a,.nav-tabs>li.active>a:hover,.nav-tabs>li.active>a:focus{color:inherit;background-color:transparent;border:1px solid #ff694b;border-bottom-color:transparent;cursor:default}.nav-pills>li{float:left}.nav-pills>li>a{border-radius:1000px}.nav-pills>li+li{margin-left:2px}.nav-pills>li.active>a,.nav-pills>li.active>a:hover,.nav-pills>li.active>a:focus{color:#fff;background-color:#0bb}.nav-stacked>li{float:none}.nav-stacked>li+li{margin-top:2px;margin-left:0}.nav-justified,.nav-tabs.nav-justified{width:100%}.nav-justified>li,.nav-tabs.nav-justified>li{float:none}.nav-justified>li>a,.nav-tabs.nav-justified>li>a{text-align:center;margin-bottom:5px}.nav-justified>.dropdown .dropdown-menu{top:auto;left:auto}@media (min-width: 540px){.nav-justified>li,.nav-tabs.nav-justified>li{display:table-cell;width:1%}.nav-justified>li>a,.nav-tabs.nav-justified>li>a{margin-bottom:0}}.nav-tabs-justified,.nav-tabs.nav-justified{border-bottom:0}.nav-tabs-justified>li>a,.nav-tabs.nav-justified>li>a{margin-right:0;border-radius:4px}.nav-tabs-justified>.active>a,.nav-tabs.nav-justified>.active>a,.nav-tabs-justified>.active>a:hover,.nav-tabs.nav-justified>.active>a:hover,.nav-tabs-justified>.active>a:focus,.nav-tabs.nav-justified>.active>a:focus{border:1px solid #ddd}@media (min-width: 540px){.nav-tabs-justified>li>a,.nav-tabs.nav-justified>li>a{border-bottom:1px solid #ddd;border-radius:4px 4px 0 0}.nav-tabs-justified>.active>a,.nav-tabs.nav-justified>.active>a,.nav-tabs-justified>.active>a:hover,.nav-tabs.nav-justified>.active>a:hover,.nav-tabs-justified>.active>a:focus,.nav-tabs.nav-justified>.active>a:focus{border-bottom-color:#f9fafb}}.tab-content>.tab-pane{display:none}.tab-content>.active{display:block}.nav-tabs .dropdown-menu{margin-top:-1px;border-top-right-radius:0;border-top-left-radius:0}.breadcrumb{padding:1.2857142857rem 1.875rem;margin-bottom:1.6rem;list-style:none;background-color:#f9fafb;border-radius:4px}.breadcrumb>li{display:inline-block}.breadcrumb>li+li:before{content:"/\\A0";padding:0 5px;color:#8b969e}.breadcrumb>.active{color:#313539}.pagination{display:inline-block;padding-left:0;margin:1.6rem 0;border-radius:4px}.pagination>li{display:inline}.pagination>li>a,.pagination>li>span{position:relative;float:left;padding:.6785714286rem 1.25rem;line-height:1.6;text-decoration:none;color:#0bb;background-color:#fff;border:1px solid #ddd;margin-left:-1px}.pagination>li:first-child>a,.pagination>li:first-child>span{margin-left:0;border-bottom-left-radius:4px;border-top-left-radius:4px}.pagination>li:last-child>a,.pagination>li:last-child>span{border-bottom-right-radius:4px;border-top-right-radius:4px}.pagination>li>a:hover,.pagination>li>a:focus,.pagination>li>span:hover,.pagination>li>span:focus{z-index:2;color:#009595;background-color:#f7f7f8;border-color:#ddd}.pagination>.active>a,.pagination>.active>a:hover,.pagination>.active>a:focus,.pagination>.active>span,.pagination>.active>span:hover,.pagination>.active>span:focus{z-index:3;color:#fff;background-color:#0bb;border-color:#0bb;cursor:default}.pagination>.disabled>span,.pagination>.disabled>span:hover,.pagination>.disabled>span:focus,.pagination>.disabled>a,.pagination>.disabled>a:hover,.pagination>.disabled>a:focus{color:#bec5c9;background-color:#fff;border-color:#ddd;cursor:not-allowed}.pagination-lg>li>a,.pagination-lg>li>span{padding:1.2857142857rem 1.875rem;font-size:1.1428571429rem;line-height:1.6}.pagination-lg>li:first-child>a,.pagination-lg>li:first-child>span{border-bottom-left-radius:4px;border-top-left-radius:4px}.pagination-lg>li:last-child>a,.pagination-lg>li:last-child>span{border-bottom-right-radius:4px;border-top-right-radius:4px}.pagination-sm>li>a,.pagination-sm>li>span{padding:.4464285714rem .875rem;font-size:.9285714286rem;line-height:1.6}.pagination-sm>li:first-child>a,.pagination-sm>li:first-child>span{border-bottom-left-radius:4px;border-top-left-radius:4px}.pagination-sm>li:last-child>a,.pagination-sm>li:last-child>span{border-bottom-right-radius:4px;border-top-right-radius:4px}.pager{padding-left:0;margin:1.6rem 0;list-style:none;text-align:center}.pager:before,.pager:after{content:" ";display:table}.pager:after{clear:both}.pager li{display:inline}.pager li>a,.pager li>span{display:inline-block;padding:5px 14px;background-color:#fff;border:1px solid #ddd;border-radius:15px}.pager li>a:hover,.pager li>a:focus{text-decoration:none;background-color:#f7f7f8}.pager .next>a,.pager .next>span{float:right}.pager .previous>a,.pager .previous>span{float:left}.pager .disabled>a,.pager .disabled>a:hover,.pager .disabled>a:focus,.pager .disabled>span{color:#bec5c9;background-color:#fff;cursor:not-allowed}.label{display:inline;padding:.2em .6em .3em;font-size:75%;font-weight:bold;line-height:1;color:#8b969e;text-align:center;white-space:nowrap;vertical-align:baseline;border-radius:.25em}.label:empty{display:none}.btn .label{position:relative;top:-1px}a.label:hover,a.label:focus{color:#fff;text-decoration:none;cursor:pointer}.label-default{background-color:transparent}.label-default[href]:hover,.label-default[href]:focus{background-color:transparent}.label-primary{background-color:transparent}.label-primary[href]:hover,.label-primary[href]:focus{background-color:transparent}.label-success{background-color:transparent}.label-success[href]:hover,.label-success[href]:focus{background-color:transparent}.label-info{background-color:transparent}.label-info[href]:hover,.label-info[href]:focus{background-color:transparent}.label-warning{background-color:transparent}.label-warning[href]:hover,.label-warning[href]:focus{background-color:transparent}.label-danger{background-color:transparent}.label-danger[href]:hover,.label-danger[href]:focus{background-color:transparent}.badge{display:inline-block;min-width:10px;padding:3px 7px;font-size:.9285714286rem;font-weight:bold;color:#8b969e;line-height:1;vertical-align:middle;white-space:nowrap;text-align:center;background-color:#f0f2f4;border-radius:100px}.badge:empty{display:none}.btn .badge{position:relative;top:-1px}.btn-xs .badge,.btn-group-xs>.btn .badge,.btn-group-xs>.btn .badge{top:0;padding:1px 5px}.list-group-item.active>.badge,.nav-pills>.active>a>.badge{color:#0bb;background-color:#fff}.list-group-item>.badge{float:right}.list-group-item>.badge+.badge{margin-right:5px}.nav-pills>li>a>.badge{margin-left:3px}a.badge:hover,a.badge:focus{color:#fff;text-decoration:none;cursor:pointer}.thumbnail{display:block;padding:0;margin-bottom:1.6rem;line-height:1.6;background-color:#fff;border:1px solid transparent;border-radius:4px;-webkit-transition:border 0.2s ease-in-out;-o-transition:border 0.2s ease-in-out;transition:border 0.2s ease-in-out}.thumbnail>img,.thumbnail a>img{display:block;max-width:100%;height:auto;margin-left:auto;margin-right:auto}.thumbnail .caption{padding:20px 30px;color:#8b969e}a.thumbnail:hover,a.thumbnail:focus,a.thumbnail.active{border-color:#0bb}.alert{padding:1.2857142857rem 1.875rem;margin-bottom:1.6rem;border:1px solid transparent;border-radius:4px}.alert h4{margin-top:0;color:inherit}.alert .alert-link{font-weight:inherit}.alert>p,.alert>ul{margin-bottom:0}.alert>p+p{margin-top:5px}.alert-dismissable,.alert-dismissible{padding-right:1.2857142857rem 1.875rem20}.alert-dismissable .close,.alert-dismissible .close{position:relative;top:-2px;right:-21px;color:inherit}.alert-success{background-color:#f3faec;border-color:transparent;color:#48a71c}.alert-success hr{border-top-color:transparent}.alert-success .alert-link{color:#357b15}.alert-info{background-color:#edfafa;border-color:transparent;color:#0aa}.alert-info hr{border-top-color:transparent}.alert-info .alert-link{color:#077}.alert-warning{background-color:#fff6ec;border-color:transparent;color:#ff6316}.alert-warning hr{border-top-color:transparent}.alert-warning .alert-link{color:#e24b00}.alert-danger{background-color:#fff5f4;border-color:transparent;color:#ff694b}.alert-danger hr{border-top-color:transparent}.alert-danger .alert-link{color:#ff3f18}@-webkit-keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}@keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}.progress{overflow:hidden;height:1.6rem;margin-bottom:1.6rem;background-color:#f0f2f4;border-radius:100px;-webkit-box-shadow:inset 0 1px 2px rgba(0,0,0,0.1);box-shadow:inset 0 1px 2px rgba(0,0,0,0.1)}.progress-bar{float:left;width:0%;height:100%;font-size:.9285714286rem;line-height:1.6rem;color:#8b969e;text-align:center;background-color:#0bb;-webkit-box-shadow:inset 0 -1px 0 rgba(0,0,0,0.15);box-shadow:inset 0 -1px 0 rgba(0,0,0,0.15);-webkit-transition:width 0.6s ease;-o-transition:width 0.6s ease;transition:width 0.6s ease}.progress-striped .progress-bar,.progress-bar-striped{background-image:-webkit-linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent);background-image:-o-linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent);background-image:linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent);background-size:40px 40px}.progress.active .progress-bar,.progress-bar.active{-webkit-animation:progress-bar-stripes 2s linear infinite;-o-animation:progress-bar-stripes 2s linear infinite;animation:progress-bar-stripes 2s linear infinite}.progress-bar-success{background-color:#7ec631}.progress-striped .progress-bar-success{background-image:-webkit-linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent);background-image:-o-linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent);background-image:linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent)}.progress-bar-info{background-color:#0bb}.progress-striped .progress-bar-info{background-image:-webkit-linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent);background-image:-o-linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent);background-image:linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent)}.progress-bar-warning{background-color:#ff9b26}.progress-striped .progress-bar-warning{background-image:-webkit-linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent);background-image:-o-linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent);background-image:linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent)}.progress-bar-danger{background-color:#ff694b}.progress-striped .progress-bar-danger{background-image:-webkit-linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent);background-image:-o-linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent);background-image:linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent)}.list-group{margin-bottom:20px;padding-left:0}.list-group-item{position:relative;display:block;padding:10px 15px;margin-bottom:-1px;background-color:#fff;border:1px solid rgba(0,30,60,0.075)}.list-group-item:first-child{border-top-right-radius:4px;border-top-left-radius:4px}.list-group-item:last-child{margin-bottom:0;border-bottom-right-radius:4px;border-bottom-left-radius:4px}a.list-group-item,button.list-group-item{color:#5e666c}a.list-group-item .list-group-item-heading,button.list-group-item .list-group-item-heading{color:#313539}a.list-group-item:hover,a.list-group-item:focus,button.list-group-item:hover,button.list-group-item:focus{text-decoration:none;color:#313539;background-color:#f9fafb}button.list-group-item{width:100%;text-align:left}.list-group-item.disabled,.list-group-item.disabled:hover,.list-group-item.disabled:focus{background-color:#f9fafb;color:#8b969e;cursor:not-allowed}.list-group-item.disabled .list-group-item-heading,.list-group-item.disabled:hover .list-group-item-heading,.list-group-item.disabled:focus .list-group-item-heading{color:inherit}.list-group-item.disabled .list-group-item-text,.list-group-item.disabled:hover .list-group-item-text,.list-group-item.disabled:focus .list-group-item-text{color:#8b969e}.list-group-item.active,.list-group-item.active:hover,.list-group-item.active:focus{z-index:2;color:#fff;background-color:#0bb;border-color:rgba(0,30,60,0.03)}.list-group-item.active .list-group-item-heading,.list-group-item.active .list-group-item-heading>small,.list-group-item.active .list-group-item-heading>.small,.list-group-item.active:hover .list-group-item-heading,.list-group-item.active:hover .list-group-item-heading>small,.list-group-item.active:hover .list-group-item-heading>.small,.list-group-item.active:focus .list-group-item-heading,.list-group-item.active:focus .list-group-item-heading>small,.list-group-item.active:focus .list-group-item-heading>.small{color:inherit}.list-group-item.active .list-group-item-text,.list-group-item.active:hover .list-group-item-text,.list-group-item.active:focus .list-group-item-text{color:#fff}.list-group-item-success{color:#48a71c;background-color:#f3faec}a.list-group-item-success,button.list-group-item-success{color:#48a71c}a.list-group-item-success .list-group-item-heading,button.list-group-item-success .list-group-item-heading{color:inherit}a.list-group-item-success:hover,a.list-group-item-success:focus,button.list-group-item-success:hover,button.list-group-item-success:focus{color:#48a71c;background-color:#e6f5d8}a.list-group-item-success.active,a.list-group-item-success.active:hover,a.list-group-item-success.active:focus,button.list-group-item-success.active,button.list-group-item-success.active:hover,button.list-group-item-success.active:focus{color:#fff;background-color:#48a71c;border-color:#48a71c}.list-group-item-info{color:#0aa;background-color:#edfafa}a.list-group-item-info,button.list-group-item-info{color:#0aa}a.list-group-item-info .list-group-item-heading,button.list-group-item-info .list-group-item-heading{color:inherit}a.list-group-item-info:hover,a.list-group-item-info:focus,button.list-group-item-info:hover,button.list-group-item-info:focus{color:#0aa;background-color:#d9f4f4}a.list-group-item-info.active,a.list-group-item-info.active:hover,a.list-group-item-info.active:focus,button.list-group-item-info.active,button.list-group-item-info.active:hover,button.list-group-item-info.active:focus{color:#fff;background-color:#0aa;border-color:#0aa}.list-group-item-warning{color:#ff6316;background-color:#fff6ec}a.list-group-item-warning,button.list-group-item-warning{color:#ff6316}a.list-group-item-warning .list-group-item-heading,button.list-group-item-warning .list-group-item-heading{color:inherit}a.list-group-item-warning:hover,a.list-group-item-warning:focus,button.list-group-item-warning:hover,button.list-group-item-warning:focus{color:#ff6316;background-color:#ffead3}a.list-group-item-warning.active,a.list-group-item-warning.active:hover,a.list-group-item-warning.active:focus,button.list-group-item-warning.active,button.list-group-item-warning.active:hover,button.list-group-item-warning.active:focus{color:#fff;background-color:#ff6316;border-color:#ff6316}.list-group-item-danger{color:#ff694b;background-color:#fff5f4}a.list-group-item-danger,button.list-group-item-danger{color:#ff694b}a.list-group-item-danger .list-group-item-heading,button.list-group-item-danger .list-group-item-heading{color:inherit}a.list-group-item-danger:hover,a.list-group-item-danger:focus,button.list-group-item-danger:hover,button.list-group-item-danger:focus{color:#ff694b;background-color:#ffdedb}a.list-group-item-danger.active,a.list-group-item-danger.active:hover,a.list-group-item-danger.active:focus,button.list-group-item-danger.active,button.list-group-item-danger.active:hover,button.list-group-item-danger.active:focus{color:#fff;background-color:#ff694b;border-color:#ff694b}.list-group-item-heading{margin-top:0;margin-bottom:5px}.list-group-item-text{margin-bottom:0;line-height:1.3}.panel{margin-bottom:1.6rem;background-color:#fff;border:1px solid transparent;border-radius:4px;-webkit-box-shadow:0 1px 1px rgba(0,0,0,0.05);box-shadow:0 1px 1px rgba(0,0,0,0.05)}.panel-body{padding:15px}.panel-body:before,.panel-body:after{content:" ";display:table}.panel-body:after{clear:both}.panel-heading{padding:10px 15px;border-bottom:1px solid transparent;border-top-right-radius:3px;border-top-left-radius:3px}.panel-heading>.dropdown .dropdown-toggle{color:inherit}.panel-title{margin-top:0;margin-bottom:0;font-size:2rem;color:inherit}.panel-title>a,.panel-title>small,.panel-title>.small,.panel-title>small>a,.panel-title>.small>a{color:inherit}.panel-footer{padding:10px 15px;background-color:transparent;border-top:1px solid transparent;border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel>.list-group,.panel>.panel-collapse>.list-group{margin-bottom:0}.panel>.list-group .list-group-item,.panel>.panel-collapse>.list-group .list-group-item{border-width:1px 0;border-radius:0}.panel>.list-group:first-child .list-group-item:first-child,.panel>.panel-collapse>.list-group:first-child .list-group-item:first-child{border-top:0;border-top-right-radius:3px;border-top-left-radius:3px}.panel>.list-group:last-child .list-group-item:last-child,.panel>.panel-collapse>.list-group:last-child .list-group-item:last-child{border-bottom:0;border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel>.panel-heading+.panel-collapse>.list-group .list-group-item:first-child{border-top-right-radius:0;border-top-left-radius:0}.panel-heading+.list-group .list-group-item:first-child{border-top-width:0}.list-group+.panel-footer{border-top-width:0}.panel>.table,.panel>.table-responsive>.table,.panel>.panel-collapse>.table{margin-bottom:0}.panel>.table caption,.panel>.table-responsive>.table caption,.panel>.panel-collapse>.table caption{padding-left:15px;padding-right:15px}.panel>.table:first-child,.panel>.table-responsive:first-child>.table:first-child{border-top-right-radius:3px;border-top-left-radius:3px}.panel>.table:first-child>thead:first-child>tr:first-child,.panel>.table:first-child>tbody:first-child>tr:first-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child{border-top-left-radius:3px;border-top-right-radius:3px}.panel>.table:first-child>thead:first-child>tr:first-child td:first-child,.panel>.table:first-child>thead:first-child>tr:first-child th:first-child,.panel>.table:first-child>tbody:first-child>tr:first-child td:first-child,.panel>.table:first-child>tbody:first-child>tr:first-child th:first-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child td:first-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child th:first-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child td:first-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child th:first-child{border-top-left-radius:3px}.panel>.table:first-child>thead:first-child>tr:first-child td:last-child,.panel>.table:first-child>thead:first-child>tr:first-child th:last-child,.panel>.table:first-child>tbody:first-child>tr:first-child td:last-child,.panel>.table:first-child>tbody:first-child>tr:first-child th:last-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child td:last-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child th:last-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child td:last-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child th:last-child{border-top-right-radius:3px}.panel>.table:last-child,.panel>.table-responsive:last-child>.table:last-child{border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel>.table:last-child>tbody:last-child>tr:last-child,.panel>.table:last-child>tfoot:last-child>tr:last-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child{border-bottom-left-radius:3px;border-bottom-right-radius:3px}.panel>.table:last-child>tbody:last-child>tr:last-child td:first-child,.panel>.table:last-child>tbody:last-child>tr:last-child th:first-child,.panel>.table:last-child>tfoot:last-child>tr:last-child td:first-child,.panel>.table:last-child>tfoot:last-child>tr:last-child th:first-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child td:first-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child th:first-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child td:first-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child th:first-child{border-bottom-left-radius:3px}.panel>.table:last-child>tbody:last-child>tr:last-child td:last-child,.panel>.table:last-child>tbody:last-child>tr:last-child th:last-child,.panel>.table:last-child>tfoot:last-child>tr:last-child td:last-child,.panel>.table:last-child>tfoot:last-child>tr:last-child th:last-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child td:last-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child th:last-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child td:last-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child th:last-child{border-bottom-right-radius:3px}.panel>.panel-body+.table,.panel>.panel-body+.table-responsive,.panel>.table+.panel-body,.panel>.table-responsive+.panel-body{border-top:1px solid rgba(0,30,60,0.075)}.panel>.table>tbody:first-child>tr:first-child th,.panel>.table>tbody:first-child>tr:first-child td{border-top:0}.panel>.table-bordered,.panel>.table-responsive>.table-bordered{border:0}.panel>.table-bordered>thead>tr>th:first-child,.panel>.table-bordered>thead>tr>td:first-child,.panel>.table-bordered>tbody>tr>th:first-child,.panel>.table-bordered>tbody>tr>td:first-child,.panel>.table-bordered>tfoot>tr>th:first-child,.panel>.table-bordered>tfoot>tr>td:first-child,.panel>.table-responsive>.table-bordered>thead>tr>th:first-child,.panel>.table-responsive>.table-bordered>thead>tr>td:first-child,.panel>.table-responsive>.table-bordered>tbody>tr>th:first-child,.panel>.table-responsive>.table-bordered>tbody>tr>td:first-child,.panel>.table-responsive>.table-bordered>tfoot>tr>th:first-child,.panel>.table-responsive>.table-bordered>tfoot>tr>td:first-child{border-left:0}.panel>.table-bordered>thead>tr>th:last-child,.panel>.table-bordered>thead>tr>td:last-child,.panel>.table-bordered>tbody>tr>th:last-child,.panel>.table-bordered>tbody>tr>td:last-child,.panel>.table-bordered>tfoot>tr>th:last-child,.panel>.table-bordered>tfoot>tr>td:last-child,.panel>.table-responsive>.table-bordered>thead>tr>th:last-child,.panel>.table-responsive>.table-bordered>thead>tr>td:last-child,.panel>.table-responsive>.table-bordered>tbody>tr>th:last-child,.panel>.table-responsive>.table-bordered>tbody>tr>td:last-child,.panel>.table-responsive>.table-bordered>tfoot>tr>th:last-child,.panel>.table-responsive>.table-bordered>tfoot>tr>td:last-child{border-right:0}.panel>.table-bordered>thead>tr:first-child>td,.panel>.table-bordered>thead>tr:first-child>th,.panel>.table-bordered>tbody>tr:first-child>td,.panel>.table-bordered>tbody>tr:first-child>th,.panel>.table-responsive>.table-bordered>thead>tr:first-child>td,.panel>.table-responsive>.table-bordered>thead>tr:first-child>th,.panel>.table-responsive>.table-bordered>tbody>tr:first-child>td,.panel>.table-responsive>.table-bordered>tbody>tr:first-child>th{border-bottom:0}.panel>.table-bordered>tbody>tr:last-child>td,.panel>.table-bordered>tbody>tr:last-child>th,.panel>.table-bordered>tfoot>tr:last-child>td,.panel>.table-bordered>tfoot>tr:last-child>th,.panel>.table-responsive>.table-bordered>tbody>tr:last-child>td,.panel>.table-responsive>.table-bordered>tbody>tr:last-child>th,.panel>.table-responsive>.table-bordered>tfoot>tr:last-child>td,.panel>.table-responsive>.table-bordered>tfoot>tr:last-child>th{border-bottom:0}.panel>.table-responsive{border:0;margin-bottom:0}.panel-group{margin-bottom:1.6rem}.panel-group .panel{margin-bottom:0;border-radius:4px}.panel-group .panel+.panel{margin-top:5px}.panel-group .panel-heading{border-bottom:0}.panel-group .panel-heading+.panel-collapse>.panel-body,.panel-group .panel-heading+.panel-collapse>.list-group{border-top:1px solid transparent}.panel-group .panel-footer{border-top:0}.panel-group .panel-footer+.panel-collapse .panel-body{border-bottom:1px solid transparent}.panel-default{border-color:#ddd}.panel-default>.panel-heading{color:#5e666c;background-color:transparent;border-color:#ddd}.panel-default>.panel-heading+.panel-collapse>.panel-body{border-top-color:#ddd}.panel-default>.panel-heading .badge{color:transparent;background-color:#5e666c}.panel-default>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#ddd}.panel-primary{border-color:#0bb}.panel-primary>.panel-heading{color:#fff;background-color:#0bb;border-color:#0bb}.panel-primary>.panel-heading+.panel-collapse>.panel-body{border-top-color:#0bb}.panel-primary>.panel-heading .badge{color:#0bb;background-color:#fff}.panel-primary>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#0bb}.panel-success{border-color:transparent}.panel-success>.panel-heading{color:#48a71c;background-color:#f3faec;border-color:transparent}.panel-success>.panel-heading+.panel-collapse>.panel-body{border-top-color:transparent}.panel-success>.panel-heading .badge{color:#f3faec;background-color:#48a71c}.panel-success>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:transparent}.panel-info{border-color:transparent}.panel-info>.panel-heading{color:#0aa;background-color:#edfafa;border-color:transparent}.panel-info>.panel-heading+.panel-collapse>.panel-body{border-top-color:transparent}.panel-info>.panel-heading .badge{color:#edfafa;background-color:#0aa}.panel-info>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:transparent}.panel-warning{border-color:transparent}.panel-warning>.panel-heading{color:#ff6316;background-color:#fff6ec;border-color:transparent}.panel-warning>.panel-heading+.panel-collapse>.panel-body{border-top-color:transparent}.panel-warning>.panel-heading .badge{color:#fff6ec;background-color:#ff6316}.panel-warning>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:transparent}.panel-danger{border-color:transparent}.panel-danger>.panel-heading{color:#ff694b;background-color:#fff5f4;border-color:transparent}.panel-danger>.panel-heading+.panel-collapse>.panel-body{border-top-color:transparent}.panel-danger>.panel-heading .badge{color:#fff5f4;background-color:#ff694b}.panel-danger>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:transparent}.well{min-height:20px;padding:19px;margin-bottom:20px;background-color:#f0f2f4;border:1px solid transparent;border-radius:4px;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.05);box-shadow:inset 0 1px 1px rgba(0,0,0,0.05)}.well blockquote{border-color:#ddd;border-color:rgba(0,0,0,0.15)}.well-lg{padding:24px;border-radius:4px}.well-sm{padding:9px;border-radius:4px}.close{float:right;font-size:1.5rem;font-weight:bold;line-height:1;color:#000;text-shadow:0 1px 0 #fff;opacity:.2;filter:alpha(opacity=20)}.close:hover,.close:focus{color:#000;text-decoration:none;cursor:pointer;opacity:.5;filter:alpha(opacity=50)}button.close{padding:0;cursor:pointer;background:transparent;border:0;-webkit-appearance:none}.modal-open{overflow:hidden}.modal{display:none;overflow:hidden;position:fixed;top:0;right:0;bottom:0;left:0;z-index:1050;-webkit-overflow-scrolling:touch;outline:0}.modal.fade .modal-dialog{-webkit-transform:translate(0, -25%);-ms-transform:translate(0, -25%);-o-transform:translate(0, -25%);transform:translate(0, -25%);-webkit-transition:-webkit-transform 0.3s ease-out;-moz-transition:-moz-transform 0.3s ease-out;-o-transition:-o-transform 0.3s ease-out;transition:transform 0.3s ease-out}.modal.in .modal-dialog{-webkit-transform:translate(0, 0);-ms-transform:translate(0, 0);-o-transform:translate(0, 0);transform:translate(0, 0)}.modal-open .modal{overflow-x:hidden;overflow-y:auto}.modal-dialog{position:relative;width:auto;margin:10px}.modal-content{position:relative;background-color:transparent;border:1px solid transparent;border:1px solid transparent;border-radius:4px;-webkit-box-shadow:0 3px 9px rgba(0,0,0,0.5);box-shadow:0 3px 9px rgba(0,0,0,0.5);background-clip:padding-box;outline:0}.modal-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1040;background-color:#f0f2f4}.modal-backdrop.fade{opacity:0;filter:alpha(opacity=0)}.modal-backdrop.in{opacity:.75;filter:alpha(opacity=75)}.modal-header{padding:0;border-bottom:1px solid transparent}.modal-header:before,.modal-header:after{content:" ";display:table}.modal-header:after{clear:both}.modal-header .close{margin-top:-2px}.modal-title{margin:0;line-height:1.6}.modal-body{position:relative;padding:0}.modal-footer{padding:0;text-align:right;border-top:1px solid transparent}.modal-footer:before,.modal-footer:after{content:" ";display:table}.modal-footer:after{clear:both}.modal-footer .btn+.btn{margin-left:5px;margin-bottom:0}.modal-footer .btn-group .btn+.btn{margin-left:-1px}.modal-footer .btn-block+.btn-block{margin-left:0}.modal-scrollbar-measure{position:absolute;top:-9999px;width:50px;height:50px;overflow:scroll}@media (min-width: 540px){.modal-dialog{width:768px;margin:30px auto}.modal-content{-webkit-box-shadow:0 5px 15px rgba(0,0,0,0.5);box-shadow:0 5px 15px rgba(0,0,0,0.5)}.modal-sm{width:400px}}@media (min-width: 768px){.modal-lg{width:960px}}.tooltip{position:absolute;z-index:1070;display:block;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Oxygen,Ubuntu,Cantarell,"Fira Sans","Droid Sans","Helvetica Neue",Helvetica,Arial,sans-serif;font-style:normal;font-weight:normal;letter-spacing:normal;line-break:auto;line-height:1.6;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;white-space:normal;word-break:normal;word-spacing:normal;word-wrap:normal;font-size:.9285714286rem;opacity:0;filter:alpha(opacity=0)}.tooltip.in{opacity:1;filter:alpha(opacity=100)}.tooltip.top{margin-top:-3px;padding:5px 0}.tooltip.right{margin-left:3px;padding:0 5px}.tooltip.bottom{margin-top:3px;padding:5px 0}.tooltip.left{margin-left:-3px;padding:0 5px}.tooltip-inner{max-width:300px;padding:3px 8px;color:#fff;text-align:center;background-color:#007699;border-radius:4px}.tooltip-arrow{position:absolute;width:0;height:0;border-color:transparent;border-style:solid}.tooltip.top .tooltip-arrow{bottom:0;left:50%;margin-left:-5px;border-width:5px 5px 0;border-top-color:#007699}.tooltip.top-left .tooltip-arrow{bottom:0;right:5px;margin-bottom:-5px;border-width:5px 5px 0;border-top-color:#007699}.tooltip.top-right .tooltip-arrow{bottom:0;left:5px;margin-bottom:-5px;border-width:5px 5px 0;border-top-color:#007699}.tooltip.right .tooltip-arrow{top:50%;left:0;margin-top:-5px;border-width:5px 5px 5px 0;border-right-color:#007699}.tooltip.left .tooltip-arrow{top:50%;right:0;margin-top:-5px;border-width:5px 0 5px 5px;border-left-color:#007699}.tooltip.bottom .tooltip-arrow{top:0;left:50%;margin-left:-5px;border-width:0 5px 5px;border-bottom-color:#007699}.tooltip.bottom-left .tooltip-arrow{top:0;right:5px;margin-top:-5px;border-width:0 5px 5px;border-bottom-color:#007699}.tooltip.bottom-right .tooltip-arrow{top:0;left:5px;margin-top:-5px;border-width:0 5px 5px;border-bottom-color:#007699}.popover{position:absolute;top:0;left:0;z-index:1060;display:none;max-width:400px;padding:1px;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Oxygen,Ubuntu,Cantarell,"Fira Sans","Droid Sans","Helvetica Neue",Helvetica,Arial,sans-serif;font-style:normal;font-weight:normal;letter-spacing:normal;line-break:auto;line-height:1.6;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;white-space:normal;word-break:normal;word-spacing:normal;word-wrap:normal;font-size:1rem;background-color:#ff694b;background-clip:padding-box;border:1px solid transparent;border:1px solid transparent;border-radius:4px;-webkit-box-shadow:0 5px 10px rgba(0,0,0,0.2);box-shadow:0 5px 10px rgba(0,0,0,0.2)}.popover.top{margin-top:-10px}.popover.right{margin-left:10px}.popover.bottom{margin-top:10px}.popover.left{margin-left:-10px}.popover-title{margin:0;padding:8px 14px;font-size:1rem;background-color:transparent;border-bottom:1px solid transparent;border-radius:3px 3px 0 0}.popover-content{padding:9px 14px}.popover>.arrow,.popover>.arrow:after{position:absolute;display:block;width:0;height:0;border-color:transparent;border-style:solid}.popover>.arrow{border-width:0}.popover>.arrow:after{border-width:10px;content:""}.popover.top>.arrow{left:50%;margin-left:0;border-bottom-width:0;border-top-color:transparent;border-top-color:transparent;bottom:0}.popover.top>.arrow:after{content:" ";bottom:1px;margin-left:-10px;border-bottom-width:0;border-top-color:#ff694b}.popover.right>.arrow{top:50%;left:0;margin-top:0;border-left-width:0;border-right-color:transparent;border-right-color:transparent}.popover.right>.arrow:after{content:" ";left:1px;bottom:-10px;border-left-width:0;border-right-color:#ff694b}.popover.bottom>.arrow{left:50%;margin-left:0;border-top-width:0;border-bottom-color:transparent;border-bottom-color:transparent;top:0}.popover.bottom>.arrow:after{content:" ";top:1px;margin-left:-10px;border-top-width:0;border-bottom-color:#ff694b}.popover.left>.arrow{top:50%;right:0;margin-top:0;border-right-width:0;border-left-color:transparent;border-left-color:transparent}.popover.left>.arrow:after{content:" ";right:1px;border-right-width:0;border-left-color:#ff694b;bottom:-10px}.carousel{position:relative}.carousel-inner{position:relative;overflow:hidden;width:100%}.carousel-inner>.item{display:none;position:relative;-webkit-transition:0.6s ease-in-out left;-o-transition:0.6s ease-in-out left;transition:0.6s ease-in-out left}.carousel-inner>.item>img,.carousel-inner>.item>a>img{display:block;max-width:100%;height:auto;line-height:1}@media all and (transform-3d), (-webkit-transform-3d){.carousel-inner>.item{-webkit-transition:-webkit-transform 0.6s ease-in-out;-moz-transition:-moz-transform 0.6s ease-in-out;-o-transition:-o-transform 0.6s ease-in-out;transition:transform 0.6s ease-in-out;-webkit-backface-visibility:hidden;-moz-backface-visibility:hidden;backface-visibility:hidden;-webkit-perspective:1000px;-moz-perspective:1000px;perspective:1000px}.carousel-inner>.item.next,.carousel-inner>.item.active.right{-webkit-transform:translate3d(100%, 0, 0);transform:translate3d(100%, 0, 0);left:0}.carousel-inner>.item.prev,.carousel-inner>.item.active.left{-webkit-transform:translate3d(-100%, 0, 0);transform:translate3d(-100%, 0, 0);left:0}.carousel-inner>.item.next.left,.carousel-inner>.item.prev.right,.carousel-inner>.item.active{-webkit-transform:translate3d(0, 0, 0);transform:translate3d(0, 0, 0);left:0}}.carousel-inner>.active,.carousel-inner>.next,.carousel-inner>.prev{display:block}.carousel-inner>.active{left:0}.carousel-inner>.next,.carousel-inner>.prev{position:absolute;top:0;width:100%}.carousel-inner>.next{left:100%}.carousel-inner>.prev{left:-100%}.carousel-inner>.next.left,.carousel-inner>.prev.right{left:0}.carousel-inner>.active.left{left:-100%}.carousel-inner>.active.right{left:100%}.carousel-control{position:absolute;top:0;left:0;bottom:0;width:120px;opacity:1;filter:alpha(opacity=100);font-size:20px;color:#fff;text-align:center;text-shadow:none;background-color:transparent}.carousel-control.left{background-image:-webkit-linear-gradient(left, rgba(0,0,0,0.5) 0%, rgba(0,0,0,0.0001) 100%);background-image:-o-linear-gradient(left, rgba(0,0,0,0.5) 0%, rgba(0,0,0,0.0001) 100%);background-image:linear-gradient(to right, rgba(0,0,0,0.5) 0%, rgba(0,0,0,0.0001) 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr=\'#80000000\', endColorstr=\'#00000000\', GradientType=1)}.carousel-control.right{left:auto;right:0;background-image:-webkit-linear-gradient(left, rgba(0,0,0,0.0001) 0%, rgba(0,0,0,0.5) 100%);background-image:-o-linear-gradient(left, rgba(0,0,0,0.0001) 0%, rgba(0,0,0,0.5) 100%);background-image:linear-gradient(to right, rgba(0,0,0,0.0001) 0%, rgba(0,0,0,0.5) 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr=\'#00000000\', endColorstr=\'#80000000\', GradientType=1)}.carousel-control:hover,.carousel-control:focus{outline:0;color:#fff;text-decoration:none;opacity:.9;filter:alpha(opacity=90)}.carousel-control .icon-prev,.carousel-control .icon-next,.carousel-control .glyphicon-chevron-left,.carousel-control .glyphicon-chevron-right{position:absolute;top:50%;margin-top:-10px;z-index:5;display:inline-block}.carousel-control .icon-prev,.carousel-control .glyphicon-chevron-left{left:50%;margin-left:-10px}.carousel-control .icon-next,.carousel-control .glyphicon-chevron-right{right:50%;margin-right:-10px}.carousel-control .icon-prev,.carousel-control .icon-next{width:20px;height:20px;line-height:1;font-family:serif}.carousel-control .icon-prev:before{content:\'\\2039\'}.carousel-control .icon-next:before{content:\'\\203A\'}.carousel-indicators{position:absolute;bottom:10px;left:50%;z-index:15;width:60%;margin-left:-30%;padding-left:0;list-style:none;text-align:center}.carousel-indicators li{display:inline-block;width:10px;height:10px;margin:1px;text-indent:-999px;border:1px solid transparent;border-radius:10px;cursor:pointer;background-color:#000 \\9;background-color:transparent}.carousel-indicators .active{margin:0;width:12px;height:12px;background-color:#fff}.carousel-caption{position:absolute;left:15%;right:15%;bottom:20px;z-index:10;padding-top:20px;padding-bottom:20px;color:#fff;text-align:center;text-shadow:none}.carousel-caption .btn{text-shadow:none}@media screen and (min-width: 540px){.carousel-control .glyphicon-chevron-left,.carousel-control .glyphicon-chevron-right,.carousel-control .icon-prev,.carousel-control .icon-next{width:30px;height:30px;margin-top:-10px;font-size:30px}.carousel-control .glyphicon-chevron-left,.carousel-control .icon-prev{margin-left:-10px}.carousel-control .glyphicon-chevron-right,.carousel-control .icon-next{margin-right:-10px}.carousel-caption{left:20%;right:20%;padding-bottom:30px}.carousel-indicators{bottom:20px}}.clearfix:before,.clearfix:after{content:" ";display:table}.clearfix:after{clear:both}.center-block{display:block;margin-left:auto;margin-right:auto}.pull-right{float:right !important}.pull-left{float:left !important}.hide{display:none !important}.show{display:block !important}.invisible{visibility:hidden}.text-hide{font:0/0 a;color:transparent;text-shadow:none;background-color:transparent;border:0}.hidden{display:none !important}.affix{position:fixed}@font-face{font-family:"arrows";font-weight:normal;font-style:normal;src:url('+r(n(213))+') format("woff")}[class*="arrow-"]:not(.arrow-before):after,[class*="arrow-"].arrow-before:before{font-family:"arrows";text-transform:none;font-style:normal;font-weight:normal;line-height:.5}.arrow-large:not(.arrow-before):after,.arrow-large.arrow-before:before{text-transform:uppercase}.arrow-up:not(.arrow-before):after,.arrow-up.arrow-before:before{content:" a "}.arrow-right:not(.arrow-before):after,.arrow-right.arrow-before:before{content:" b "}.arrow-down:not(.arrow-before):after,.arrow-down.arrow-before:before{content:" c "}.arrow-left:not(.arrow-before):after,.arrow-left.arrow-before:before{content:" d "}.arrow-close:not(.arrow-before):after,.arrow-close.arrow-before:before{content:" e "}.arrow-check:not(.arrow-before):after,.arrow-check.arrow-before:before{content:" f "}@font-face{font-family:"entypo";font-weight:normal;font-style:normal;src:url('+r(n(214))+') format("woff")}[data-icon]{width:24px;height:10px;display:inline-block;vertical-align:middle}[data-icon]:before{display:block;position:relative;margin-top:-1px;top:-5px;speak:none;font-family:"entypo";font-style:normal;font-weight:normal;font-variant:normal;font-size:18px;line-height:1;text-align:center;text-transform:none;text-decoration:inherit}[data-icon].md:before{font-size:20px}[data-icon].lg{width:32px}[data-icon].lg:before{font-size:32px;top:-11px}[data-icon="note"]:before{content:"\\E800"}[data-icon="logo-db"]:before{content:"\\E8DE"}[data-icon="music"]:before{content:"\\E802"}[data-icon="search"]:before{content:"\\E803"}[data-icon="flashlight"]:before{content:"\\E804"}[data-icon="mail"]:before{content:"\\E805"}[data-icon="heart"]:before{content:"\\E80D"}[data-icon="heart-empty"]:before{content:"\\E80F"}[data-icon="star"]:before{content:"\\E810"}[data-icon="star-empty"]:before{content:"\\E813"}[data-icon="user"]:before{content:"\\E814"}[data-icon="users"]:before{content:"\\E817"}[data-icon="user-add"]:before{content:"\\E819"}[data-icon="video"]:before{content:"\\E81A"}[data-icon="picture"]:before{content:"\\E81D"}[data-icon="camera"]:before{content:"\\1F4F7"}[data-icon="layout"]:before{content:"\\E821"}[data-icon="menu"]:before{content:"\\E823"}[data-icon="check"]:before{content:"\\E824"}[data-icon="close"]:before{content:"\\E826"}[data-icon="cancel"]:before{content:"\\E826"}[data-icon="cancel-circled"]:before{content:"\\E806"}[data-icon="cancel-squared"]:before{content:"\\E808"}[data-icon="plus"]:before{content:"+"}[data-icon="plus-circled"]:before{content:"\\E809"}[data-icon="plus-squared"]:before{content:"\\E80A"}[data-icon="minus"]:before{content:"\\2212"}[data-icon="minus-circled"]:before{content:"\\E80E"}[data-icon="minus-squared"]:before{content:"\\E80C"}[data-icon="help"]:before{content:"\\E811"}[data-icon="help-circled"]:before{content:"\\E812"}[data-icon="info"]:before{content:"\\E815"}[data-icon="info-circled"]:before{content:"\\E816"}[data-icon="back"]:before{content:"\\E818"}[data-icon="home"]:before{content:"\\E81B"}[data-icon="link"]:before{content:"\\E81C"}[data-icon="attach"]:before{content:"\\E81F"}[data-icon="lock"]:before{content:"\\1F512"}[data-icon="lock-open"]:before{content:"\\E822"}[data-icon="eye"]:before{content:"\\E825"}[data-icon="tag"]:before{content:"\\E827"}[data-icon="bookmark"]:before{content:"\\1F516"}[data-icon="bookmarks"]:before{content:"\\E837"}[data-icon="flag"]:before{content:"\\E838"}[data-icon="thumbs-up"]:before{content:"\\E840"}[data-icon="thumbs-down"]:before{content:"\\E849"}[data-icon="download"]:before{content:"\\E85D"}[data-icon="upload"]:before{content:"\\E851"}[data-icon="upload-cloud"]:before{content:"\\E86B"}[data-icon="reply"]:before{content:"\\E86C"}[data-icon="reply-all"]:before{content:"\\E87B"}[data-icon="forward"]:before{content:"\\E87C"}[data-icon="quote"]:before{content:"\\E889"}[data-icon="code"]:before{content:"\\E88A"}[data-icon="export"]:before{content:"\\E899"}[data-icon="pencil"]:before{content:"\\270F"}[data-icon="feather"]:before{content:"\\E8A5"}[data-icon="print"]:before{content:"\\E8A8"}[data-icon="retweet"]:before{content:"\\E8A9"}[data-icon="keyboard"]:before{content:"\\2328"}[data-icon="comment"]:before{content:"\\E8AB"}[data-icon="chat"]:before{content:"\\E829"}[data-icon="bell"]:before{content:"\\1F514"}[data-icon="attention"]:before{content:"\\E839"}[data-icon="alert"]:before{content:"\\E841"}[data-icon="vcard"]:before{content:"\\E853"}[data-icon="address"]:before{content:"\\E85C"}[data-icon="location"]:before{content:"\\E852"}[data-icon="map"]:before{content:"\\E84A"}[data-icon="direction"]:before{content:"\\E86D"}[data-icon="compass"]:before{content:"\\E87A"}[data-icon="cup"]:before{content:"\\E850"}[data-icon="trash"]:before{content:"\\E888"}[data-icon="doc"]:before{content:"\\E88B"}[data-icon="docs"]:before{content:"\\E898"}[data-icon="doc-landscape"]:before{content:"\\E89B"}[data-icon="doc-text"]:before{content:"\\E8A6"}[data-icon="doc-text-inv"]:before{content:"\\E8A7"}[data-icon="newspaper"]:before{content:"\\1F4F0"}[data-icon="book-open"]:before{content:"\\E8AD"}[data-icon="book"]:before{content:"\\E8AC"}[data-icon="folder"]:before{content:"\\E82A"}[data-icon="archive"]:before{content:"\\E835"}[data-icon="box"]:before{content:"\\E83A"}[data-icon="rss"]:before{content:"\\E842"}[data-icon="phone"]:before{content:"\\E854"}[data-icon="cog"]:before{content:"\\E85E"}[data-icon="tools"]:before{content:"\\E860"}[data-icon="share"]:before{content:"\\E84B"}[data-icon="shareable"]:before{content:"\\E86E"}[data-icon="basket"]:before{content:"\\E879"}[data-icon="bag"]:before{content:"\\E87E"}[data-icon="calendar"]:before{content:"\\1F4C5"}[data-icon="login"]:before{content:"\\E88C"}[data-icon="logout"]:before{content:"\\E897"}[data-icon="mic"]:before{content:"\\E84D"}[data-icon="mute"]:before{content:"\\E84E"}[data-icon="sound"]:before{content:"\\E8AE"}[data-icon="volume"]:before{content:"\\E8B4"}[data-icon="clock"]:before{content:"\\E8AF"}[data-icon="hourglass"]:before{content:"\\231B"}[data-icon="lamp"]:before{content:"\\E82B"}[data-icon="light-down"]:before{content:"\\E834"}[data-icon="light-up"]:before{content:"\\E83B"}[data-icon="adjust"]:before{content:"\\E843"}[data-icon="block"]:before{content:"\\2588"}[data-icon="resize-full"]:before{content:"\\E85F"}[data-icon="resize-small"]:before{content:"\\E861"}[data-icon="popup"]:before{content:"\\E86A"}[data-icon="publish"]:before{content:"\\E86F"}[data-icon="window"]:before{content:"\\E878"}[data-icon="arrow-combo"]:before{content:"\\E87D"}[data-icon="down-circled"]:before{content:"\\E887"}[data-icon="left-circled"]:before{content:"\\E88D"}[data-icon="right-circled"]:before{content:"\\E896"}[data-icon="up-circled"]:before{content:"\\E89C"}[data-icon="down-open"]:before{content:"\\E84C"}[data-icon="left-open"]:before{content:"\\E8B2"}[data-icon="right-open"]:before{content:"\\E8B3"}[data-icon="up-open"]:before{content:"\\E8B5"}[data-icon="down-open-mini"]:before{content:"\\E8B6"}[data-icon="left-open-mini"]:before{content:"\\E833"}[data-icon="right-open-mini"]:before{content:"\\E832"}[data-icon="up-open-mini"]:before{content:"\\E83C"}[data-icon="down-open-big"]:before{content:"\\E844"}[data-icon="left-open-big"]:before{content:"\\E855"}[data-icon="right-open-big"]:before{content:"\\E85B"}[data-icon="up-open-big"]:before{content:"\\E862"}[data-icon="down"]:before{content:"\\E869"}[data-icon="left"]:before{content:"\\E870"}[data-icon="right"]:before{content:"\\E877"}[data-icon="up"]:before{content:"\\E87F"}[data-icon="down-dir"]:before{content:"\\E886"}[data-icon="left-dir"]:before{content:"\\E88E"}[data-icon="right-dir"]:before{content:"\\E895"}[data-icon="up-dir"]:before{content:"\\E89D"}[data-icon="down-bold"]:before{content:"\\E8A4"}[data-icon="left-bold"]:before{content:"\\E8BA"}[data-icon="right-bold"]:before{content:"\\E8B9"}[data-icon="up-bold"]:before{content:"\\E8B8"}[data-icon="down-thin"]:before{content:"\\E8B7"}[data-icon="left-thin"]:before{content:"\\E82C"}[data-icon="note-beamed"]:before{content:"\\E801"}[data-icon="up-thin"]:before{content:"\\E83D"}[data-icon="cw"]:before{content:"\\E856"}[data-icon="arrows-ccw"]:before{content:"\\E85A"}[data-icon="level-down"]:before{content:"\\E863"}[data-icon="level-up"]:before{content:"\\E868"}[data-icon="shuffle"]:before{content:"\\E871"}[data-icon="loop"]:before{content:"\\E876"}[data-icon="switch"]:before{content:"\\E880"}[data-icon="play"]:before{content:"\\E885"}[data-icon="stop"]:before{content:"\\E88F"}[data-icon="pause"]:before{content:"\\E894"}[data-icon="record"]:before{content:"\\E89E"}[data-icon="to-end"]:before{content:"\\E8A3"}[data-icon="to-start"]:before{content:"\\E8BB"}[data-icon="fast-forward"]:before{content:"\\E8BC"}[data-icon="fast-backward"]:before{content:"\\E8BD"}[data-icon="progress-0"]:before{content:"\\E8BE"}[data-icon="progress-1"]:before{content:"\\E82D"}[data-icon="progress-2"]:before{content:"\\E830"}[data-icon="progress-3"]:before{content:"\\E83E"}[data-icon="target"]:before{content:"\\E857"}[data-icon="palette"]:before{content:"\\E847"}[data-icon="list"]:before{content:"\\E859"}[data-icon="list-add"]:before{content:"\\E864"}[data-icon="signal"]:before{content:"\\E867"}[data-icon="trophy"]:before{content:"\\1F3C6"}[data-icon="battery"]:before{content:"\\1F50B"}[data-icon="back-in-time"]:before{content:"\\E881"}[data-icon="monitor"]:before{content:"\\E884"}[data-icon="mobile"]:before{content:"\\E890"}[data-icon="network"]:before{content:"\\E893"}[data-icon="cd"]:before{content:"\\E89F"}[data-icon="inbox"]:before{content:"\\E8A2"}[data-icon="install"]:before{content:"\\E8C2"}[data-icon="globe"]:before{content:"\\E8C1"}[data-icon="cloud"]:before{content:"\\2601"}[data-icon="cloud-thunder"]:before{content:"\\E8BF"}[data-icon="flash"]:before{content:"\\E82E"}[data-icon="moon"]:before{content:"\\E82F"}[data-icon="flight"]:before{content:"\\E83F"}[data-icon="paper-plane"]:before{content:"\\E845"}[data-icon="leaf"]:before{content:"\\E846"}[data-icon="lifebuoy"]:before{content:"\\E858"}[data-icon="mouse"]:before{content:"\\1F401"}[data-icon="briefcase"]:before{content:"\\1F4BC"}[data-icon="suitcase"]:before{content:"\\E873"}[data-icon="dot"]:before{content:"\\E874"}[data-icon="dot-2"]:before{content:"\\E882"}[data-icon="dot-3"]:before{content:"\\E883"}[data-icon="brush"]:before{content:"\\E891"}[data-icon="magnet"]:before{content:"\\E892"}[data-icon="infinity"]:before{content:"\\221E"}[data-icon="erase"]:before{content:"\\E8A1"}[data-icon="chart-pie"]:before{content:"\\E8C3"}[data-icon="chart-line"]:before{content:"\\E8C4"}[data-icon="chart-bar"]:before{content:"\\E8C5"}[data-icon="chart-area"]:before{content:"\\E8C6"}[data-icon="tape"]:before{content:"\\E8C7"}[data-icon="graduation-cap"]:before{content:"\\E8D2"}[data-icon="language"]:before{content:"\\E8D4"}[data-icon="ticket"]:before{content:"\\1F3AB"}[data-icon="water"]:before{content:"\\E8DA"}[data-icon="droplet"]:before{content:"\\1F4A7"}[data-icon="air"]:before{content:"\\E8E3"}[data-icon="credit-card"]:before{content:"\\E8EA"}[data-icon="floppy"]:before{content:"\\E8EB"}[data-icon="clipboard"]:before{content:"\\1F4CB"}[data-icon="megaphone"]:before{content:"\\E8F3"}[data-icon="database"]:before{content:"\\E8FA"}[data-icon="drive"]:before{content:"\\E8FC"}[data-icon="bucket"]:before{content:"\\E902"}[data-icon="thermometer"]:before{content:"\\E903"}[data-icon="key"]:before{content:"\\1F511"}[data-icon="flow-cascade"]:before{content:"\\E90B"}[data-icon="flow-branch"]:before{content:"\\E912"}[data-icon="flow-tree"]:before{content:"\\E913"}[data-icon="flow-line"]:before{content:"\\E91A"}[data-icon="flow-parallel"]:before{content:"\\E8C8"}[data-icon="rocket"]:before{content:"\\1F680"}[data-icon="gauge"]:before{content:"\\E8D3"}[data-icon="traffic-cone"]:before{content:"\\E8D8"}[data-icon="cc"]:before{content:"\\E8DB"}[data-icon="cc-by"]:before{content:"\\E8E1"}[data-icon="cc-nc"]:before{content:"\\E8E4"}[data-icon="cc-nc-eu"]:before{content:"\\E8E9"}[data-icon="cc-nc-jp"]:before{content:"\\E8EC"}[data-icon="cc-sa"]:before{content:"\\E8F1"}[data-icon="cc-nd"]:before{content:"\\E8F4"}[data-icon="cc-pd"]:before{content:"\\E8F9"}[data-icon="cc-zero"]:before{content:"\\E8FB"}[data-icon="cc-share"]:before{content:"\\E901"}[data-icon="cc-remix"]:before{content:"\\E904"}[data-icon="github"]:before{content:"\\E909"}[data-icon="github-circled"]:before{content:"\\E90C"}[data-icon="flickr"]:before{content:"\\E911"}[data-icon="flickr-circled"]:before{content:"\\E914"}[data-icon="vimeo"]:before{content:"\\E919"}[data-icon="vimeo-circled"]:before{content:"\\E8C9"}[data-icon="twitter"]:before{content:"\\E8D0"}[data-icon="twitter-circled"]:before{content:"\\E8D6"}[data-icon="facebook"]:before{content:"\\E8D7"}[data-icon="facebook-circled"]:before{content:"\\E8DC"}[data-icon="facebook-squared"]:before{content:"\\E8E0"}[data-icon="gplus"]:before{content:"\\E8E5"}[data-icon="gplus-circled"]:before{content:"\\E8E8"}[data-icon="pinterest"]:before{content:"\\E8ED"}[data-icon="pinterest-circled"]:before{content:"\\E8F0"}[data-icon="tumblr"]:before{content:"\\E8F5"}[data-icon="tumblr-circled"]:before{content:"\\E8F8"}[data-icon="linkedin"]:before{content:"\\E8FD"}[data-icon="linkedin-circled"]:before{content:"\\E900"}[data-icon="dribbble"]:before{content:"\\E905"}[data-icon="dribbble-circled"]:before{content:"\\E908"}[data-icon="stumbleupon"]:before{content:"\\E90D"}[data-icon="stumbleupon-circled"]:before{content:"\\E910"}[data-icon="lastfm"]:before{content:"\\E915"}[data-icon="lastfm-circled"]:before{content:"\\E918"}[data-icon="rdio"]:before{content:"\\E8CA"}[data-icon="rdio-circled"]:before{content:"\\E8D5"}[data-icon="spotify"]:before{content:"\\E8CF"}[data-icon="spotify-circled"]:before{content:"\\E8CE"}[data-icon="qq"]:before{content:"\\E8DD"}[data-icon="instagram"]:before{content:"\\E8DF"}[data-icon="dropbox"]:before{content:"\\E8E6"}[data-icon="evernote"]:before{content:"\\E8E7"}[data-icon="flattr"]:before{content:"\\E8EE"}[data-icon="skype"]:before{content:"\\E8EF"}[data-icon="skype-circled"]:before{content:"\\E8F6"}[data-icon="renren"]:before{content:"\\E8F7"}[data-icon="sina-weibo"]:before{content:"\\E8FE"}[data-icon="paypal"]:before{content:"\\E8FF"}[data-icon="picasa"]:before{content:"\\E906"}[data-icon="soundcloud"]:before{content:"\\E907"}[data-icon="mixi"]:before{content:"\\E90E"}[data-icon="behance"]:before{content:"\\E90F"}[data-icon="google-circles"]:before{content:"\\E916"}[data-icon="vkontakte"]:before{content:"\\E917"}[data-icon="smashing"]:before{content:"\\E8CB"}[data-icon="sweden"]:before{content:"\\E8CC"}[data-icon="db-shape"]:before{content:"\\E8CD"}[data-icon="bitbucket"]:before{content:"\\20AC"}*,*:before,*:after{position:relative;outline:none !important;text-rendering:optimizeLegibility;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;font-smoothing:grayscale}html{-webkit-text-size-adjust:100%;font-size:14px}body{min-width:960px}.block{display:block !important}.inline{display:inline !important}.inline-block{display:inline-block !important}.invisible{visibility:hidden}.hidden{display:none}.blocklink{display:block;color:inherit;text-decoration:none !important}.blocklink:hover,.blocklink:focus{color:inherit}.fill{display:block;position:absolute;width:100%;height:100%;top:0;left:0}.full{display:block;position:absolute;width:100%;height:100%;top:0;left:0;position:fixed}.cover{display:block;position:absolute;left:0;top:0;bottom:0;right:0}.clear:after{display:table;content:\'\';clear:both}.clean{margin:0;padding:0;border:0;list-style-type:none}.clean li{margin:0;padding:0;list-style-type:none}.trim>*:first-child{margin-top:0}.trim>*:last-child{margin-bottom:0}.snug>*{margin-top:.5rem;margin-bottom:.5rem}.snug>*:first-child{margin-top:0}.snug>*:last-child{margin-bottom:0}.compact *{margin-top:0;margin-bottom:0}.component{display:block;border-width:0;background:white;box-shadow:0 0 0 1px rgba(0,30,60,0.03),0 3px 3px -1.5px rgba(0,0,0,0.03);border-radius:4px}.transitions{-webkit-transition:all .5s cubic-bezier(0.25, 0, 0, 1);-o-transition:all .5s cubic-bezier(0.25, 0, 0, 1);transition:all .5s cubic-bezier(0.25, 0, 0, 1)}.margin,.margin-top{margin-top:2em}.margin,.margin-bottom{margin-bottom:2em}.margin-small,.margin-small-top{margin-top:1em}.margin-small,.margin-small-bottom{margin-bottom:1em}.padding,.padding-top{padding-top:2em}.padding,.padding-bottom{margin-bottom:2em}.flush,.flush-top{margin-top:0 !important}.flush,.flush-bottom{margin-bottom:0 !important}@media print{html{font-size:9pt}html body{-webkit-print-color-adjust:exact}html a{white-space:nowrap}html,body{background:white !important}font-size:9pt;body{-webkit-print-color-adjust:exact}a{white-space:nowrap}@page{margin:0.75in 1in}}@media screen{html.print{font-size:9pt;font-size:9pt;background:#f9fafb}html.print body{-webkit-print-color-adjust:exact}html.print a{white-space:nowrap}html.print body{-webkit-print-color-adjust:exact}html.print a{white-space:nowrap}html.print body{padding:0.75in 1in;margin:.5in auto;max-width:8.5in;box-shadow:0 0 0 1px rgba(0,30,60,0.03),0 3px 3px -1.5px rgba(0,0,0,0.03);height:auto}}.text-red{color:#ff694b !important}.text-red-dark{color:#ff4f39 !important}.text-red-darker{color:#ff3c2b !important}.text-red-darkest{color:#ff2d21 !important}.text-red-light{color:#ff845e !important}.text-red-lighter{color:#ffa376 !important}.text-red-lightest{color:#ffba94 !important}.text-red-highlight{color:#fff5f4 !important}.bg-red{background-color:#ff694b !important}.bg-red-dark{background-color:#ff4f39 !important}.bg-red-darker{background-color:#ff3c2b !important}.bg-red-darkest{background-color:#ff2d21 !important}.bg-red-light{background-color:#ff845e !important}.bg-red-lighter{background-color:#ffa376 !important}.bg-red-lightest{background-color:#ffba94 !important}.bg-red-highlight{background-color:#fff5f4 !important}.text-orange{color:#ff694b !important}.text-orange-dark{color:#ff4f39 !important}.text-orange-darker{color:#ff3c2b !important}.text-orange-darkest{color:#ff2d21 !important}.text-orange-light{color:#ff845e !important}.text-orange-lighter{color:#ffa376 !important}.text-orange-lightest{color:#ffba94 !important}.text-orange-highlight{color:#fff5f4 !important}.bg-orange{background-color:#ff694b !important}.bg-orange-dark{background-color:#ff4f39 !important}.bg-orange-darker{background-color:#ff3c2b !important}.bg-orange-darkest{background-color:#ff2d21 !important}.bg-orange-light{background-color:#ff845e !important}.bg-orange-lighter{background-color:#ffa376 !important}.bg-orange-lightest{background-color:#ffba94 !important}.bg-orange-highlight{background-color:#fff5f4 !important}.text-yellow{color:#fc0 !important}.text-yellow-dark{color:#ffc000 !important}.text-yellow-darker{color:#ffb100 !important}.text-yellow-darkest{color:#ff9e00 !important}.text-yellow-light{color:#ffd900 !important}.text-yellow-lighter{color:#ffe300 !important}.text-yellow-lightest{color:#ffea00 !important}.text-yellow-highlight{color:#fff8db !important}.bg-yellow{background-color:#fc0 !important}.bg-yellow-dark{background-color:#ffc000 !important}.bg-yellow-darker{background-color:#ffb100 !important}.bg-yellow-darkest{background-color:#ff9e00 !important}.bg-yellow-light{background-color:#ffd900 !important}.bg-yellow-lighter{background-color:#ffe300 !important}.bg-yellow-lightest{background-color:#ffea00 !important}.bg-yellow-highlight{background-color:#fff8db !important}.text-green{color:#7ec631 !important}.text-green-dark{color:#5fb825 !important}.text-green-darker{color:#48a71c !important}.text-green-darkest{color:#369115 !important}.text-green-light{color:#9ed53e !important}.text-green-lighter{color:#b7e04e !important}.text-green-lightest{color:#c9e862 !important}.text-green-highlight{color:#f3faec !important}.bg-green{background-color:#7ec631 !important}.bg-green-dark{background-color:#5fb825 !important}.bg-green-darker{background-color:#48a71c !important}.bg-green-darkest{background-color:#369115 !important}.bg-green-light{background-color:#9ed53e !important}.bg-green-lighter{background-color:#b7e04e !important}.bg-green-lightest{background-color:#c9e862 !important}.bg-green-highlight{background-color:#f3faec !important}.text-blue{color:#0bb !important}.text-blue-dark{color:#0aa !important}.text-blue-darker{color:#009595 !important}.text-blue-darkest{color:#007b7b !important}.text-blue-light{color:#0cc !important}.text-blue-lighter{color:#00d9d9 !important}.text-blue-lightest{color:#00e3e3 !important}.text-blue-highlight{color:#edfafa !important}.bg-blue{background-color:#0bb !important}.bg-blue-dark{background-color:#0aa !important}.bg-blue-darker{background-color:#009595 !important}.bg-blue-darkest{background-color:#007b7b !important}.bg-blue-light{background-color:#0cc !important}.bg-blue-lighter{background-color:#00d9d9 !important}.bg-blue-lightest{background-color:#00e3e3 !important}.bg-blue-highlight{background-color:#edfafa !important}.text-purple{color:#7f6cc5 !important}.text-purple-dark{color:#6051b7 !important}.text-purple-darker{color:#483da5 !important}.text-purple-darkest{color:#362e8f !important}.text-purple-light{color:#9f87d4 !important}.text-purple-lighter{color:#b7a5df !important}.text-purple-lightest{color:#c9bce7 !important}.text-purple-highlight{color:#f8f7fc !important}.bg-purple{background-color:#7f6cc5 !important}.bg-purple-dark{background-color:#6051b7 !important}.bg-purple-darker{background-color:#483da5 !important}.bg-purple-darkest{background-color:#362e8f !important}.bg-purple-light{background-color:#9f87d4 !important}.bg-purple-lighter{background-color:#b7a5df !important}.bg-purple-lightest{background-color:#c9bce7 !important}.bg-purple-highlight{background-color:#f8f7fc !important}.text-navy{color:#005e7a !important}.text-navy-dark{color:#00475c !important}.text-navy-darker{color:#003645 !important}.text-navy-darkest{color:#002934 !important}.text-navy-light{color:#007699 !important}.text-navy-lighter{color:#0094b3 !important}.text-navy-lightest{color:#00afc6 !important}.text-navy-highlight{color:#f4f8f9 !important}.bg-navy{background-color:#005e7a !important}.bg-navy-dark{background-color:#00475c !important}.bg-navy-darker{background-color:#003645 !important}.bg-navy-darkest{background-color:#002934 !important}.bg-navy-light{background-color:#007699 !important}.bg-navy-lighter{background-color:#0094b3 !important}.bg-navy-lightest{background-color:#00afc6 !important}.bg-navy-highlight{background-color:#f4f8f9 !important}.text-gray{color:#8b969e !important}.text-gray-dark{color:#6e7c86 !important}.text-gray-darker{color:#535d68 !important}.text-gray-darkest{color:#3f464e !important}.text-gray-light{color:#a8b1b7 !important}.text-gray-lighter{color:#bec5c9 !important}.text-gray-lightest{color:#cfd4d7 !important}.text-gray-highlight{color:#f7f7f8 !important}.bg-gray{background-color:#8b969e !important}.bg-gray-dark{background-color:#6e7c86 !important}.bg-gray-darker{background-color:#535d68 !important}.bg-gray-darkest{background-color:#3f464e !important}.bg-gray-light{background-color:#a8b1b7 !important}.bg-gray-lighter{background-color:#bec5c9 !important}.bg-gray-lightest{background-color:#cfd4d7 !important}.bg-gray-highlight{background-color:#f7f7f8 !important}.text-success{color:#5fb825 !important}.text-danger{color:#ff4f39 !important}.text-warning{color:#ff821d !important}.text-info{color:#0aa !important}.text-white{color:white !important}.text-light{color:#8b969e !important}.text-lighter{color:#bec5c9 !important}.text-dark{color:#313539 !important}.text-inherit{color:inherit}.text-inherit:hover,.text-inherit:focus{color:inherit}.text-silver{color:#f0f2f4 !important}.text-silver-light{color:#f9fafb !important}.text-silver-dark{color:#e9ebef !important}.text-silver-darker{color:#e4e6eb !important}.text-silver-darkest{color:#dee0e6 !important}.bg-silver{background-color:#f0f2f4}.bg-silver-light{background-color:#f9fafb !important}.bg-silver-dark{background-color:#e9ebef !important}.bg-silver-darker{background-color:#e4e6eb !important}.bg-silver-darkest{background-color:#dee0e6 !important}.bg-transparent{background-color:transparent !important}.faint{opacity:.5}.fainter{opacity:.3}.inherit{color:inherit}::selection{background:#0bb;color:#fff}::-moz-selection{background:#0bb;color:#fff}img{display:block;max-width:100%}[data-bg]{background:transparent no-repeat 50% 50%/cover}body{font-size:1rem;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Oxygen,Ubuntu,Cantarell,"Fira Sans","Droid Sans","Helvetica Neue",Helvetica,Arial,sans-serif;background:#f9fafb;color:#5e666c}*,dt,dd{line-height:calc(1em + .15 * (5rem - 1em));text-align:inherit}a,.a{cursor:pointer;color:#0bb;text-decoration:none}a:hover,a:focus,.a:hover,.a:focus{text-decoration:none;color:#009595}i,.i,em,.em{font-style:oblique}b,.b,strong,.strong{font-weight:bold}mark{background:#edfafa;color:#313539;padding:.1em 0;border-radius:4px}.normal{font-weight:normal !important}iframe{margin:0;display:block}label{margin:.5em 0;font-weight:normal}hr{margin:3em 0;border-top:1px solid rgba(0,30,60,0.075)}blockquote,ul,ol,p,.field,.table{margin:1.5em 0}h1,.h1,h2,.h2,h3,.h3,h4,.h4,h5,.h5,h6,.h6{margin:1.5em 0 .5em}ul,ol{padding-left:1.25em}dl dt+dd{margin-bottom:1em}blockquote{padding:0;font-size:inherit}small,.small,.text-small{font-size:.9285714286rem}h1,.h1,h2,.h2,h3,.h3,h4,.h4,h5,.h5,h6,.h6{font-weight:bold;letter-spacing:.01em}h5,.h5,h6,.h6,.text-base{font-size:1rem}h4,.h4,.text-large{font-size:1.1428571429rem}h3,.h3,.text-larger{font-size:1.2857142857rem}h1,.h1,h2,.h2,.text-largest{font-size:1.7142857143rem}.text-body{font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Oxygen,Ubuntu,Cantarell,"Fira Sans","Droid Sans","Helvetica Neue",Helvetica,Arial,sans-serif}.text-mono{font-family:"Monaco",monospace;font-size:.8571428571rem !important}.text-smallcaps{font-size:10px;text-transform:uppercase;letter-spacing:.1em;color:#8b969e;font-weight:bold;font-style:normal}.text-left{text-align:left !important}.text-right{text-align:right !important}.text-center{text-align:center !important}@media (min-width: 961px){.text-center-large{text-align:center !important}.text-right-large{text-align:right !important}.text-left-large{text-align:left !important}}@media (max-width: 960px){.text-center-small{text-align:center !important}.text-right-small{text-align:right !important}.text-left-small{text-align:left !important}}@media (min-width: 401px){.nowrap{white-space:nowrap}}.condensed{white-space:nowrap;width:1px}.ellipsis{width:100%;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.wrap{white-space:normal}.break{word-break:break-word}.buffer,.card,.title,.tokens,.settings{margin-top:20px;margin-bottom:20px}*:first-child{margin-top:0}*:last-child{margin-bottom:0}.margin-right{margin-right:.75em !important}.margin-left{margin-left:.75em !important}.margin-right-small{margin-right:.375em !important}.margin-left-small{margin-left:.375em !important}.icn{font-size:16px;top:-1px;width:1em;height:1em;margin:auto;display:inline-block;vertical-align:middle;-webkit-backface-visibility:hidden;-webkit-transform:translateZ(0);transform:translateZ(0)}.icn use{fill:currentColor}.icn-md{width:1.5em;height:1.5em;-webkit-transform:scale(1.5);transform:scale(1.5);-webkit-transform-origin:0 0;transform-origin:0 0}.icn-lg{width:2em;height:2em;-webkit-transform:scale(2);transform:scale(2);-webkit-transform-origin:0 0;transform-origin:0 0}.glyph{top:-1px;margin:auto;font-size:24px;display:inline-block;vertical-align:middle;transform:translate(0, 0);width:1em;height:1em}.glyph use{fill:none;stroke-width:2;stroke:currentColor;stroke-linecap:round;stroke-linejoin:round;transform-origin:0 0;shape-rendering:geometricPrecision}.glyph-solid use{fill:currentColor;stroke-width:0 !important}.glyph-middle,.btn .glyph{margin-top:-10px;margin-bottom:-8px}.glyph-before{margin-right:.25em;margin-left:-.125em}.glyph-after{margin-left:.25em;margin-right:-.125em}.glyph-sm{font-size:16px}.glyph-sm use{stroke-width:3}@media (-webkit-min-device-pixel-ratio: 1.25), (min-device-pixel-ratio: 1.25){.glyph-sm use{stroke-width:2.25}}.glyph-md{font-size:36px}.glyph-md use{stroke-width:1.3333333333}@media (-webkit-min-device-pixel-ratio: 1.25), (min-device-pixel-ratio: 1.25){.glyph-md use{stroke-width:1}}.glyph-lg{font-size:48px}.glyph-lg use{stroke-width:1}@media (-webkit-min-device-pixel-ratio: 1.25), (min-device-pixel-ratio: 1.25){.glyph-lg use{stroke-width:.75}}.glyph-xl{font-size:72px}.glyph-xl use{stroke-width:.6666666667}@media (-webkit-min-device-pixel-ratio: 1.25), (min-device-pixel-ratio: 1.25){.glyph-xl use{stroke-width:.5}}.glyph-check,.glyph-radio{font-size:18px;border:2px solid currentColor;opacity:.25}.glyph-check use,.glyph-radio use{opacity:0}:hover>.glyph-check,:focus ~ .glyph-check,:hover>.glyph-radio,:focus ~ .glyph-radio{opacity:.5}:checked ~ .glyph-check,:disabled ~ .glyph-check,[type="checkbox"]:indeterminate ~ .glyph-check,:checked ~ .glyph-radio,:disabled ~ .glyph-radio,[type="checkbox"]:indeterminate ~ .glyph-radio{border-color:transparent !important}:checked ~ .glyph-check,[type="checkbox"]:indeterminate ~ .glyph-check,:checked ~ .glyph-radio,[type="checkbox"]:indeterminate ~ .glyph-radio{opacity:1;background:#0bb}:checked ~ .glyph-check use,[type="checkbox"]:indeterminate ~ .glyph-check use,:checked ~ .glyph-radio use,[type="checkbox"]:indeterminate ~ .glyph-radio use{opacity:1;color:white}:checked:hover ~ .glyph-check,:checked:focus ~ .glyph-check,[type="checkbox"]:indeterminate:hover ~ .glyph-check,[type="checkbox"]:indeterminate:focus ~ .glyph-check,:hover>:checked ~ .glyph-check,:focus>:checked ~ .glyph-check,:checked:hover ~ .glyph-radio,:checked:focus ~ .glyph-radio,[type="checkbox"]:indeterminate:hover ~ .glyph-radio,[type="checkbox"]:indeterminate:focus ~ .glyph-radio,:hover>:checked ~ .glyph-radio,:focus>:checked ~ .glyph-radio{background:#009595}[type="checkbox"]:indeterminate ~ .glyph-check use,[type="checkbox"]:indeterminate ~ .glyph-radio use{fill:currentColor;stroke:transparent}:disabled ~ .glyph-check,:checked:disabled ~ .glyph-check,[type="checkbox"]:indeterminate:disabled ~ .glyph-check,:disabled ~ .glyph-radio,:checked:disabled ~ .glyph-radio,[type="checkbox"]:indeterminate:disabled ~ .glyph-radio{opacity:.5;background:#dee0e6;color:inherit}:disabled ~ .glyph-check use,:checked:disabled ~ .glyph-check use,[type="checkbox"]:indeterminate:disabled ~ .glyph-check use,:disabled ~ .glyph-radio use,:checked:disabled ~ .glyph-radio use,[type="checkbox"]:indeterminate:disabled ~ .glyph-radio use{color:inherit}.glyph-radio{border-radius:50%}.glyph-radio use{fill:currentColor}.glyph-check{border-radius:4px}select:not([multiple]).form-control{background-size:.75em .75em;background-repeat:no-repeat;background-image:url('+r(n(215))+');background-position:calc( 100% - .875em ) 50%;padding-top:0;padding-bottom:0;padding-right:2.25em}select:not([multiple]).form-control::-ms-value{background:transparent !important}.bootstrap-select button{background-repeat:no-repeat;background-size:auto 1em;background-position:calc(100% - 1.25rem + 5px) 50%;background-image:url("data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgdmlld0JveD0iMCAwIDE2IDE2Ij48cG9seWxpbmUgcG9pbnRzPSI0LjUgNiA4IDkuNSAxMS41IDYiIGZpbGw9Im5vbmUiIHN0cm9rZT0iIzAwOTRiMyIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIiBzdHJva2UtbGluZWpvaW49InJvdW5kIiAvPjxyZWN0IHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgZmlsbD0ibm9uZSIvPjwvc3ZnPg==");padding-right:2em !important;-moz-appearance:none}.bootstrap-select button.input-sm,.bootstrap-select .input-group-sm>button.form-control,.bootstrap-select .input-group-sm>button.input-group-addon,.bootstrap-select .input-group-sm>.input-group-btn>button.btn,.bootstrap-select button.sm{background-position:calc(100% - .875rem + 5px) 50%}.bootstrap-select button.input-lg,.bootstrap-select .input-group-lg>button.form-control,.bootstrap-select .input-group-lg>button.input-group-addon,.bootstrap-select .input-group-lg>.input-group-btn>button.btn,.bootstrap-select button.lg{background-position:calc(100% - 1.875rem + 5px) 50%}.bootstrap-select button::-ms-expand{display:none}.btn input,.form-control input,.option input{position:absolute;opacity:0}.option{margin:0}.option:not(.input-group-addon){padding-left:0 !important}.option-flush{padding-left:0 !important;padding-right:0 !important}.option.input-group-addon{padding-left:.875rem;padding-right:.875rem}.option .glyph{margin-right:.375em}/*! jQuery UI - v1.12.1 - 2017-01-20\n* http://jqueryui.com\n* Copyright jQuery Foundation and other contributors; Licensed MIT */.ui-draggable-handle{-ms-touch-action:none;touch-action:none}.ui-helper-hidden{display:none}.ui-helper-hidden-accessible{border:0;clip:rect(0 0 0 0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px}.ui-helper-reset{margin:0;padding:0;border:0;outline:0;line-height:1.3;text-decoration:none;font-size:100%;list-style:none}.ui-helper-clearfix:before,.ui-helper-clearfix:after{content:"";display:table;border-collapse:collapse}.ui-helper-clearfix:after{clear:both}.ui-helper-zfix{width:100%;height:100%;top:0;left:0;position:absolute;opacity:0;filter:Alpha(Opacity=0)}.ui-front{z-index:100}.ui-state-disabled{cursor:default !important;pointer-events:none}.ui-icon{display:inline-block;vertical-align:middle;margin-top:-.25em;position:relative;text-indent:-99999px;overflow:hidden;background-repeat:no-repeat}.ui-widget-icon-block{left:50%;margin-left:-8px;display:block}.ui-widget-overlay{position:fixed;top:0;left:0;width:100%;height:100%}.ui-resizable{position:relative}.ui-resizable-handle{position:absolute;font-size:0.1px;display:block;-ms-touch-action:none;touch-action:none}.ui-resizable-disabled .ui-resizable-handle,.ui-resizable-autohide .ui-resizable-handle{display:none}.ui-resizable-n{cursor:n-resize;height:7px;width:100%;top:-5px;left:0}.ui-resizable-s{cursor:s-resize;height:7px;width:100%;bottom:-5px;left:0}.ui-resizable-e{cursor:e-resize;width:7px;right:-5px;top:0;height:100%}.ui-resizable-w{cursor:w-resize;width:7px;left:-5px;top:0;height:100%}.ui-resizable-se{cursor:se-resize;width:12px;height:12px;right:1px;bottom:1px}.ui-resizable-sw{cursor:sw-resize;width:9px;height:9px;left:-5px;bottom:-5px}.ui-resizable-nw{cursor:nw-resize;width:9px;height:9px;left:-5px;top:-5px}.ui-resizable-ne{cursor:ne-resize;width:9px;height:9px;right:-5px;top:-5px}.ui-selectable{-ms-touch-action:none;touch-action:none}.ui-selectable-helper{position:absolute;z-index:100;border:1px dotted black}.ui-sortable-handle{-ms-touch-action:none;touch-action:none}.ui-accordion .ui-accordion-header{display:block;cursor:pointer;position:relative;margin:2px 0 0 0;padding:.5em .5em .5em .7em;font-size:100%}.ui-accordion .ui-accordion-content{padding:1em 2.2em;border-top:0;overflow:auto}.ui-autocomplete{position:absolute;top:0;left:0;cursor:default}.ui-menu{list-style:none;padding:0;margin:0;display:block;outline:0}.ui-menu .ui-menu{position:absolute}.ui-menu .ui-menu-item{margin:0;cursor:pointer;list-style-image:url("data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7")}.ui-menu .ui-menu-item-wrapper{position:relative;padding:3px 1em 3px .4em}.ui-menu .ui-menu-divider{margin:5px 0;height:0;font-size:0;line-height:0;border-width:1px 0 0 0}.ui-menu .ui-state-focus,.ui-menu .ui-state-active{margin:-1px}.ui-menu-icons{position:relative}.ui-menu-icons .ui-menu-item-wrapper{padding-left:2em}.ui-menu .ui-icon{position:absolute;top:0;bottom:0;left:.2em;margin:auto 0}.ui-menu .ui-menu-icon{left:auto;right:0}.ui-button{padding:.4em 1em;display:inline-block;position:relative;line-height:normal;margin-right:.1em;cursor:pointer;vertical-align:middle;text-align:center;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;overflow:visible}.ui-button,.ui-button:link,.ui-button:visited,.ui-button:hover,.ui-button:active{text-decoration:none}.ui-button-icon-only{width:2em;box-sizing:border-box;text-indent:-9999px;white-space:nowrap}input.ui-button.ui-button-icon-only{text-indent:0}.ui-button-icon-only .ui-icon{position:absolute;top:50%;left:50%;margin-top:-8px;margin-left:-8px}.ui-button.ui-icon-notext .ui-icon{padding:0;width:2.1em;height:2.1em;text-indent:-9999px;white-space:nowrap}input.ui-button.ui-icon-notext .ui-icon{width:auto;height:auto;text-indent:0;white-space:normal;padding:.4em 1em}input.ui-button::-moz-focus-inner,button.ui-button::-moz-focus-inner{border:0;padding:0}.ui-controlgroup{vertical-align:middle;display:inline-block}.ui-controlgroup>.ui-controlgroup-item{float:left;margin-left:0;margin-right:0}.ui-controlgroup>.ui-controlgroup-item:focus,.ui-controlgroup>.ui-controlgroup-item.ui-visual-focus{z-index:9999}.ui-controlgroup-vertical>.ui-controlgroup-item{display:block;float:none;width:100%;margin-top:0;margin-bottom:0;text-align:left}.ui-controlgroup-vertical .ui-controlgroup-item{box-sizing:border-box}.ui-controlgroup .ui-controlgroup-label{padding:.4em 1em}.ui-controlgroup .ui-controlgroup-label span{font-size:80%}.ui-controlgroup-horizontal .ui-controlgroup-label+.ui-controlgroup-item{border-left:none}.ui-controlgroup-vertical .ui-controlgroup-label+.ui-controlgroup-item{border-top:none}.ui-controlgroup-horizontal .ui-controlgroup-label.ui-widget-content{border-right:none}.ui-controlgroup-vertical .ui-controlgroup-label.ui-widget-content{border-bottom:none}.ui-controlgroup-vertical .ui-spinner-input{width:75%;width:calc( 100% - 2.4em )}.ui-controlgroup-vertical .ui-spinner .ui-spinner-up{border-top-style:solid}.ui-checkboxradio-label .ui-icon-background{box-shadow:inset 1px 1px 1px #ccc;border-radius:.12em;border:none}.ui-checkboxradio-radio-label .ui-icon-background{width:16px;height:16px;border-radius:1em;overflow:visible;border:none}.ui-checkboxradio-radio-label.ui-checkboxradio-checked .ui-icon,.ui-checkboxradio-radio-label.ui-checkboxradio-checked:hover .ui-icon{background-image:none;width:8px;height:8px;border-width:4px;border-style:solid}.ui-checkboxradio-disabled{pointer-events:none}.ui-datepicker{width:17em;padding:.2em .2em 0;display:none}.ui-datepicker .ui-datepicker-header{position:relative;padding:.2em 0}.ui-datepicker .ui-datepicker-prev,.ui-datepicker .ui-datepicker-next{position:absolute;top:2px;width:1.8em;height:1.8em}.ui-datepicker .ui-datepicker-prev-hover,.ui-datepicker .ui-datepicker-next-hover{top:1px}.ui-datepicker .ui-datepicker-prev{left:2px}.ui-datepicker .ui-datepicker-next{right:2px}.ui-datepicker .ui-datepicker-prev-hover{left:1px}.ui-datepicker .ui-datepicker-next-hover{right:1px}.ui-datepicker .ui-datepicker-prev span,.ui-datepicker .ui-datepicker-next span{display:block;position:absolute;left:50%;margin-left:-8px;top:50%;margin-top:-8px}.ui-datepicker .ui-datepicker-title{margin:0 2.3em;line-height:1.8em;text-align:center}.ui-datepicker .ui-datepicker-title select{font-size:1em;margin:1px 0}.ui-datepicker select.ui-datepicker-month,.ui-datepicker select.ui-datepicker-year{width:45%}.ui-datepicker table{width:100%;font-size:.9em;border-collapse:collapse;margin:0 0 .4em}.ui-datepicker th{padding:.7em .3em;text-align:center;font-weight:bold;border:0}.ui-datepicker td{border:0;padding:1px}.ui-datepicker td span,.ui-datepicker td a{display:block;padding:.2em;text-align:right;text-decoration:none}.ui-datepicker .ui-datepicker-buttonpane{background-image:none;margin:.7em 0 0 0;padding:0 .2em;border-left:0;border-right:0;border-bottom:0}.ui-datepicker .ui-datepicker-buttonpane button{float:right;margin:.5em .2em .4em;cursor:pointer;padding:.2em .6em .3em .6em;width:auto;overflow:visible}.ui-datepicker .ui-datepicker-buttonpane button.ui-datepicker-current{float:left}.ui-datepicker.ui-datepicker-multi{width:auto}.ui-datepicker-multi .ui-datepicker-group{float:left}.ui-datepicker-multi .ui-datepicker-group table{width:95%;margin:0 auto .4em}.ui-datepicker-multi-2 .ui-datepicker-group{width:50%}.ui-datepicker-multi-3 .ui-datepicker-group{width:33.3%}.ui-datepicker-multi-4 .ui-datepicker-group{width:25%}.ui-datepicker-multi .ui-datepicker-group-last .ui-datepicker-header,.ui-datepicker-multi .ui-datepicker-group-middle .ui-datepicker-header{border-left-width:0}.ui-datepicker-multi .ui-datepicker-buttonpane{clear:left}.ui-datepicker-row-break{clear:both;width:100%;font-size:0}.ui-datepicker-rtl{direction:rtl}.ui-datepicker-rtl .ui-datepicker-prev{right:2px;left:auto}.ui-datepicker-rtl .ui-datepicker-next{left:2px;right:auto}.ui-datepicker-rtl .ui-datepicker-prev:hover{right:1px;left:auto}.ui-datepicker-rtl .ui-datepicker-next:hover{left:1px;right:auto}.ui-datepicker-rtl .ui-datepicker-buttonpane{clear:right}.ui-datepicker-rtl .ui-datepicker-buttonpane button{float:left}.ui-datepicker-rtl .ui-datepicker-buttonpane button.ui-datepicker-current,.ui-datepicker-rtl .ui-datepicker-group{float:right}.ui-datepicker-rtl .ui-datepicker-group-last .ui-datepicker-header,.ui-datepicker-rtl .ui-datepicker-group-middle .ui-datepicker-header{border-right-width:0;border-left-width:1px}.ui-datepicker .ui-icon{display:block;text-indent:-99999px;overflow:hidden;background-repeat:no-repeat;left:.5em;top:.3em}.ui-dialog{position:absolute;top:0;left:0;padding:.2em;outline:0}.ui-dialog .ui-dialog-titlebar{padding:.4em 1em;position:relative}.ui-dialog .ui-dialog-title{float:left;margin:.1em 0;white-space:nowrap;width:90%;overflow:hidden;text-overflow:ellipsis}.ui-dialog .ui-dialog-titlebar-close{position:absolute;right:.3em;top:50%;width:20px;margin:-10px 0 0 0;padding:1px;height:20px}.ui-dialog .ui-dialog-content{position:relative;border:0;padding:.5em 1em;background:none;overflow:auto}.ui-dialog .ui-dialog-buttonpane{text-align:left;border-width:1px 0 0 0;background-image:none;margin-top:.5em;padding:.3em 1em .5em .4em}.ui-dialog .ui-dialog-buttonpane .ui-dialog-buttonset{float:right}.ui-dialog .ui-dialog-buttonpane button{margin:.5em .4em .5em 0;cursor:pointer}.ui-dialog .ui-resizable-n{height:2px;top:0}.ui-dialog .ui-resizable-e{width:2px;right:0}.ui-dialog .ui-resizable-s{height:2px;bottom:0}.ui-dialog .ui-resizable-w{width:2px;left:0}.ui-dialog .ui-resizable-se,.ui-dialog .ui-resizable-sw,.ui-dialog .ui-resizable-ne,.ui-dialog .ui-resizable-nw{width:7px;height:7px}.ui-dialog .ui-resizable-se{right:0;bottom:0}.ui-dialog .ui-resizable-sw{left:0;bottom:0}.ui-dialog .ui-resizable-ne{right:0;top:0}.ui-dialog .ui-resizable-nw{left:0;top:0}.ui-draggable .ui-dialog-titlebar{cursor:move}.ui-progressbar{height:2em;text-align:left;overflow:hidden}.ui-progressbar .ui-progressbar-value{margin:-1px;height:100%}.ui-progressbar .ui-progressbar-overlay{background:url("data:image/gif;base64,R0lGODlhKAAoAIABAAAAAP///yH/C05FVFNDQVBFMi4wAwEAAAAh+QQJAQABACwAAAAAKAAoAAACkYwNqXrdC52DS06a7MFZI+4FHBCKoDeWKXqymPqGqxvJrXZbMx7Ttc+w9XgU2FB3lOyQRWET2IFGiU9m1frDVpxZZc6bfHwv4c1YXP6k1Vdy292Fb6UkuvFtXpvWSzA+HycXJHUXiGYIiMg2R6W459gnWGfHNdjIqDWVqemH2ekpObkpOlppWUqZiqr6edqqWQAAIfkECQEAAQAsAAAAACgAKAAAApSMgZnGfaqcg1E2uuzDmmHUBR8Qil95hiPKqWn3aqtLsS18y7G1SzNeowWBENtQd+T1JktP05nzPTdJZlR6vUxNWWjV+vUWhWNkWFwxl9VpZRedYcflIOLafaa28XdsH/ynlcc1uPVDZxQIR0K25+cICCmoqCe5mGhZOfeYSUh5yJcJyrkZWWpaR8doJ2o4NYq62lAAACH5BAkBAAEALAAAAAAoACgAAAKVDI4Yy22ZnINRNqosw0Bv7i1gyHUkFj7oSaWlu3ovC8GxNso5fluz3qLVhBVeT/Lz7ZTHyxL5dDalQWPVOsQWtRnuwXaFTj9jVVh8pma9JjZ4zYSj5ZOyma7uuolffh+IR5aW97cHuBUXKGKXlKjn+DiHWMcYJah4N0lYCMlJOXipGRr5qdgoSTrqWSq6WFl2ypoaUAAAIfkECQEAAQAsAAAAACgAKAAAApaEb6HLgd/iO7FNWtcFWe+ufODGjRfoiJ2akShbueb0wtI50zm02pbvwfWEMWBQ1zKGlLIhskiEPm9R6vRXxV4ZzWT2yHOGpWMyorblKlNp8HmHEb/lCXjcW7bmtXP8Xt229OVWR1fod2eWqNfHuMjXCPkIGNileOiImVmCOEmoSfn3yXlJWmoHGhqp6ilYuWYpmTqKUgAAIfkECQEAAQAsAAAAACgAKAAAApiEH6kb58biQ3FNWtMFWW3eNVcojuFGfqnZqSebuS06w5V80/X02pKe8zFwP6EFWOT1lDFk8rGERh1TTNOocQ61Hm4Xm2VexUHpzjymViHrFbiELsefVrn6XKfnt2Q9G/+Xdie499XHd2g4h7ioOGhXGJboGAnXSBnoBwKYyfioubZJ2Hn0RuRZaflZOil56Zp6iioKSXpUAAAh+QQJAQABACwAAAAAKAAoAAACkoQRqRvnxuI7kU1a1UU5bd5tnSeOZXhmn5lWK3qNTWvRdQxP8qvaC+/yaYQzXO7BMvaUEmJRd3TsiMAgswmNYrSgZdYrTX6tSHGZO73ezuAw2uxuQ+BbeZfMxsexY35+/Qe4J1inV0g4x3WHuMhIl2jXOKT2Q+VU5fgoSUI52VfZyfkJGkha6jmY+aaYdirq+lQAACH5BAkBAAEALAAAAAAoACgAAAKWBIKpYe0L3YNKToqswUlvznigd4wiR4KhZrKt9Upqip61i9E3vMvxRdHlbEFiEXfk9YARYxOZZD6VQ2pUunBmtRXo1Lf8hMVVcNl8JafV38aM2/Fu5V16Bn63r6xt97j09+MXSFi4BniGFae3hzbH9+hYBzkpuUh5aZmHuanZOZgIuvbGiNeomCnaxxap2upaCZsq+1kAACH5BAkBAAEALAAAAAAoACgAAAKXjI8By5zf4kOxTVrXNVlv1X0d8IGZGKLnNpYtm8Lr9cqVeuOSvfOW79D9aDHizNhDJidFZhNydEahOaDH6nomtJjp1tutKoNWkvA6JqfRVLHU/QUfau9l2x7G54d1fl995xcIGAdXqMfBNadoYrhH+Mg2KBlpVpbluCiXmMnZ2Sh4GBqJ+ckIOqqJ6LmKSllZmsoq6wpQAAAh+QQJAQABACwAAAAAKAAoAAAClYx/oLvoxuJDkU1a1YUZbJ59nSd2ZXhWqbRa2/gF8Gu2DY3iqs7yrq+xBYEkYvFSM8aSSObE+ZgRl1BHFZNr7pRCavZ5BW2142hY3AN/zWtsmf12p9XxxFl2lpLn1rseztfXZjdIWIf2s5dItwjYKBgo9yg5pHgzJXTEeGlZuenpyPmpGQoKOWkYmSpaSnqKileI2FAAACH5BAkBAAEALAAAAAAoACgAAAKVjB+gu+jG4kORTVrVhRlsnn2dJ3ZleFaptFrb+CXmO9OozeL5VfP99HvAWhpiUdcwkpBH3825AwYdU8xTqlLGhtCosArKMpvfa1mMRae9VvWZfeB2XfPkeLmm18lUcBj+p5dnN8jXZ3YIGEhYuOUn45aoCDkp16hl5IjYJvjWKcnoGQpqyPlpOhr3aElaqrq56Bq7VAAAOw==");height:100%;filter:alpha(opacity=25);opacity:0.25}.ui-progressbar-indeterminate .ui-progressbar-value{background-image:none}.ui-selectmenu-menu{padding:0;margin:0;position:absolute;top:0;left:0;display:none}.ui-selectmenu-menu .ui-menu{overflow:auto;overflow-x:hidden;padding-bottom:1px}.ui-selectmenu-menu .ui-menu .ui-selectmenu-optgroup{font-size:1em;font-weight:bold;line-height:1.5;padding:2px 0.4em;margin:0.5em 0 0 0;height:auto;border:0}.ui-selectmenu-open{display:block}.ui-selectmenu-text{display:block;margin-right:20px;overflow:hidden;text-overflow:ellipsis}.ui-selectmenu-button.ui-button{text-align:left;white-space:nowrap;width:14em}.ui-selectmenu-icon.ui-icon{float:right;margin-top:0}.ui-slider{position:relative;text-align:left}.ui-slider .ui-slider-handle{position:absolute;z-index:2;width:1.2em;height:1.2em;cursor:default;-ms-touch-action:none;touch-action:none}.ui-slider .ui-slider-range{position:absolute;z-index:1;font-size:.7em;display:block;border:0;background-position:0 0}.ui-slider.ui-state-disabled .ui-slider-handle,.ui-slider.ui-state-disabled .ui-slider-range{filter:inherit}.ui-slider-horizontal{height:.8em}.ui-slider-horizontal .ui-slider-handle{top:-.3em;margin-left:-.6em}.ui-slider-horizontal .ui-slider-range{top:0;height:100%}.ui-slider-horizontal .ui-slider-range-min{left:0}.ui-slider-horizontal .ui-slider-range-max{right:0}.ui-slider-vertical{width:.8em;height:100px}.ui-slider-vertical .ui-slider-handle{left:-.3em;margin-left:0;margin-bottom:-.6em}.ui-slider-vertical .ui-slider-range{left:0;width:100%}.ui-slider-vertical .ui-slider-range-min{bottom:0}.ui-slider-vertical .ui-slider-range-max{top:0}.ui-spinner{position:relative;display:inline-block;overflow:hidden;padding:0;vertical-align:middle}.ui-spinner-input{border:none;background:none;color:inherit;padding:.222em 0;margin:.2em 0;vertical-align:middle;margin-left:.4em;margin-right:2em}.ui-spinner-button{width:1.6em;height:50%;font-size:.5em;padding:0;margin:0;text-align:center;position:absolute;cursor:default;display:block;overflow:hidden;right:0}.ui-spinner a.ui-spinner-button{border-top-style:none;border-bottom-style:none;border-right-style:none}.ui-spinner-up{top:0}.ui-spinner-down{bottom:0}.ui-tabs{position:relative;padding:.2em}.ui-tabs .ui-tabs-nav{margin:0;padding:.2em .2em 0}.ui-tabs .ui-tabs-nav li{list-style:none;float:left;position:relative;top:0;margin:1px .2em 0 0;border-bottom-width:0;padding:0;white-space:nowrap}.ui-tabs .ui-tabs-nav .ui-tabs-anchor{float:left;padding:.5em 1em;text-decoration:none}.ui-tabs .ui-tabs-nav li.ui-tabs-active{margin-bottom:-1px;padding-bottom:1px}.ui-tabs .ui-tabs-nav li.ui-tabs-active .ui-tabs-anchor,.ui-tabs .ui-tabs-nav li.ui-state-disabled .ui-tabs-anchor,.ui-tabs .ui-tabs-nav li.ui-tabs-loading .ui-tabs-anchor{cursor:text}.ui-tabs-collapsible .ui-tabs-nav li.ui-tabs-active .ui-tabs-anchor{cursor:pointer}.ui-tabs .ui-tabs-panel{display:block;border-width:0;padding:1em 1.4em;background:none}.ui-widget{font-size:1rem;box-shadow:0 0 0 1px rgba(0,30,60,0.03),0 20px 20px -10px rgba(0,0,0,0.2);background:#fff;border-radius:4px;z-index:1050 !important;border-width:0}.ui-widget .ui-state-active,.ui-widget .ui-state-focus{margin:0;background:#0bb}.ui-widget .ui-state-active,.ui-widget .ui-state-active *,.ui-widget .ui-state-focus,.ui-widget .ui-state-focus *{color:#fff}.ui-widget.ui-datepicker{padding-left:10px;padding-right:10px;-webkit-transition:all 0.1875s cubic-bezier(0.25, 0, 0, 1.375);-o-transition:all 0.1875s cubic-bezier(0.25, 0, 0, 1.375);transition:all 0.1875s cubic-bezier(0.25, 0, 0, 1.375);-webkit-transform:scale(0.75);transform:scale(0.75);-webkit-transition-property:opacity, -webkit-transform;transition-property:opacity, transform}.ui-widget.ui-datepicker.ui-widget-active{-webkit-transform:scale(1);transform:scale(1);-webkit-transform-origin:50% 0;transform-origin:50% 0}.ui-widget.ui-datepicker .ui-datepicker-prev{top:2px !important;left:2px !important}.ui-widget.ui-datepicker .ui-datepicker-next{top:2px !important;right:2px !important}.ui-widget.ui-datepicker .ui-datepicker-month{font-weight:bold}.ui-widget.ui-datepicker tr>* a{text-align:center}.ui-widget.ui-datepicker td a{padding:.3em}.ui-widget.ui-autocomplete{padding:5px 0;max-height:240px;overflow:auto}.ui-widget.ui-autocomplete li{border:0;padding:0}.ui-widget.ui-autocomplete li .ui-menu-item-wrapper{padding:.4464285714rem 1.25rem}.ui-widget.ui-autocomplete li *{margin-top:0;margin-bottom:0}.ui-widget.ui-autocomplete li+li.ui-separator{margin-top:5px;padding-top:6px;border-top:1px solid rgba(0,30,60,0.075)}.ui-widget .ui-icon{overflow:visible}.ui-widget .ui-icon-circle-triangle-w:after,.ui-widget .ui-icon-circle-triangle-e:after{content:\'\';display:block;border:5px solid;border-top-color:transparent;border-bottom-color:transparent;position:absolute;width:0;height:0;top:5px;left:0}.ui-widget .ui-icon-circle-triangle-w:after{border-left-color:transparent}.ui-widget .ui-icon-circle-triangle-e:after{border-right-color:transparent;left:5px}.ui-sortable-handle,.ui-draggable-handle{cursor:move}tr.ui-sortable-helper{box-shadow:0 7px 10px rgba(0,0,0,0.2);border-radius:4px;display:table;z-index:2}tr.ui-sortable-helper>td,tr.ui-sortable-helper th{border:0 !important}tr.ui-sortable-helper>td:first-child,tr.ui-sortable-helper th:first-child{border-top-left-radius:4px;border-bottom-left-radius:4px}tr.ui-sortable-helper>td:last-child,tr.ui-sortable-helper th:last-child{border-top-right-radius:4px;border-bottom-right-radius:4px}.ui-draggable-dragging,.ui-sortable-sorting{z-index:5001 !important}.ui-resizable-n,.ui-resizable-s{cursor:ns-resize}.ui-resizable-e,.ui-resizable-w{cursor:ew-resize}.caret,.dropup .caret,.navbar-fixed-bottom .dropdown .caret{border:0 !important;margin-left:0;width:auto;height:auto;display:inline}.caret:after,.dropup .caret:after,.navbar-fixed-bottom .dropdown .caret:after{font-family:"arrows";text-transform:none;font-style:normal;font-weight:normal;line-height:.5;content:" c "}.dropdown-menu{-webkit-transform:scale(0.75);transform:scale(0.75);-webkit-transform-origin:50% 0;transform-origin:50% 0;-webkit-transition:all 0.1875s cubic-bezier(0.25, 0, 0, 1.375);-o-transition:all 0.1875s cubic-bezier(0.25, 0, 0, 1.375);transition:all 0.1875s cubic-bezier(0.25, 0, 0, 1.375);font-size:1rem;box-shadow:0 0 0 1px rgba(0,30,60,0.03),0 20px 20px -10px rgba(0,0,0,0.2);border-radius:4px !important;-webkit-transition-property:opacity, -webkit-transform;transition-property:opacity, transform;padding:5px 0 !important;pointer-events:none;font-style:normal;border-width:0;display:block;left:-9999px;max-height:50vh;min-width:100%;max-width:240px;overflow:auto;opacity:0;margin:0}.dropdown-menu>li>a{margin:0;display:block;padding:.25em 15px}.dropdown-menu>li>a>*{margin:0}.dropdown-menu>li>a em{font-style:oblique;color:#8b969e}.dropdown-menu>li>a [data-icon]{margin-right:.25em}.dropdown-menu .divider{margin:5px 0}.dropdown-menu .dropdown-header{text-transform:uppercase;letter-spacing:.15em;font-size:.75rem;font-weight:500;padding:.5em 15px !important}.dropdown-menu-lg>li>*{padding-top:.5em;padding-bottom:.5em}.dropdown-menu-right{left:auto;right:9999px}.dropdown.open>.dropdown-menu{pointer-events:auto;-webkit-transform:scale(1);transform:scale(1);opacity:1;left:0}.dropdown.open>.dropdown-menu-right{right:0;left:auto}.dropdown{cursor:pointer}.dropdown-inline{display:inline-block}.form-group>*:not(:last-child),.form-inline>*:not(:last-child){margin-right:1em}.form-horizontal .form-group>*:not(:last-child),.form-horizontal .form-inline>*:not(:last-child){margin-right:0}.form-group>* label,.form-inline>* label{vertical-align:middle;margin:.6785714286rem 0}.help-block{display:block;color:#8b969e;font-style:oblique;font-weight:normal;font-size:.9285714286rem;margin:.25em 0}.help-block:empty{display:none}.help-block p{margin:0;display:inline}.help-block-inline{display:inline}.form-group-lg{font-size:1.1428571429rem}.form-footer{margin:2em 0}.form-footer:first-child{margin-top:0}.form-footer:last-child{margin-bottom:0}.btn{border-width:0;margin:0;cursor:pointer;overflow:hidden;text-overflow:ellipsis;font-size:1rem;-webkit-transition:all .25s cubic-bezier(0.25, 0, 0, 1);-o-transition:all .25s cubic-bezier(0.25, 0, 0, 1);transition:all .25s cubic-bezier(0.25, 0, 0, 1);height:2.8571428571rem;line-height:1.5 !important;font-weight:bold;box-shadow:0 0 0 1px rgba(0,30,60,0.03),0 3px 3px -1.5px rgba(0,0,0,0.03)}.btn-red{color:#fff;background-color:#ff694b;border-color:#ff694b}.btn-red:focus,.btn-red.focus{color:#fff;background-color:#ff3c2b}.btn-red:hover{color:#fff;background-color:#ff3c2b}.btn-red:active,.btn-red.active,.open>.btn-red.dropdown-toggle{color:#fff;background-color:#ff3c2b}.btn-red:active:hover,.btn-red:active:focus,.btn-red:active.focus,.btn-red.active:hover,.btn-red.active:focus,.btn-red.active.focus,.open>.btn-red.dropdown-toggle:hover,.open>.btn-red.dropdown-toggle:focus,.open>.btn-red.dropdown-toggle.focus{color:#fff;background-color:#ff3c2b}.btn-red:active,.btn-red.active,.open>.btn-red.dropdown-toggle{background-image:none}.btn-red.disabled:hover,.btn-red.disabled:focus,.btn-red.disabled.focus,.btn-red[disabled]:hover,.btn-red[disabled]:focus,.btn-red[disabled].focus,fieldset[disabled] .btn-red:hover,fieldset[disabled] .btn-red:focus,fieldset[disabled] .btn-red.focus{background-color:#ff694b;border-color:#ff694b}.btn-red .badge{color:#ff694b;background-color:#fff}.btn-blue{color:#fff;background-color:#0bb;border-color:#0bb}.btn-blue:focus,.btn-blue.focus{color:#fff;background-color:#009595}.btn-blue:hover{color:#fff;background-color:#009595}.btn-blue:active,.btn-blue.active,.open>.btn-blue.dropdown-toggle{color:#fff;background-color:#009595}.btn-blue:active:hover,.btn-blue:active:focus,.btn-blue:active.focus,.btn-blue.active:hover,.btn-blue.active:focus,.btn-blue.active.focus,.open>.btn-blue.dropdown-toggle:hover,.open>.btn-blue.dropdown-toggle:focus,.open>.btn-blue.dropdown-toggle.focus{color:#fff;background-color:#009595}.btn-blue:active,.btn-blue.active,.open>.btn-blue.dropdown-toggle{background-image:none}.btn-blue.disabled:hover,.btn-blue.disabled:focus,.btn-blue.disabled.focus,.btn-blue[disabled]:hover,.btn-blue[disabled]:focus,.btn-blue[disabled].focus,fieldset[disabled] .btn-blue:hover,fieldset[disabled] .btn-blue:focus,fieldset[disabled] .btn-blue.focus{background-color:#0bb;border-color:#0bb}.btn-blue .badge{color:#0bb;background-color:#fff}.btn-navy{color:#fff;background-color:#005e7a;border-color:#005e7a}.btn-navy:focus,.btn-navy.focus{color:#fff;background-color:#003645}.btn-navy:hover{color:#fff;background-color:#003645}.btn-navy:active,.btn-navy.active,.open>.btn-navy.dropdown-toggle{color:#fff;background-color:#003645}.btn-navy:active:hover,.btn-navy:active:focus,.btn-navy:active.focus,.btn-navy.active:hover,.btn-navy.active:focus,.btn-navy.active.focus,.open>.btn-navy.dropdown-toggle:hover,.open>.btn-navy.dropdown-toggle:focus,.open>.btn-navy.dropdown-toggle.focus{color:#fff;background-color:#003645}.btn-navy:active,.btn-navy.active,.open>.btn-navy.dropdown-toggle{background-image:none}.btn-navy.disabled:hover,.btn-navy.disabled:focus,.btn-navy.disabled.focus,.btn-navy[disabled]:hover,.btn-navy[disabled]:focus,.btn-navy[disabled].focus,fieldset[disabled] .btn-navy:hover,fieldset[disabled] .btn-navy:focus,fieldset[disabled] .btn-navy.focus{background-color:#005e7a;border-color:#005e7a}.btn-navy .badge{color:#005e7a;background-color:#fff}.btn-green{color:#fff;background-color:#7ec631;border-color:#7ec631}.btn-green:focus,.btn-green.focus{color:#fff;background-color:#48a71c}.btn-green:hover{color:#fff;background-color:#48a71c}.btn-green:active,.btn-green.active,.open>.btn-green.dropdown-toggle{color:#fff;background-color:#48a71c}.btn-green:active:hover,.btn-green:active:focus,.btn-green:active.focus,.btn-green.active:hover,.btn-green.active:focus,.btn-green.active.focus,.open>.btn-green.dropdown-toggle:hover,.open>.btn-green.dropdown-toggle:focus,.open>.btn-green.dropdown-toggle.focus{color:#fff;background-color:#48a71c}.btn-green:active,.btn-green.active,.open>.btn-green.dropdown-toggle{background-image:none}.btn-green.disabled:hover,.btn-green.disabled:focus,.btn-green.disabled.focus,.btn-green[disabled]:hover,.btn-green[disabled]:focus,.btn-green[disabled].focus,fieldset[disabled] .btn-green:hover,fieldset[disabled] .btn-green:focus,fieldset[disabled] .btn-green.focus{background-color:#7ec631;border-color:#7ec631}.btn-green .badge{color:#7ec631;background-color:#fff}.btn-orange{color:#fff;background-color:#ff694b;border-color:#ff694b}.btn-orange:focus,.btn-orange.focus{color:#fff;background-color:#ff3c2b}.btn-orange:hover{color:#fff;background-color:#ff3c2b}.btn-orange:active,.btn-orange.active,.open>.btn-orange.dropdown-toggle{color:#fff;background-color:#ff3c2b}.btn-orange:active:hover,.btn-orange:active:focus,.btn-orange:active.focus,.btn-orange.active:hover,.btn-orange.active:focus,.btn-orange.active.focus,.open>.btn-orange.dropdown-toggle:hover,.open>.btn-orange.dropdown-toggle:focus,.open>.btn-orange.dropdown-toggle.focus{color:#fff;background-color:#ff3c2b}.btn-orange:active,.btn-orange.active,.open>.btn-orange.dropdown-toggle{background-image:none}.btn-orange.disabled:hover,.btn-orange.disabled:focus,.btn-orange.disabled.focus,.btn-orange[disabled]:hover,.btn-orange[disabled]:focus,.btn-orange[disabled].focus,fieldset[disabled] .btn-orange:hover,fieldset[disabled] .btn-orange:focus,fieldset[disabled] .btn-orange.focus{background-color:#ff694b;border-color:#ff694b}.btn-orange .badge{color:#ff694b;background-color:#fff}.btn-yellow{color:#fff;background-color:#fc0;border-color:#fc0}.btn-yellow:focus,.btn-yellow.focus{color:#fff;background-color:#ffb100}.btn-yellow:hover{color:#fff;background-color:#ffb100}.btn-yellow:active,.btn-yellow.active,.open>.btn-yellow.dropdown-toggle{color:#fff;background-color:#ffb100}.btn-yellow:active:hover,.btn-yellow:active:focus,.btn-yellow:active.focus,.btn-yellow.active:hover,.btn-yellow.active:focus,.btn-yellow.active.focus,.open>.btn-yellow.dropdown-toggle:hover,.open>.btn-yellow.dropdown-toggle:focus,.open>.btn-yellow.dropdown-toggle.focus{color:#fff;background-color:#ffb100}.btn-yellow:active,.btn-yellow.active,.open>.btn-yellow.dropdown-toggle{background-image:none}.btn-yellow.disabled:hover,.btn-yellow.disabled:focus,.btn-yellow.disabled.focus,.btn-yellow[disabled]:hover,.btn-yellow[disabled]:focus,.btn-yellow[disabled].focus,fieldset[disabled] .btn-yellow:hover,fieldset[disabled] .btn-yellow:focus,fieldset[disabled] .btn-yellow.focus{background-color:#fc0;border-color:#fc0}.btn-yellow .badge{color:#fc0;background-color:#fff}.btn-purple{color:#fff;background-color:#7f6cc5;border-color:#7f6cc5}.btn-purple:focus,.btn-purple.focus{color:#fff;background-color:#483da5}.btn-purple:hover{color:#fff;background-color:#483da5}.btn-purple:active,.btn-purple.active,.open>.btn-purple.dropdown-toggle{color:#fff;background-color:#483da5}.btn-purple:active:hover,.btn-purple:active:focus,.btn-purple:active.focus,.btn-purple.active:hover,.btn-purple.active:focus,.btn-purple.active.focus,.open>.btn-purple.dropdown-toggle:hover,.open>.btn-purple.dropdown-toggle:focus,.open>.btn-purple.dropdown-toggle.focus{color:#fff;background-color:#483da5}.btn-purple:active,.btn-purple.active,.open>.btn-purple.dropdown-toggle{background-image:none}.btn-purple.disabled:hover,.btn-purple.disabled:focus,.btn-purple.disabled.focus,.btn-purple[disabled]:hover,.btn-purple[disabled]:focus,.btn-purple[disabled].focus,fieldset[disabled] .btn-purple:hover,fieldset[disabled] .btn-purple:focus,fieldset[disabled] .btn-purple.focus{background-color:#7f6cc5;border-color:#7f6cc5}.btn-purple .badge{color:#7f6cc5;background-color:#fff}.btn-white{color:#484e53;background-color:#fff;border-color:#fff}.btn-white:focus,.btn-white.focus{color:#484e53;background-color:#f9fafb}.btn-white:hover{color:#484e53;background-color:#f9fafb}.btn-white:active,.btn-white.active,.open>.btn-white.dropdown-toggle{color:#484e53;background-color:#f9fafb}.btn-white:active:hover,.btn-white:active:focus,.btn-white:active.focus,.btn-white.active:hover,.btn-white.active:focus,.btn-white.active.focus,.open>.btn-white.dropdown-toggle:hover,.open>.btn-white.dropdown-toggle:focus,.open>.btn-white.dropdown-toggle.focus{color:#484e53;background-color:#f9fafb}.btn-white:active,.btn-white.active,.open>.btn-white.dropdown-toggle{background-image:none}.btn-white.disabled:hover,.btn-white.disabled:focus,.btn-white.disabled.focus,.btn-white[disabled]:hover,.btn-white[disabled]:focus,.btn-white[disabled].focus,fieldset[disabled] .btn-white:hover,fieldset[disabled] .btn-white:focus,fieldset[disabled] .btn-white.focus{background-color:#fff;border-color:#fff}.btn-white .badge{color:#fff;background-color:#484e53}.btn-default{color:#484e53;background-color:#f0f2f4;border-color:#f0f2f4}.btn-default:focus,.btn-default.focus{color:#484e53;background-color:#e9ebef}.btn-default:hover{color:#484e53;background-color:#e9ebef}.btn-default:active,.btn-default.active,.open>.btn-default.dropdown-toggle{color:#484e53;background-color:#e9ebef}.btn-default:active:hover,.btn-default:active:focus,.btn-default:active.focus,.btn-default.active:hover,.btn-default.active:focus,.btn-default.active.focus,.open>.btn-default.dropdown-toggle:hover,.open>.btn-default.dropdown-toggle:focus,.open>.btn-default.dropdown-toggle.focus{color:#484e53;background-color:#e9ebef}.btn-default:active,.btn-default.active,.open>.btn-default.dropdown-toggle{background-image:none}.btn-default.disabled:hover,.btn-default.disabled:focus,.btn-default.disabled.focus,.btn-default[disabled]:hover,.btn-default[disabled]:focus,.btn-default[disabled].focus,fieldset[disabled] .btn-default:hover,fieldset[disabled] .btn-default:focus,fieldset[disabled] .btn-default.focus{background-color:#f0f2f4;border-color:#f0f2f4}.btn-default .badge{color:#f0f2f4;background-color:#484e53}.btn-clear,.btn-text,.btn-link{background:transparent !important}.btn-text,.btn.text-inherit{color:inherit}.btn-text:hover,.btn-text:focus,.btn.text-inherit:hover,.btn.text-inherit:focus{color:inherit}.btn[class*="btn-highlight"],.btn-default,.btn-clear,.btn-text,.btn-link{box-shadow:none}.btn-highlight-info{color:#0aa;background-color:#edfafa;border-color:transparent}.btn-highlight-info:focus,.btn-highlight-info.focus{color:#0aa;background-color:#e4f8f8}.btn-highlight-info:hover{color:#0aa;background-color:#e4f8f8}.btn-highlight-info:active,.btn-highlight-info.active,.open>.btn-highlight-info.dropdown-toggle{color:#0aa;background-color:#e4f8f8}.btn-highlight-info:active:hover,.btn-highlight-info:active:focus,.btn-highlight-info:active.focus,.btn-highlight-info.active:hover,.btn-highlight-info.active:focus,.btn-highlight-info.active.focus,.open>.btn-highlight-info.dropdown-toggle:hover,.open>.btn-highlight-info.dropdown-toggle:focus,.open>.btn-highlight-info.dropdown-toggle.focus{color:#0aa;background-color:#e4f8f8}.btn-highlight-info:active,.btn-highlight-info.active,.open>.btn-highlight-info.dropdown-toggle{background-image:none}.btn-highlight-info.disabled:hover,.btn-highlight-info.disabled:focus,.btn-highlight-info.disabled.focus,.btn-highlight-info[disabled]:hover,.btn-highlight-info[disabled]:focus,.btn-highlight-info[disabled].focus,fieldset[disabled] .btn-highlight-info:hover,fieldset[disabled] .btn-highlight-info:focus,fieldset[disabled] .btn-highlight-info.focus{background-color:#edfafa;border-color:transparent}.btn-highlight-info .badge{color:#edfafa;background-color:#0aa}.btn-highlight-success{color:#48a71c;background-color:#f3faec;border-color:transparent}.btn-highlight-success:focus,.btn-highlight-success.focus{color:#48a71c;background-color:#edf8e3}.btn-highlight-success:hover{color:#48a71c;background-color:#edf8e3}.btn-highlight-success:active,.btn-highlight-success.active,.open>.btn-highlight-success.dropdown-toggle{color:#48a71c;background-color:#edf8e3}.btn-highlight-success:active:hover,.btn-highlight-success:active:focus,.btn-highlight-success:active.focus,.btn-highlight-success.active:hover,.btn-highlight-success.active:focus,.btn-highlight-success.active.focus,.open>.btn-highlight-success.dropdown-toggle:hover,.open>.btn-highlight-success.dropdown-toggle:focus,.open>.btn-highlight-success.dropdown-toggle.focus{color:#48a71c;background-color:#edf8e3}.btn-highlight-success:active,.btn-highlight-success.active,.open>.btn-highlight-success.dropdown-toggle{background-image:none}.btn-highlight-success.disabled:hover,.btn-highlight-success.disabled:focus,.btn-highlight-success.disabled.focus,.btn-highlight-success[disabled]:hover,.btn-highlight-success[disabled]:focus,.btn-highlight-success[disabled].focus,fieldset[disabled] .btn-highlight-success:hover,fieldset[disabled] .btn-highlight-success:focus,fieldset[disabled] .btn-highlight-success.focus{background-color:#f3faec;border-color:transparent}.btn-highlight-success .badge{color:#f3faec;background-color:#48a71c}.btn-highlight-danger{color:#ff694b;background-color:#fff5f4;border-color:transparent}.btn-highlight-danger:focus,.btn-highlight-danger.focus{color:#ff694b;background-color:#fff0ef}.btn-highlight-danger:hover{color:#ff694b;background-color:#fff0ef}.btn-highlight-danger:active,.btn-highlight-danger.active,.open>.btn-highlight-danger.dropdown-toggle{color:#ff694b;background-color:#fff0ef}.btn-highlight-danger:active:hover,.btn-highlight-danger:active:focus,.btn-highlight-danger:active.focus,.btn-highlight-danger.active:hover,.btn-highlight-danger.active:focus,.btn-highlight-danger.active.focus,.open>.btn-highlight-danger.dropdown-toggle:hover,.open>.btn-highlight-danger.dropdown-toggle:focus,.open>.btn-highlight-danger.dropdown-toggle.focus{color:#ff694b;background-color:#fff0ef}.btn-highlight-danger:active,.btn-highlight-danger.active,.open>.btn-highlight-danger.dropdown-toggle{background-image:none}.btn-highlight-danger.disabled:hover,.btn-highlight-danger.disabled:focus,.btn-highlight-danger.disabled.focus,.btn-highlight-danger[disabled]:hover,.btn-highlight-danger[disabled]:focus,.btn-highlight-danger[disabled].focus,fieldset[disabled] .btn-highlight-danger:hover,fieldset[disabled] .btn-highlight-danger:focus,fieldset[disabled] .btn-highlight-danger.focus{background-color:#fff5f4;border-color:transparent}.btn-highlight-danger .badge{color:#fff5f4;background-color:#ff694b}.btn-highlight-warning{color:#ff6316;background-color:#fff6ec;border-color:transparent}.btn-highlight-warning:focus,.btn-highlight-warning.focus{color:#ff6316;background-color:#fff2e3}.btn-highlight-warning:hover{color:#ff6316;background-color:#fff2e3}.btn-highlight-warning:active,.btn-highlight-warning.active,.open>.btn-highlight-warning.dropdown-toggle{color:#ff6316;background-color:#fff2e3}.btn-highlight-warning:active:hover,.btn-highlight-warning:active:focus,.btn-highlight-warning:active.focus,.btn-highlight-warning.active:hover,.btn-highlight-warning.active:focus,.btn-highlight-warning.active.focus,.open>.btn-highlight-warning.dropdown-toggle:hover,.open>.btn-highlight-warning.dropdown-toggle:focus,.open>.btn-highlight-warning.dropdown-toggle.focus{color:#ff6316;background-color:#fff2e3}.btn-highlight-warning:active,.btn-highlight-warning.active,.open>.btn-highlight-warning.dropdown-toggle{background-image:none}.btn-highlight-warning.disabled:hover,.btn-highlight-warning.disabled:focus,.btn-highlight-warning.disabled.focus,.btn-highlight-warning[disabled]:hover,.btn-highlight-warning[disabled]:focus,.btn-highlight-warning[disabled].focus,fieldset[disabled] .btn-highlight-warning:hover,fieldset[disabled] .btn-highlight-warning:focus,fieldset[disabled] .btn-highlight-warning.focus{background-color:#fff6ec;border-color:transparent}.btn-highlight-warning .badge{color:#fff6ec;background-color:#ff6316}.btn-lg,.btn-group-lg>.btn{height:4.2857142857rem;font-size:1.1428571429rem}.btn-sm,.btn-group-sm>.btn{height:2.2857142857rem;font-size:.9285714286rem}.btn-xs,.btn-group-xs>.btn{padding:.1607142857rem .625rem;height:1.7142857143rem;font-size:.9285714286rem}.btn-md{padding:.3928571429rem 1.5rem;height:3.7142857143rem;font-size:1rem}.btn-pill{border-radius:200px }.btn-icon{padding-left:0;padding-right:0;width:2.8571428571rem;min-width:2.8571428571rem}.btn-icon.btn-xs,.btn-group-xs>.btn-icon.btn{width:1.7142857143rem;min-width:1.7142857143rem}.btn-icon.btn-sm,.btn-group-sm>.btn-icon.btn{width:2.2857142857rem;min-width:2.2857142857rem}.btn-icon.btn-md{width:3.7142857143rem;min-width:3.7142857143rem}.btn-icon.btn-lg,.btn-group-lg>.btn-icon.btn{width:4.2857142857rem;min-width:4.2857142857rem}.btn-icon .icon,.btn-icon .glyph{margin:0;position:absolute;top:50%;left:50%;-webkit-transform:translate(-50%, -50%);transform:translate(-50%, -50%)}.btn-icon-slim{min-width:0}.btn-block,.btn-slim,.btn-link,.btn-text{padding-left:0;padding-right:0}.btn.active,.btn:active{-webkit-box-shadow:none;box-shadow:none}.btn.disabled,.btn[disabled]{opacity:.375}.btn-file:before{content:attr(data-placeholder)}.btn-file[data-value]:before{content:attr(data-placeholder) " "}.btn-file[data-value]:after{content:"(" attr(data-value) ")"}.btn-file input{position:absolute;opacity:0}.btn-inliner .btn{margin-bottom:.3rem}.btn-toolbar{margin-left:-2px;margin-right:-2px;font-size:0}.btn-toolbar .btn-group{margin-left:2px;margin-right:2px;float:none}.form-control,.input-group-addon,.form-control-static,.form-grid .form-row .form-label label,.option{line-height:1.5 !important;border-width:0 !important;font-size:1rem}.form-group-lg .form-control,.input-group-lg .form-control,.form-group-lg .input-group-addon,.input-group-lg .input-group-addon,.form-group-lg .form-control-static,.form-group-lg .form-grid .form-row .form-label label,.form-grid .form-row .form-label .form-group-lg label,.input-group-lg .form-control-static,.input-group-lg .form-grid .form-row .form-label label,.form-grid .form-row .form-label .input-group-lg label,.form-group-lg .option,.input-group-lg .option{font-size:1.1428571429rem}.form-group-sm .form-control,.input-group-sm .form-control,.form-group-sm .input-group-addon,.input-group-sm .input-group-addon,.form-group-sm .form-control-static,.form-group-sm .form-grid .form-row .form-label label,.form-grid .form-row .form-label .form-group-sm label,.input-group-sm .form-control-static,.input-group-sm .form-grid .form-row .form-label label,.form-grid .form-row .form-label .input-group-sm label,.form-group-sm .option,.input-group-sm .option{font-size:.9285714286rem}.form-control.input-lg,.input-group-lg>.form-control,.input-group-lg>.input-group-btn>.form-control.btn,.input-group-addon.input-lg,.input-group-lg>.input-group-addon,.input-group-lg>.input-group-btn>.input-group-addon.btn,.form-control-static.input-lg,.input-group-lg>.form-control-static.form-control,.form-grid .form-row .form-label .input-group-lg>label.form-control,.input-group-lg>.form-control-static.input-group-addon,.form-grid .form-row .form-label .input-group-lg>label.input-group-addon,.input-group-lg>.input-group-btn>.form-control-static.btn,.form-grid .form-row .form-label .input-group-lg>.input-group-btn>label.btn,.form-grid .form-row .form-label label.input-lg,.option.input-lg,.input-group-lg>.option.form-control,.input-group-lg>.option.input-group-addon,.input-group-lg>.input-group-btn>.option.btn{font-size:1.1428571429rem}.form-control.input-sm,.input-group-sm>.form-control,.input-group-sm>.input-group-btn>.form-control.btn,.input-group-addon.input-sm,.input-group-sm>.input-group-addon,.input-group-sm>.input-group-btn>.input-group-addon.btn,.form-control-static.input-sm,.input-group-sm>.form-control-static.form-control,.form-grid .form-row .form-label .input-group-sm>label.form-control,.input-group-sm>.form-control-static.input-group-addon,.form-grid .form-row .form-label .input-group-sm>label.input-group-addon,.input-group-sm>.input-group-btn>.form-control-static.btn,.form-grid .form-row .form-label .input-group-sm>.input-group-btn>label.btn,.form-grid .form-row .form-label label.input-sm,.option.input-sm,.input-group-sm>.option.form-control,.input-group-sm>.option.input-group-addon,.input-group-sm>.input-group-btn>.option.btn{font-size:.9285714286rem}.form-control::-ms-expand,.input-group-addon::-ms-expand,.form-control-static::-ms-expand,.form-grid .form-row .form-label label::-ms-expand,.option::-ms-expand{display:none}.form-control::-ms-clear,.input-group-addon::-ms-clear,.form-control-static::-ms-clear,.form-grid .form-row .form-label label::-ms-clear,.option::-ms-clear{display:none}.form-control::-ms-value,.input-group-addon::-ms-value,.form-control-static::-ms-value,.form-grid .form-row .form-label label::-ms-value,.option::-ms-value{background:transparent !important}.form-control,.form-control-static,.form-grid .form-row .form-label label,textarea.form-control,.option{height:2.8571428571rem;line-height:1.5 !important;padding:.6785714286rem 1.25rem;border:0}.form-control.input-sm,.input-group-sm>.form-control,.input-group-sm>.input-group-btn>.form-control.btn,.form-control-static.input-sm,.input-group-sm>.form-control-static.form-control,.form-grid .form-row .form-label .input-group-sm>label.form-control,.input-group-sm>.form-control-static.input-group-addon,.form-grid .form-row .form-label .input-group-sm>label.input-group-addon,.input-group-sm>.input-group-btn>.form-control-static.btn,.form-grid .form-row .form-label .input-group-sm>.input-group-btn>label.btn,.form-grid .form-row .form-label label.input-sm,textarea.form-control.input-sm,.input-group-sm>textarea.form-control,.input-group-sm>.input-group-btn>textarea.form-control.btn,.option.input-sm,.input-group-sm>.option.form-control,.input-group-sm>.option.input-group-addon,.input-group-sm>.input-group-btn>.option.btn{height:2.2857142857rem;min-height:2.2857142857rem;padding:.4464285714rem .875rem}.form-control.input-lg,.input-group-lg>.form-control,.input-group-lg>.input-group-btn>.form-control.btn,.form-control-static.input-lg,.input-group-lg>.form-control-static.form-control,.form-grid .form-row .form-label .input-group-lg>label.form-control,.input-group-lg>.form-control-static.input-group-addon,.form-grid .form-row .form-label .input-group-lg>label.input-group-addon,.input-group-lg>.input-group-btn>.form-control-static.btn,.form-grid .form-row .form-label .input-group-lg>.input-group-btn>label.btn,.form-grid .form-row .form-label label.input-lg,textarea.form-control.input-lg,.input-group-lg>textarea.form-control,.input-group-lg>.input-group-btn>textarea.form-control.btn,.option.input-lg,.input-group-lg>.option.form-control,.input-group-lg>.option.input-group-addon,.input-group-lg>.input-group-btn>.option.btn{height:4.2857142857rem;min-height:4.2857142857rem;padding:1.2857142857rem 1.875rem}.form-control.input-md,.form-control-static.input-md,.form-grid .form-row .form-label label.input-md,textarea.form-control.input-md,.option.input-md{height:2.2857142857rem;min-height:2.2857142857rem;padding:.3928571429rem .875rem}textarea.form-control:not(.form-control-height){height:6em}.form-control{-webkit-transition:all .25s cubic-bezier(0.25, 0, 0, 1);-o-transition:all .25s cubic-bezier(0.25, 0, 0, 1);transition:all .25s cubic-bezier(0.25, 0, 0, 1);-webkit-transition-property:color,background-color,box-shadow;transition-property:color,background-color,box-shadow;-webkit-box-shadow:none;box-shadow:none;-webkit-appearance:none;text-overflow:ellipsis;box-shadow:none;color:#484e53}.form-control::-moz-placeholder{color:#a8b1b7;opacity:1}.form-control:-ms-input-placeholder{color:#a8b1b7}.form-control::-webkit-input-placeholder{color:#a8b1b7}.form-control.input-short{width:64px}.form-control.input-medium{width:240px}.form-control.input-long{width:100%}.form-control.input-pill{border-radius:200px !important}.form-control.input-dark{background-color:#00475c;color:white}.form-control.input-dark:hover,.form-control.input-dark:focus{background-color:white;color:#313539}.form-control.input-dark::-moz-placeholder{color:#00afc6;opacity:1}.form-control.input-dark:-ms-input-placeholder{color:#00afc6}.form-control.input-dark::-webkit-input-placeholder{color:#00afc6}.form-control.input-transparent{background-color:transparent}.form-control.input-white{background-color:white;box-shadow:0 0 0 1px rgba(0,30,60,0.03),0 3px 3px -1.5px rgba(0,0,0,0.03)}.form-control:not(:disabled):not(.disabled):hover{background-color:#e9ebef}.form-control:not(:disabled):not(.disabled):hover::-moz-placeholder{color:#5e666c;opacity:1}.form-control:not(:disabled):not(.disabled):hover:-ms-input-placeholder{color:#5e666c}.form-control:not(:disabled):not(.disabled):hover::-webkit-input-placeholder{color:#5e666c}.form-control:not(:disabled):not(.disabled):hover.input-white{background-color:#f9fafb}.form-control:focus{color:#484e53 !important;background-color:white !important;box-shadow:0 0 0 1px #0bb,0 15px 15px -7.5px rgba(0,0,0,0.15);border-radius:4px !important;z-index:3}.form-control:focus::-moz-placeholder{color:#8b969e !important;opacity:1}.form-control:focus:-ms-input-placeholder{color:#8b969e !important}.form-control:focus::-webkit-input-placeholder{color:#8b969e !important}.form-control[type="number"]:not(.spinner){-moz-appearance:textfield}.form-control[type="number"]:not(.spinner)::-webkit-inner-spin-button,.form-control[type="number"]:not(.spinner)::-webkit-outer-spin-button{-webkit-appearance:none;margin:0}.form-control-static,.form-grid .form-row .form-label label{display:block;height:auto !important;padding-left:0 !important;padding-right:0 !important;color:#484e53}.has-info .input-group-addon,.has-info .form-control{border-color:transparent !important;background-color:#edfafa;box-shadow:none}.has-info .input-group-addon::-moz-placeholder,.has-info .form-control::-moz-placeholder{color:#80d5d5;opacity:1}.has-info .input-group-addon:-ms-input-placeholder,.has-info .form-control:-ms-input-placeholder{color:#80d5d5}.has-info .input-group-addon::-webkit-input-placeholder,.has-info .form-control::-webkit-input-placeholder{color:#80d5d5}.has-info .input-group-addon,.has-info .form-control{color:#0aa}.has-info .form-control:not(:disabled):not(.disabled):hover{background-color:#def7f7;color:#007b7b}.has-info .form-control:not(:disabled):not(.disabled):hover::-moz-placeholder{color:#40bfbf;opacity:1}.has-info .form-control:not(:disabled):not(.disabled):hover:-ms-input-placeholder{color:#40bfbf}.has-info .form-control:not(:disabled):not(.disabled):hover::-webkit-input-placeholder{color:#40bfbf}.has-info .form-control:not(:disabled):not(.disabled):focus{box-shadow:0 0 0 1px #0bb,0 15px 15px -7.5px rgba(0,0,0,0.15)}.has-success .input-group-addon,.has-success .form-control{border-color:transparent !important;background-color:#f3faec;box-shadow:none}.has-success .input-group-addon::-moz-placeholder,.has-success .form-control::-moz-placeholder{color:#a4d38e;opacity:1}.has-success .input-group-addon:-ms-input-placeholder,.has-success .form-control:-ms-input-placeholder{color:#a4d38e}.has-success .input-group-addon::-webkit-input-placeholder,.has-success .form-control::-webkit-input-placeholder{color:#a4d38e}.has-success .input-group-addon,.has-success .form-control{color:#48a71c}.has-success .form-control:not(:disabled):not(.disabled):hover{background-color:#e9f7dc;color:#297610}.has-success .form-control:not(:disabled):not(.disabled):hover::-moz-placeholder{color:#76bd55;opacity:1}.has-success .form-control:not(:disabled):not(.disabled):hover:-ms-input-placeholder{color:#76bd55}.has-success .form-control:not(:disabled):not(.disabled):hover::-webkit-input-placeholder{color:#76bd55}.has-success .form-control:not(:disabled):not(.disabled):focus{box-shadow:0 0 0 1px #7ec631,0 15px 15px -7.5px rgba(0,0,0,0.15)}.has-warning .input-group-addon,.has-warning .form-control{border-color:transparent !important;background-color:#fff6ec;box-shadow:none}.has-warning .input-group-addon::-moz-placeholder,.has-warning .form-control::-moz-placeholder{color:#ffb18b;opacity:1}.has-warning .input-group-addon:-ms-input-placeholder,.has-warning .form-control:-ms-input-placeholder{color:#ffb18b}.has-warning .input-group-addon::-webkit-input-placeholder,.has-warning .form-control::-webkit-input-placeholder{color:#ffb18b}.has-warning .input-group-addon,.has-warning .form-control{color:#ff6316}.has-warning .form-control:not(:disabled):not(.disabled):hover{background-color:#ffefdc;color:#ff390d}.has-warning .form-control:not(:disabled):not(.disabled):hover::-moz-placeholder{color:#ff8a50;opacity:1}.has-warning .form-control:not(:disabled):not(.disabled):hover:-ms-input-placeholder{color:#ff8a50}.has-warning .form-control:not(:disabled):not(.disabled):hover::-webkit-input-placeholder{color:#ff8a50}.has-warning .form-control:not(:disabled):not(.disabled):focus{box-shadow:0 0 0 1px #ff9b26,0 15px 15px -7.5px rgba(0,0,0,0.15)}.has-danger .input-group-addon,.has-danger .form-control,.has-error .input-group-addon,.has-error .form-control{border-color:transparent !important;background-color:#fff5f4;box-shadow:none}.has-danger .input-group-addon::-moz-placeholder,.has-danger .form-control::-moz-placeholder,.has-error .input-group-addon::-moz-placeholder,.has-error .form-control::-moz-placeholder{color:#ffb4a5;opacity:1}.has-danger .input-group-addon:-ms-input-placeholder,.has-danger .form-control:-ms-input-placeholder,.has-error .input-group-addon:-ms-input-placeholder,.has-error .form-control:-ms-input-placeholder{color:#ffb4a5}.has-danger .input-group-addon::-webkit-input-placeholder,.has-danger .form-control::-webkit-input-placeholder,.has-error .input-group-addon::-webkit-input-placeholder,.has-error .form-control::-webkit-input-placeholder{color:#ffb4a5}.has-danger .input-group-addon,.has-danger .form-control,.has-error .input-group-addon,.has-error .form-control{color:#ff694b}.has-danger .form-control:not(:disabled):not(.disabled):hover,.has-error .form-control:not(:disabled):not(.disabled):hover{background-color:#ffedeb;color:#ff3c2b}.has-danger .form-control:not(:disabled):not(.disabled):hover::-moz-placeholder,.has-error .form-control:not(:disabled):not(.disabled):hover::-moz-placeholder{color:#ff8f78;opacity:1}.has-danger .form-control:not(:disabled):not(.disabled):hover:-ms-input-placeholder,.has-error .form-control:not(:disabled):not(.disabled):hover:-ms-input-placeholder{color:#ff8f78}.has-danger .form-control:not(:disabled):not(.disabled):hover::-webkit-input-placeholder,.has-error .form-control:not(:disabled):not(.disabled):hover::-webkit-input-placeholder{color:#ff8f78}.has-danger .form-control:not(:disabled):not(.disabled):focus,.has-error .form-control:not(:disabled):not(.disabled):focus{box-shadow:0 0 0 1px #ff694b,0 15px 15px -7.5px rgba(0,0,0,0.15)}.input-group-rounded>*:first-child,.input-group-rounded>*:first-child.input-group-btn .btn{border-top-left-radius:100px;border-bottom-left-radius:100px}.input-group-rounded>*:last-child,.input-group-rounded>*:last-child.input-group-btn .btn{border-top-right-radius:100px;border-bottom-right-radius:100px}.input-group-addon{color:#8b969e}.table tr.success{box-shadow:inset rgba(0,30,60,0.03) 0 0 #7ec631}.table tr.info{box-shadow:inset rgba(0,30,60,0.03) 0 0 #0bb}.table tr.warning{box-shadow:inset rgba(0,30,60,0.03) 0 0 #fc0}.table tr.danger{box-shadow:inset rgba(0,30,60,0.03) 0 0 #ff694b}.table-flush th:first-child,.table-flush td:first-child{padding-left:0}.table-flush th:last-child,.table-flush td:last-child{padding-right:0}.table-justified th:last-child,.table-justified td:last-child{text-align:right}th.sm,td.sm{width:1px;white-space:nowrap}th.flush-left,td.flush-left{padding-left:0 !important}th.flush-right,td.flush-right{padding-right:0 !important}.table:not(.table-borderless)>thead>tr>*{border-width:1px}thead>tr>*,.table-label{text-transform:uppercase;letter-spacing:.15em;font-size:.75rem;font-weight:500;color:#8b969e}.table-borderless tr *{border-width:0 !important}.table tbody+tbody{border-top-width:1px}.table-compact th *,.table-compact td *{margin-top:0;margin-bottom:0}.table-middle th,.table-middle td{vertical-align:middle !important}.table-large{font-size:1rem}.table-large tbody th,.table-large tbody td,.table-large>td,.table-large>th{padding-top:1rem !important;padding-bottom:1rem !important}.card .table th,.card .table td{padding-left:1.875rem;padding-right:1.875rem}.table-condensed{font-size:.9285714286rem}.table-responsive{border-radius:4px}@media (min-width: 961px){.table-responsive{overflow:visible}}@media (max-width: 960px){.table-responsive{overflow:auto}html.touch .table-responsive{overflow:scroll;-webkit-overflow-scrolling:touch}}@media (min-width: 961px){.table-alignment{margin-left:-1.25rem;margin-right:-1.25rem}}.table-linked{overflow:hidden}.table-linked a{z-index:3}.table-linked .table-link{width:0 !important;padding:0 !important;vertical-align:top !important}.table-linked .table-link .table-anchor{position:absolute;display:block;height:100%;width:1000vw;z-index:2}.table{display:table}.table-caption{display:table-caption}.table-colgroup{display:table-column-group}.table-thead{display:table-header-group}.table-tfoot{display:table-footer-group}.table-tbody{display:table-row-group}.table-td{display:table-cell}.table-col{display:table-column}.table-tr{display:table-row}.table-sticky{box-shadow:0 1px 0 #ecedee;z-index:2;position:sticky;top:0;background:#f9fafb}tbody .table-sticky{top:28px;background:white}.table .secondary td,.table .secondary th{background:#f9fafb;color:#8b969e}.nav-stacked .nav-stacked{font-size:.9285714286rem}.nav-stacked .nav-stacked>li{margin-left:1em}.nav-stacked .nav-stacked>li>a{color:#8b969e}.nav-tabs{border:0;box-shadow:0 1px 0 rgba(0,30,60,0.075);color:#313539;display:flex;flex-direction:row;flex-wrap:wrap}.nav-tabs:before,.nav-tabs:after{display:none}.nav-tabs>li{float:none;flex:0 0 auto;background:transparent !important;margin:0}.nav-tabs>li:not(:first-child){margin-left:.75em}.nav-tabs>li:not(:last-child){margin-right:.75em}.nav-tabs>li>a,.nav-tabs>li>span{display:block;line-height:1.5;background:transparent !important;padding:1.2857142857rem 0;margin:0 !important;border:0 !important;border-radius:0}.nav-tabs>li.active{box-shadow:0 1px 0 #0bb}.nav-tabs>li.active a{color:#313539}.nav-tabs-sm>li>a,.nav-tabs-sm>li>span{font-size:.9285714286rem;padding:.6785714286rem 0}.nav-tabs-fill>li{flex:1 0 auto;margin:0 !important}.nav-tabs-fill>li>a,.nav-tabs-fill>li>span{text-align:center;padding-left:20px;padding-right:20px}html.touch .nav-tabs{flex-wrap:nowrap;overflow:hidden;overflow-y:scroll;-webkit-overflow-scrolling:touch}.card-tabs .nav-tabs{background:#f0f2f4;border-radius:4px 4px 0 0}.card-tabs .nav-tabs>li:first-child{border-top-left-radius:4px}.card-tabs .nav-tabs>li:last-child{border-top-right-radius:4px}.card-tabs .nav-tabs>li.active{box-shadow:0 1px 0 white !important;background:white !important}.tab-content>.tab-pane{height:0;display:block;overflow:hidden}.tab-content>.tab-pane:not(.active){padding:0}.tab-content>.tab-pane.active{height:auto;overflow:visible}.nav-pills>li>a{font-size:.9285714286rem;padding:.4464285714rem 1em}.alert{border:0;margin:1.5em 0}.alert:first-child{margin-top:0}.alert:last-child{margin-bottom:0}.alert strong{color:inherit;font-style:normal}.alert-default{background:#f9fafb;color:#8b969e}.alert-flush{margin:0}.alert-trim{padding-left:0;padding-right:0}.alert-link{font-weight:bold !important}.avatar{display:inline-block;vertical-align:middle}.avatar img{display:block;border-radius:50%;height:28px;width:28px}.avatar-square img{border-radius:4px}.avatar-sm img{height:20px;width:20px}kbd,code,pre{font-size:.8571428571rem}pre{padding:0;overflow:auto;border-width:0;resize:vertical;white-space:pre;padding:1.2857142857rem 1.875rem;border-radius:4px;font-size:.8571428571rem;-moz-tab-size:2;-o-tab-size:2;tab-size:2;margin:1em 0}pre:first-child{margin-top:0}pre:last-child{margin-bottom:0}.panel-code pre{border-radius:0;padding:40px 50px}@media (max-width: 960px){.panel-code pre{padding-left:7.5vw;padding-right:7.5vw}}.panel-footer .panel-code pre,.panel-body:last-child .panel-code pre{border-bottom-right-radius:4px;border-bottom-left-radius:4px}kbd{box-shadow:none}figure.highlight{tab-size:2}.code,code{font-family:"Monaco",monospace;font-size:.8571428571rem;font-weight:normal;padding:0}.highlight pre{background:#005e7a;color:white;overflow:auto}html.touch .highlight pre{overflow:scroll;-webkit-overflow-scrolling:touch}.highlight code{white-space:pre;display:block}.highlight code *{font-style:normal}.highlight .c{color:#00afc6;font-style:italic}.highlight .err{color:#a61717;background-color:#e3d2d2}.highlight .cm{color:#999988;font-style:italic}.highlight .cp{color:#999999}.highlight .c1{color:#999988;font-style:italic}.highlight .cs{color:#999999;font-style:italic}.highlight .gd{color:#000000;background-color:#fdd}.highlight .gd .x{color:#000000;background-color:#faa}.highlight .ge{font-style:italic}.highlight .gr{color:#a00}.highlight .gh{color:#999}.highlight .gi{color:#000000;background-color:#dfd}.highlight .gi .x{color:#000000;background-color:#afa}.highlight .go{color:#888}.highlight .gp{color:#555}.highlight .gu{color:#aaa}.highlight .gt{color:#a00}.highlight .kt{color:#445588}.highlight .m{color:#b7a5df}.highlight .n{color:#00d9d9}.highlight .s{color:#9ed53e}.highlight .na{color:#00afc6}.highlight .nb{color:#00d9d9}.highlight .nl{color:#00afc6}.highlight .nc{color:#fc0}.highlight .nd{color:#fc0}.highlight .no{color:#00afc6}.highlight .ni{color:#fc0}.highlight .ne{color:#990000}.highlight .nf{color:#990000}.highlight .nn{color:#555}.highlight .nt{color:#00d9d9}.highlight .nv{color:teal}.highlight .w{color:#bbb}.highlight .mf{color:#099}.highlight .mh{color:#099}.highlight .mi{color:#099}.highlight .mo{color:#099}.highlight .sb{color:#d14}.highlight .sc{color:#d14}.highlight .sd{color:#d14}.highlight .s2{color:#ff694b}.highlight .se{color:#d14}.highlight .sh{color:#d14}.highlight .si{color:#d14}.highlight .sx{color:#d14}.highlight .sr{color:#009926}.highlight .s1{color:#d14}.highlight .ss{color:#990073}.highlight .bp{color:#999}.highlight .vc{color:teal}.highlight .vg{color:teal}.highlight .vi{color:teal}.highlight .il{color:#099}.highlight .lineno{-webkit-user-select:none;-moz-user-select:none;-o-user-select:none}.highlight .lineno::-moz-selection{background-color:transparent}.highlight .lineno::selection{background-color:transparent}.label{text-transform:uppercase;letter-spacing:.15em;font-size:.75rem;font-weight:500;-webkit-transition:all .25s cubic-bezier(0.25, 0, 0, 1);-o-transition:all .25s cubic-bezier(0.25, 0, 0, 1);transition:all .25s cubic-bezier(0.25, 0, 0, 1);display:inline-block;text-align:inherit;padding:0;border:0}.label-default{color:#8b969e}.label-success{color:#5fb825}.label-info{color:#0aa}.label-warning{color:#ff821d}.label-danger{color:#ff4f39}.label-inherit{color:inherit}.label+.label:not(.block){margin-left:1.5em}a.label:hover.label-default,a.label:focus.label-default{color:#3f464e}a.label:hover.label-success,a.label:focus.label-success{color:#369115}a.label:hover.label-info,a.label:focus.label-info{color:#007b7b}a.label:hover.label-warning,a.label:focus.label-warning{color:#ff4b11}a.label:hover.label-danger,a.label:focus.label-danger{color:#ff2d21}.badge{border-radius:200px ;text-transform:uppercase;letter-spacing:.15em;font-size:.75rem;font-weight:500;line-height:1.8em;height:1.8em;min-width:1.8em;text-align:center;padding:0 7px;text-indent:1px;border:0}.badge-success{background:#7ec631;color:white}.badge-warning{background:#ff9b26;color:white}.badge-danger{background:#ff694b;color:white}.list-group-item .badge{float:right}.active .badge{color:#fff;background:#009797}.badge-digit{padding:0 2px}.badge-corner{position:absolute;top:0;right:0;-webkit-transform:translate(50%, -50%);transform:translate(50%, -50%)}.badges{font-size:0;display:block}.badges .badge{margin:2px 4px 2px 0}.progress{height:6px;overflow:visible;margin:1em 0}.progress:first-child{margin-top:0}.progress:last-child{margin-bottom:0}.progress,.progress .progress-bar{border-radius:100px;box-shadow:none}.tooltip{box-shadow:0 0 0 1px rgba(0,30,60,0.03),0 20px 20px -10px rgba(0,0,0,0.2);padding:0 !important}.tooltip,.tooltip .tooltip-inner,.tooltip .tooltip-arrow{border-radius:4px}.tooltip .tooltip-arrow{-webkit-transform:rotate(45deg);transform:rotate(45deg);background:#007699;box-shadow:0 0 0 1px rgba(0,30,60,0.03),0 20px 20px -10px rgba(0,0,0,0.2);border-width:0;height:12px;width:12px}.tooltip.top .tooltip-arrow{margin-bottom:-3px}.tooltip.bottom .tooltip-arrow{margin-top:-3px}.tooltip.left .tooltip-arrow{margin-right:-3px}.tooltip.right .tooltip-arrow{margin-left:-3px}.tooltip .tooltip-inner{font-size:.9285714286rem;padding:.6785714286rem 1.25rem;margin:0 !important;font-style:normal}.popover{box-shadow:0 0 0 1px rgba(0,30,60,0.03),0 20px 20px -10px rgba(0,0,0,0.2);font-size:1rem;border-width:0 !important;color:#fff;padding:0}.popover,.popover .popover-content,.popover .arrow{border-radius:4px}.popover .popover-content{border-radius:4px;margin:0 !important}.popover .popover-title,.popover .popover-content{padding:1.2857142857rem 1.875rem;background:#ff694b}.popover .arrow{width:20px;height:20px;background:#ff694b;box-shadow:0 0 0 1px rgba(0,30,60,0.03),0 20px 20px -10px rgba(0,0,0,0.2);-webkit-transform:rotate(45deg);transform:rotate(45deg)}.popover .arrow:after{display:none}.popover.top .arrow{margin:-10px;margin-bottom:-4px}.popover.bottom .arrow{margin:-10px;margin-top:-4px}.popover.left .arrow{margin:-10px;margin-right:-4px}.popover.right .arrow{margin:-10px;margin-left:-4px}.modal .modal-dialog{margin:auto;display:table;width:768px;max-width:100vw;height:100vh}.modal .modal-dialog.modal-sm{width:400px}.modal .modal-dialog.modal-lg{width:960px}.modal .modal-content{display:table-cell;vertical-align:middle;box-shadow:none}.modal.fade .modal-dialog{-webkit-transition:all .25s cubic-bezier(0.25, 0, 0, 1);-o-transition:all .25s cubic-bezier(0.25, 0, 0, 1);transition:all .25s cubic-bezier(0.25, 0, 0, 1);-webkit-transform:translate(0, -20px);transform:translate(0, -20px)}.modal.fade.in .modal-dialog{-webkit-transform:translate(0, 0);transform:translate(0, 0)}.modal-backdrop{display:block;position:absolute;width:100%;height:100%;top:0;left:0;position:fixed;z-index:1040}@media (max-width: 960px){.modal-content:not(.modal-content-flush){padding:7.5vw}}.panel{border-width:0;display:flex;flex-direction:column;display:block;border-width:0;background:white;box-shadow:0 0 0 1px rgba(0,30,60,0.03),0 3px 3px -1.5px rgba(0,0,0,0.03);border-radius:4px;margin:1em 0}.panel:first-child{margin-top:0}.panel:last-child{margin-bottom:0}.panel>*{border-color:transparent !important;flex:0 0 auto}.panel>*:first-child{border-top-right-radius:4px;border-top-left-radius:4px}.panel>*:last-child{border-bottom-right-radius:4px;border-bottom-left-radius:4px}.panel>*,.panel>*>.panel-fill{padding:20px 30px}.panel>*.panel-flush,.panel>*>.panel-fill.panel-flush{padding:0 !important}.panel>*.panel-flush-top,.panel>*>.panel-fill.panel-flush-top{padding-top:0 !important}.panel>*.panel-flush-bottom,.panel>*>.panel-fill.panel-flush-bottom{padding-bottom:0 !important}.panel-large>*,.panel-large>*>.panel-fill{padding:40px 50px}@media (max-width: 960px){.panel-large>*,.panel-large>*>.panel-fill{padding:5vw 7.5vw}}.panel>.panel-body{flex:1 0 auto}.panel>.panel-body>*:first-child{margin-top:0}.panel>.panel-body>*:last-child{margin-bottom:0}.panel>.panel-body>.panel-fill{display:block;position:absolute;width:100%;height:100%;top:0;left:0;overflow:auto}html.touch .panel>.panel-body>.panel-fill{overflow:scroll;-webkit-overflow-scrolling:touch}h1.panel-title,.h1.panel-title{font-size:1.7142857143rem}h2.panel-title,.h2.panel-title{font-size:1.7142857143rem}h3.panel-title,.h3.panel-title{font-size:1.2857142857rem}h4.panel-title,.h4.panel-title{font-size:1.1428571429rem}h5.panel-title,.h5.panel-title{font-size:1rem}h6.panel-title,.h6.panel-title{font-size:1rem}.list-group{display:block;border-width:0;background:white;box-shadow:0 0 0 1px rgba(0,30,60,0.03),0 3px 3px -1.5px rgba(0,0,0,0.03);border-radius:4px}.list-group .list-group-item{margin:0;border-width:0 0 1px 0}.list-group .list-group-item *{margin-top:0;margin-bottom:0}.list-group .list-group-item:last-child{border-width:0}.well{padding:1.2857142857rem 1.875rem;box-shadow:none;border:0}.well>*:first-child{margin-top:0}.well>*:last-child{margin-bottom:0}.row{margin:0}.container{padding-left:0;padding-right:0}@media (min-width: 961px){.container{width:90%;max-width:1320px}}@media (max-width: 960px){.container{width:auto}}@media (min-width: 961px){.row-reverse>[class*="col-lg-"]{float:right}}@media (max-width: 960px){[class*="col-lg-"]+[class*="col-lg-"]{margin-top:30px;margin-bottom:30px}[class*="col-lg-"]+[class*="col-lg-"]:first-child{margin-top:0}[class*="col-lg-"]+[class*="col-lg-"]:last-child{margin-bottom:0}}@media (max-width: 768px){[class*="col-md-"]+[class*="col-md-"]{margin-top:30px;margin-bottom:30px}[class*="col-md-"]+[class*="col-md-"]:first-child{margin-top:0}[class*="col-md-"]+[class*="col-md-"]:last-child{margin-bottom:0}}@media (max-width: 540px){[class*="col-sm-"]+[class*="col-sm-"]{margin-top:30px;margin-bottom:30px}[class*="col-sm-"]+[class*="col-sm-"]:first-child{margin-top:0}[class*="col-sm-"]+[class*="col-sm-"]:last-child{margin-bottom:0}}.carousel .carousel-control{background:transparent}.carousel .carousel-control:after{width:1em;display:block;position:absolute;left:0;top:0;bottom:0;right:0;margin:auto;height:1.6em;font-size:2rem}.carousel .carousel-indicators{bottom:10px}.carousel .carousel-indicators li{background:#fff;-webkit-transition:all .25s cubic-bezier(0.25, 0, 0, 1);-o-transition:all .25s cubic-bezier(0.25, 0, 0, 1);transition:all .25s cubic-bezier(0.25, 0, 0, 1);margin:0 2px;opacity:.25;height:8px;width:8px;border:0}.carousel .carousel-indicators li.active{opacity:1}.carousel .carousel-inner .item img{width:100%}.thumbnail{display:block;border-width:0;background:white;box-shadow:0 0 0 1px rgba(0,30,60,0.03),0 3px 3px -1.5px rgba(0,0,0,0.03);border-radius:4px}.thumbnail img{width:100%}.thumbnail .caption *{margin-top:0;margin-bottom:0}.range{-webkit-appearance:none;margin:0;width:100%;outline:none !important}.range::-moz-focus-outer{border:0}.range::-webkit-slider-runnable-track{width:100%;height:6px;cursor:pointer;box-shadow:none;background:#f0f2f4;border-radius:200px;border:0 solid transparent;color:transparent;-webkit-transition:all .25s cubic-bezier(0.25, 0, 0, 1);-o-transition:all .25s cubic-bezier(0.25, 0, 0, 1);transition:all .25s cubic-bezier(0.25, 0, 0, 1)}.range::-moz-range-track{width:100%;height:6px;cursor:pointer;box-shadow:none;background:#f0f2f4;border-radius:200px;border:0 solid transparent;color:transparent;-webkit-transition:all .25s cubic-bezier(0.25, 0, 0, 1);-o-transition:all .25s cubic-bezier(0.25, 0, 0, 1);transition:all .25s cubic-bezier(0.25, 0, 0, 1)}.range::-ms-track{width:100%;height:6px;cursor:pointer;box-shadow:none;background:#f0f2f4;border-radius:200px;border:0 solid transparent;color:transparent;-webkit-transition:all .25s cubic-bezier(0.25, 0, 0, 1);-o-transition:all .25s cubic-bezier(0.25, 0, 0, 1);transition:all .25s cubic-bezier(0.25, 0, 0, 1);background:transparent;border-width:5px 0}.range::-ms-fill-lower{box-shadow:none;background:#f0f2f4;border-radius:200px;border:0 solid transparent;color:transparent;-webkit-transition:all .25s cubic-bezier(0.25, 0, 0, 1);-o-transition:all .25s cubic-bezier(0.25, 0, 0, 1);transition:all .25s cubic-bezier(0.25, 0, 0, 1)}.range::-ms-fill-upper{box-shadow:none;background:#f0f2f4;border-radius:200px;border:0 solid transparent;color:transparent;-webkit-transition:all .25s cubic-bezier(0.25, 0, 0, 1);-o-transition:all .25s cubic-bezier(0.25, 0, 0, 1);transition:all .25s cubic-bezier(0.25, 0, 0, 1)}.range::-webkit-slider-thumb{box-shadow:none;border:0;height:16px;width:16px;border-radius:200px;background:#0bb;cursor:pointer;-webkit-transition:all .25s cubic-bezier(0.25, 0, 0, 1);-o-transition:all .25s cubic-bezier(0.25, 0, 0, 1);transition:all .25s cubic-bezier(0.25, 0, 0, 1);-webkit-appearance:none;margin-top:-5px}.range::-moz-range-thumb{box-shadow:none;border:0;height:16px;width:16px;border-radius:200px;background:#0bb;cursor:pointer;-webkit-transition:all .25s cubic-bezier(0.25, 0, 0, 1);-o-transition:all .25s cubic-bezier(0.25, 0, 0, 1);transition:all .25s cubic-bezier(0.25, 0, 0, 1)}.range::-ms-thumb{box-shadow:none;border:0;height:16px;width:16px;border-radius:200px;background:#0bb;cursor:pointer;-webkit-transition:all .25s cubic-bezier(0.25, 0, 0, 1);-o-transition:all .25s cubic-bezier(0.25, 0, 0, 1);transition:all .25s cubic-bezier(0.25, 0, 0, 1)}@supports (-ms-ime-align: auto){.range::-ms-thumb{margin-top:1px}}.range:hover::-webkit-slider-thumb{background:#0aa}.range:focus::-webkit-slider-thumb{background:#0aa}.range:hover::-moz-range-thumb{background:#0aa}.range:focus::-moz-range-thumb{background:#0aa}.range:hover::-ms-thumb{background:#0aa}.range:focus::-ms-thumb{background:#0aa}.range:hover::-webkit-slider-runnable-track{background:#e9ebef}.range:focus::-webkit-slider-runnable-track{background:#e9ebef}.range:hover::-moz-range-track{background:#e9ebef}.range:focus::-moz-range-track{background:#e9ebef}.range:hover::-ms-fill-lower{background:#e9ebef}.range:focus::-ms-fill-lower{background:#e9ebef}.range:hover::-ms-fill-upper{background:#e9ebef}.range:focus::-ms-fill-upper{background:#e9ebef}.breadcrumb-flush{padding:0}.breadcrumb>li:first-child .glyph{position:absolute;right:100%;top:50%;-webkit-transform:translate(-33%, -50%);transform:translate(-33%, -50%)}.breadcrumb>li:before{font-weight:normal;padding:0 .5em;opacity:.5}.card{display:block;border-width:0;background:white;box-shadow:0 0 0 1px rgba(0,30,60,0.03),0 3px 3px -1.5px rgba(0,0,0,0.03);border-radius:4px;display:flex;flex-direction:column}.card>.card-header,.card>.card-footer{flex:0 0 auto}.card>.card-body{flex:1 0 auto}.card.active{box-shadow:0 0 0 1px #0bb,0 15px 15px -7.5px rgba(0,0,0,0.15)}.card-footer,.card-header,.card-body,.card-padding{padding:20px 30px}.card-expand{margin:-20px -30px}.card-header h1,.card-header .h1,.card-header h2,.card-header .h2,.card-header h3,.card-header .h3,.card-header h4,.card-header .h4,.card-header h5,.card-header .h5,.card-header h6,.card-header .h6{margin:0}.card-flush-top{padding-top:0}.card-flush-bottom{padding-bottom:0}.card-flush-vertical{padding-top:0;padding-bottom:0}.card-flush{padding:0}.card-sm{padding:8px 12px}.card-control{display:block}.card-control .btn,.card-control .form-control,.card-control .input-group-addon,.card-control .form-control-static,.card-control .form-grid .form-row .form-label label,.form-grid .form-row .form-label .card-control label{display:block;margin:0 !important;height:4.2857142857rem;padding:1.3928571429rem 30px;border-radius:0;width:100%}.card-control .form-control{background:white}.card-control .form-control:not(:disabled):not(.disabled):hover{background-color:#f0f2f4}.card-control .btn,.card-control .input-group-addon{text-align:center}.card-footer .card-control:first-child .btn,.card-footer .card-control:first-child .form-control,.card-footer .card-control:first-child .input-group-addon,.card-footer .card-control:first-child .form-control-static,.card-footer .card-control:first-child .form-grid .form-row .form-label label,.form-grid .form-row .form-label .card-footer .card-control:first-child label{border-bottom-left-radius:4px}.card-footer .card-control:last-child .btn,.card-footer .card-control:last-child .form-control,.card-footer .card-control:last-child .input-group-addon,.card-footer .card-control:last-child .form-control-static,.card-footer .card-control:last-child .form-grid .form-row .form-label label,.form-grid .form-row .form-label .card-footer .card-control:last-child label{border-bottom-right-radius:4px}.card-body .card-control:first-child .btn,.card-body .card-control:first-child .form-control,.card-body .card-control:first-child .input-group-addon,.card-body .card-control:first-child .form-control-static,.card-body .card-control:first-child .form-grid .form-row .form-label label,.form-grid .form-row .form-label .card-body .card-control:first-child label{border-top-left-radius:4px}.card-body .card-control:last-child .btn,.card-body .card-control:last-child .form-control,.card-body .card-control:last-child .input-group-addon,.card-body .card-control:last-child .form-control-static,.card-body .card-control:last-child .form-grid .form-row .form-label label,.form-grid .form-row .form-label .card-body .card-control:last-child label{border-top-right-radius:4px}.card-toolbar{display:flex;flex-direction:row;flex-wrap:wrap;padding:0}.card-toolbar .card-control{display:block;flex:1 0 auto}.card-form{padding:0;display:table;width:100%}.card-form .card-formrow{display:table-row}.card-form .card-formrow .card-control{display:table-cell;vertical-align:middle}.card-form .card-formrow:not(:last-child) .card-control{border-bottom:1px solid rgba(0,30,60,0.075)}.card-list:not(:first-child){border-top:1px solid rgba(0,30,60,0.075)}.preview{margin:60px 0;background:white;border-radius:4px;display:flex;flex-direction:column;flex:1 0 auto;box-shadow:0 0 0 1px rgba(0,30,60,0.03),0 3px 3px -1.5px rgba(0,0,0,0.03);-webkit-transition:all .25s cubic-bezier(0.25, 0, 0, 1);-o-transition:all .25s cubic-bezier(0.25, 0, 0, 1);transition:all .25s cubic-bezier(0.25, 0, 0, 1)}.preview:first-child{margin-top:0}.preview:last-child{margin-bottom:0}.preview .preview-header{background-position:50% 50%;background-size:cover}.preview .preview-header:before{content:\'\';display:block;padding-bottom:50%}.preview .preview-body{display:flex;flex-direction:column;flex:1 0 auto}.preview .preview-body .preview-footer{flex:0 0 auto;padding:20px 30px}.preview .preview-body .preview-text{flex:1 0 auto;padding:20px 30px}.preview .preview-body .preview-text *{margin-top:0;margin-bottom:0}.preview .preview-body .preview-text h1,.preview .preview-body .preview-text .h1,.preview .preview-body .preview-text h2,.preview .preview-body .preview-text .h2,.preview .preview-body .preview-text h3,.preview .preview-body .preview-text .h3,.preview .preview-body .preview-text h4,.preview .preview-body .preview-text .h4,.preview .preview-body .preview-text h5,.preview .preview-body .preview-text .h5,.preview .preview-body .preview-text h6,.preview .preview-body .preview-text .h6{margin-bottom:20px}.preview .preview-body .preview-text ~ .preview-footer{padding-top:0}.preview.preview-link:hover,.preview.preview-link:focus{box-shadow:0 0 0 1px rgba(0,30,60,0.03),0 15px 15px -7.5px rgba(0,0,0,0.15)}.preview.preview-vertical .preview-header{flex:0 0 auto}.preview.preview-vertical .preview-body{flex:1 0 auto}.preview.preview-vertical .preview-header-grow{flex:1 0 auto}.preview.preview-vertical .preview-header-grow ~ .preview-body{flex:0 0 auto}.preview.preview-horizontal{display:flex;flex-direction:row}.preview.preview-horizontal .preview-header{flex:1 1 120px}.preview.preview-horizontal .preview-body{flex:3 1 260px}.preview:not(.preview-vertical):not(.preview-horizontal){display:flex;flex-direction:row;flex-wrap:wrap}.preview:not(.preview-vertical):not(.preview-horizontal) .preview-header{flex:1 0 120px}.preview:not(.preview-vertical):not(.preview-horizontal) .preview-body{flex:3 1 260px}.loading{text-align:center;margin:20px 0}.loading:after{margin:0 auto;content:\'\';display:block;font-size:30px;width:1em;height:1em;border-radius:50%;border:1px solid;border-top-color:rgba(0,30,60,0.03);border-right-color:rgba(0,30,60,0.03);-webkit-animation:spin .5s 0s linear infinite;-o-animation:spin .5s 0s linear infinite;animation:spin .5s 0s linear infinite}@-webkit-keyframes spin{0%{-webkit-transform:rotate(0);transform:rotate(0)}100%{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}@keyframes spin{0%{-webkit-transform:rotate(0);transform:rotate(0)}100%{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}.loading.loading-inline{height:10px;display:inline-block;margin:0 .375em 0 0;vertical-align:middle}.loading.loading-inline-after{margin:0 0 0 .375em}.loading.loading-inline:after{margin:-10px 0}.loading.loading-small.loading-inline{top:-1px}.loading.loading-small:after{font-size:12px;margin:-1px auto}.btn .loading:after{color:inherit}.loading-overlay{background:#f9fafb;border-radius:4px}.loading-overlay>*{pointer-events:none;opacity:.15}.loading-overlay .loading{display:block;position:absolute;width:100%;height:100%;top:0;left:0;margin:0;opacity:1}.loading-overlay .loading:after{display:block;position:absolute;left:0;top:0;bottom:0;right:0;margin:auto}.message{margin:20px 0}.message .message-content{display:flex;flex-direction:row}.message .message-content>*{padding:0 .5rem}.message:not(.message-secondary) .message-content .message-header{padding-left:0}.message:not(.message-secondary) .message-content .message-body{padding-right:4rem}.message:not(.message-secondary) .message-content .message-body .message-text{border-top-left-radius:4px}.message.message-secondary .message-content{-ms-flex-pack:end;justify-content:flex-end}.message.message-secondary .message-content .message-header{padding-right:0}.message.message-secondary .message-content .message-body{padding-left:4rem}.message.message-secondary .message-content .message-body .message-text{border-top-right-radius:4px}.message-header{flex:0 0 auto}.message-secondary .message-header{order:2}.message-header .message-avatar .avatar{font-size:2.5rem}.message-body{flex:0 1 auto}.message-body .message-text{background:#f0f2f4;padding:1.2857142857rem 1.875rem;border-radius:1.333em}.message-blue .message-body .message-text{background:#0bb;color:white}.message-green .message-body .message-text{background:#7ec631;color:white}.message-purple .message-body .message-text{background:#7f6cc5;color:white}.toolbar a{display:block}.toolbar .toolbar-content{display:flex;flex-direction:row;flex-wrap:wrap;-ms-flex-align:center;align-items:center}.toolbar .toolbar-content .toolbar-item{flex:0 0 auto}.toolbar .toolbar-content .toolbar-item>.btn{width:100%}.toolbar .toolbar-content .toolbar-item>.toolbar-link{padding:1rem 1.5rem}.toolbar .toolbar-content .toolbar-gap{flex:1000 1 auto}.toolbar-fill .btn{border-radius:0}.toolbar-fill .toolbar-content>.btn,.toolbar-fill .toolbar-content .toolbar-item{flex:1 0 auto}.toolbar-separate .toolbar-content{margin:-.375rem}.toolbar-separate .toolbar-content .toolbar-item{margin:.375rem}.toolbar-fixed .toolbar-content>.btn,.toolbar-fixed .toolbar-content .toolbar-item{flex:1 0 0px}.title{margin-left:-10px;margin-right:-10px;display:flex;flex-direction:row;flex-wrap:wrap;-ms-flex-pack:justify;justify-content:space-between;-ms-flex-align:center;align-items:center}.title-buffer{margin-top:60px;margin-bottom:60px}.title>*{padding:5px 0;margin:0 10px}.title-header{flex:0 1 auto}.title-body{flex:1 1 auto}.title-actions{flex:0 1 auto}.title-fix{min-height:50px}.title:first-child{margin-top:-5px}.title:last-child{margin-bottom:-5px}.list{color:#8b969e}.list-item:not(:first-child){border-top:1px solid rgba(0,30,60,0.075)}.list-item:first-child .list-row{border-top-right-radius:4px;border-top-left-radius:4px}.list-item:last-child .list-row{border-bottom-right-radius:4px;border-bottom-left-radius:4px}.list-link{display:block;position:absolute;width:100%;height:100%;top:0;left:0;z-index:2}.list-link:hover+.list-row,.list-link:focus+.list-row{background:#f9fafb}.list-item.active .list-row{background:#0bb}.list-item.active .list-row h1,.list-item.active .list-row .h1,.list-item.active .list-row h2,.list-item.active .list-row .h2,.list-item.active .list-row h3,.list-item.active .list-row .h3,.list-item.active .list-row h4,.list-item.active .list-row .h4,.list-item.active .list-row h5,.list-item.active .list-row .h5,.list-item.active .list-row h6,.list-item.active .list-row .h6,.list-item.active .list-row{color:#fff}.list-row{display:flex;flex-direction:row;-ms-flex-align:center;align-items:center;-webkit-transition:all .25s cubic-bezier(0.25, 0, 0, 1);-o-transition:all .25s cubic-bezier(0.25, 0, 0, 1);transition:all .25s cubic-bezier(0.25, 0, 0, 1)}.list-row>*{flex:1 1 0px;padding:1.5rem 2rem}.list-row>* *{margin-top:0;margin-bottom:0}.list-row>* a{z-index:3}.list-row-group{padding-left:0;padding-right:1rem}.list-row-graphic,.list-row-arrow{flex:0 0 auto}.list-row-graphic>.glyph,.list-row-arrow>.glyph{opacity:.3333333333}.list-row-sm>*{padding-top:12px;padding-bottom:12px}.list-row-xs>*{padding-top:7px;padding-bottom:7px}.card-list .list .list-row>*{padding-left:30px;paddign-right:30px}.list-clean{margin:0;padding:0;border:0;list-style-type:none}.list-clean li{margin:0;padding:0;list-style-type:none}.list-columns-2{columns:2}.status{display:flex;flex-direction:row}.status-text{flex:1 1 auto;white-space:nowrap;min-width:0}.status-icon{flex:0 0 auto}.dot{display:inline-block;background:currentColor;width:8px;height:8px;border-radius:50%}.dot-default{color:#8b969e}.dot-success{color:#5fb825}.dot-info{color:#0aa}.dot-warning{color:#ff821d}.dot-danger{color:#ff4f39}.table-master-detail-toggle{-webkit-transition:all .25s cubic-bezier(0.25, 0, 0, 1);-o-transition:all .25s cubic-bezier(0.25, 0, 0, 1);transition:all .25s cubic-bezier(0.25, 0, 0, 1)}.table-master-detail:not(.open) .table-detail{display:none}.table-master-detail.open .table-master td,.table-master-detail.open .table-master th{background:white !important}.table-master-detail.open .table-master-detail-toggle{-webkit-transform:rotate(90deg);transform:rotate(90deg)}.form-grid{display:table;width:100%}.form-grid .form-row-group{display:table-row-group}.form-grid .form-row{display:table-row}.form-grid .form-row .form-row{display:table;width:100%}.form-grid .form-row .form-label,.form-grid .form-row .form-response{display:table-cell;padding:7px;vertical-align:top}.form-grid .form-row .form-label:first-child,.form-grid .form-row .form-response:first-child{padding-left:0}.form-grid .form-row .form-label:last-child,.form-grid .form-row .form-response:last-child{padding-right:0}.form-grid .form-row .form-label .form-row>*,.form-grid .form-row .form-response .form-row>*{padding-top:0;padding-bottom:0}.form-grid .form-row .form-label{white-space:nowrap;width:1px}.form-grid .form-row .form-response .help-block{margin:0;top:3px}.form-grid .form-row .form-response.form-response-short{width:1px;white-space:nowrap}.form-grid .form-row .form-response .form-response,.form-grid .form-row .form-response .form-label{padding-top:0;padding-bottom:0}.form-grid .form-row>.form-label:first-child{padding-right:7px}.form-grid:not(.form-grid-left) .form-label{text-align:right}.matrix{margin:0 -15px;display:flex;flex-direction:row;-ms-flex-align:stretch;align-items:stretch;flex-wrap:wrap}.matrix.matrix-nowrap{flex-wrap:nowrap}.matrix .matrix-item{padding:15px;display:flex;flex-direction:column;flex:1 1 260px}.matrix .matrix-item>*{flex:1 1 auto;margin:0}.waterfall{margin:0 -15px;-webkit-column-count:4;column-count:4;-webkit-column-gap:0;column-gap:0;-webkit-column-width:320px;column-width:320px}.waterfall .waterfall-item{-webkit-column-break-inside:avoid;page-break-inside:avoid;break-inside:avoid-column;padding:15px}.waterfall .waterfall-item>*{margin:0}.mosaic{display:flex;flex-direction:column;-ms-flex-align:stretch;align-items:stretch}.mosaic-buffer{margin:0 -15px}.mosaic-row{display:flex;flex-direction:row;flex-wrap:wrap;flex:1 1 auto}.mosaic-column{display:flex;flex-direction:column;flex:1 1 320px}.mosaic-column-1{flex:1 1 320px}.mosaic-column-2{flex:1 1 640px}.mosaic-column-3{flex:1 1 960px}.mosaic-column-4{flex:1 1 1280px}.mosaic-column-5{flex:1 1 1600px}.mosaic-column-6{flex:1 1 1920px}.mosaic-column-7{flex:1 1 2240px}.mosaic-column-8{flex:1 1 2560px}.mosaic-column-9{flex:1 1 2880px}.mosaic-column-10{flex:1 1 3200px}.mosaic-column-11{flex:1 1 3520px}.mosaic-column-12{flex:1 1 3840px}.mosaic-item{display:flex;flex-direction:column}.mosaic-item>*{flex:1 0 auto;margin:0}.mosaic-column>.mosaic-item{flex:1 1 auto}.mosaic-row>.mosaic-item{flex:1 0 260px}.mosaic-buffer .mosaic-item{margin:15px}.flex-row{display:flex;flex-direction:row;flex-wrap:wrap}.flex-column{display:flex;flex-direction:column;flex:1 1 320px}.flex-column-1{flex:1 1 320px}.flex-column-2{flex:1 1 640px}.flex-column-3{flex:1 1 960px}.flex-column-4{flex:1 1 1280px}.flex-column-5{flex:1 1 1600px}.flex-column-6{flex:1 1 1920px}.flex-column-7{flex:1 1 2240px}.flex-column-8{flex:1 1 2560px}.flex-column-9{flex:1 1 2880px}.flex-column-10{flex:1 1 3200px}.flex-column-11{flex:1 1 3520px}.flex-column-12{flex:1 1 3840px}.flex-nowrap{flex-wrap:nowrap}.flex-buffer{margin:0 -15px}.flex-flush{margin-top:-15px;margin-bottom:-15px}.flex-column>.flex-item{flex:1 1 auto}.flex-row>.flex-item{flex:1 0 260px}.flex-buffer .flex-item{margin:15px}.flex-column>.flex-item-sm{flex:1 1 auto}.flex-row>.flex-item-sm{flex:1 0 130px}.flex-buffer .flex-item-sm{margin:7.5px}.flex-grow{flex:1 0 auto}.flex-auto{flex:0 0 auto}.flex-shrink{flex:0 1 auto}.album{margin:0 -30px;visibility:hidden}.album.album-ready{visibility:visible}.album .album-content{display:flex;flex-direction:row;flex-wrap:wrap;-ms-flex-align:stretch;align-items:stretch}.album .album-content .album-image{flex:1 1 auto;margin:30px}.album .album-content .album-image img{margin:0;display:block;width:100%;height:auto;display:block;border-width:0;background:white;box-shadow:0 0 0 1px rgba(0,30,60,0.03),0 3px 3px -1.5px rgba(0,0,0,0.03);border-radius:4px}.limit-1>*:nth-child(n+2){display:none !important}.limit-2>*:nth-child(n+3){display:none !important}.limit-3>*:nth-child(n+4){display:none !important}.limit-4>*:nth-child(n+5){display:none !important}.limit-5>*:nth-child(n+6){display:none !important}.limit-6>*:nth-child(n+7){display:none !important}.limit-7>*:nth-child(n+8){display:none !important}.limit-8>*:nth-child(n+9){display:none !important}.limit-9>*:nth-child(n+10){display:none !important}.limit-10>*:nth-child(n+11){display:none !important}.limit-11>*:nth-child(n+12){display:none !important}.limit-12>*:nth-child(n+13){display:none !important}.grid{display:grid;grid-gap:2em;grid-template-columns:repeat(auto-fill, minmax(200px, 1fr))}html.cssgridlegacy .grid{display:flex;flex-direction:row;flex-wrap:wrap;padding:1em}html.cssgridlegacy .grid>*{flex:1 0 200px;max-width:320px;padding:1em}.section-target{position:absolute;visibility:hidden;top:-4em}.section{padding:.75em 0}.section-target:target+.section-content .panel{box-shadow:0 0 0 1px rgba(0,30,60,0.03),0 30px 30px -15px rgba(0,0,0,0.3)}.framework{-ms-display:grid;display:grid;height:100%}.framework>*{padding:1em 1.5em}.framework .framework-header{background:#0bb;color:white}.framework .framework-nav{background:#f0f2f4}.framework .framework-menu{background:#f9fafb}.framework .framework-content{background:white}.framework .framework-content{padding:0;overflow:auto;display:flex;flex-direction:column;-ms-flex-align:stretch;align-items:stretch}.framework .framework-content>*{padding:1em 1.5em}.framework .framework-content .framework-actions{position:sticky;top:0;z-index:2;background:white}@media (min-width: 961px){.framework{-ms-grid-rows:60px auto;grid-template-rows:60px auto;-ms-grid-columns:60px 240px auto;grid-template-columns:60px 240px auto}.framework .framework-header{-ms-grid-row:1;grid-row:1;-ms-grid-column:1;-ms-grid-column-span:3;grid-column:1 / 4}.framework .framework-nav{-ms-grid-row:2;grid-row:2;-ms-grid-column:1;grid-column:1}.framework .framework-menu{-ms-grid-row:2;grid-row:2;-ms-grid-column:2;grid-column:2}.framework .framework-content{-ms-grid-row:2;grid-row:2;-ms-grid-column:3;grid-column:3}}@media (max-width: 960px){.framework{-ms-grid-rows:60px auto;grid-template-rows:60px auto;-ms-grid-columns:auto;grid-template-columns:auto}.framework .framework-header{-ms-grid-row:1;grid-row:1;-ms-grid-column:1;grid-column:1}.framework .framework-nav{display:none}.framework .framework-menu{display:none}.framework .framework-content{-ms-grid-row:2;grid-row:2;-ms-grid-column:1;grid-column:1}.framework .framework-content .framework-actions{order:-1}}.app{display:block;position:absolute;width:100%;height:100%;top:0;left:0;position:fixed;min-width:960px}.app-row{display:flex;flex-direction:row;-ms-flex-align:stretch;align-items:stretch}.app-column{display:flex;flex-direction:column;-ms-flex-align:stretch;align-items:stretch}.app-middle{-ms-flex-align:center;align-items:center}.app-header,.app-footer{flex:0 0 auto}.app-body{flex:1 0 0px}.app-navbar{height:calc( 2.8571428571rem + 40px );z-index:3;background:white}.app-menu,.app-sidebar,.app-content{-webkit-transition:all .25s cubic-bezier(0.25, 0, 0, 1);-o-transition:all .25s cubic-bezier(0.25, 0, 0, 1);transition:all .25s cubic-bezier(0.25, 0, 0, 1);background:#f9fafb}.app-menu,.app-sidebar{width:20%;min-width:300px;flex:0 0 auto}.app-content{flex:1 0 0px}.app-content a,.app-content .a{color:#0bb}.app-content a:hover,.app-content a:focus,.app-content .a:hover,.app-content .a:focus{color:#0aa}.app-overlay{background:#f0f2f4;position:absolute;display:none;z-index:2;right:-100vw;left:-100vw;bottom:0;top:0;opacity:.9}.app-menu .app-overlay{left:100%;box-shadow:inset 5px 0 10px -5px rgba(0,0,0,0.2)}.app-sidebar .app-overlay{right:100%;box-shadow:inset -5px 0 10px -5px rgba(0,0,0,0.2)}.app-icn:not(:first-child){padding-left:20px}.app-icn:not(:last-child){padding-right:20px}.app-scroll{display:block;position:absolute;width:100%;height:100%;top:0;left:0;overflow:auto}html.touch .app-scroll{overflow:scroll;-webkit-overflow-scrolling:touch}.app-pad{padding:20px 30px}.app-pad,.app-pad-v{padding-top:20px;padding-bottom:20px}.app-pad,.app-pad-h{padding-left:30px;padding-right:30px}.app-sticky{top:0;z-index:2;position:sticky;background:#f9fafb}.app-frame{margin:auto}@media (min-width: 961px){.app-frame{width:90%}}.app-shadow{box-shadow:0 1px 0 rgba(0,16,32,0.05)}.app-flush,.app-flush-top{padding-top:0}.app-flush,.app-flush-bottom{padding-bottom:0}.app-flush,.app-flush-left{padding-left:0}.app-flush,.app-flush-right{padding-right:0}.app-logo{width:100px}.layout{width:100vw;height:100vh;min-width:960px;overflow:auto}html.touch .layout{overflow:scroll;-webkit-overflow-scrolling:touch}.layout-pad{padding-top:20px;padding-bottom:20px}.layout-ide{height:calc(100vh - 53px)}.layout-pad-l,.layout-pad-x{padding-left:20px}.layout-pad-r,.layout-pad-x{padding-right:20px}.layout-sticky{position:sticky;z-index:20;top:0}.layout-frame{margin:auto;width:90%;padding-left:20px;padding-right:20px}.layout-menu .layout-frame{padding-right:0}.layout-navigation{box-shadow:0 0 0 1px rgba(0,30,60,0.03),0 3px 3px -1.5px rgba(0,0,0,0.03);background:white;height:52px;position:absolute;top:0;left:0;right:0}.layout-content{position:absolute;top:53px;bottom:0;left:0;right:0;overflow:auto}html.touch .layout-content{overflow:scroll;-webkit-overflow-scrolling:touch}.layout-row{display:flex;flex-direction:row}.layout-alert{flex:0 0 100%}.layout-menu{flex:0 0 25%;max-width:300px;min-width:0}.layout-body{flex:1 1 auto;box-shadow:0 -1px 0 rgba(0,30,60,0.03)}.ide{overflow:hidden;font-size:.9285714286rem;display:block;position:absolute;width:100%;height:100%;top:0;left:0;background:white}.ide-pad{padding:14px 16px !important}.ide-pad-l,.ide-pad-x{padding-left:16px !important}.ide-pad-r,.ide-pad-x{padding-right:16px !important}.ide-panels{display:block;position:absolute;width:100%;height:100%;top:0;left:0}.ide-panels,.ide-panel-group{display:flex;flex-direction:row;background:inherit}.ide-panels.ide-vertical,.ide-panel-group.ide-vertical{display:flex;flex-direction:column}@media (max-width: 960px){.ide-panels,.ide-panel-group{display:flex;flex-direction:column}}.ide-panel,.ide-panel-group{flex:1 0 0px}.ide-panel{-webkit-transition:all .25s cubic-bezier(0.25, 0, 0, 1);-o-transition:all .25s cubic-bezier(0.25, 0, 0, 1);transition:all .25s cubic-bezier(0.25, 0, 0, 1);-webkit-transition-property:box-shadow,transform;transition-property:box-shadow,transform;box-shadow:0 0 0 2px transparent;min-height:200px;min-width:200px;background:inherit;display:flex;flex-direction:column}.ide-horizontal .ide-panel{height:auto !important}.ide-horizontal .ide-panel[style*="width"]{flex:0 0 auto}.ide-vertical .ide-panel{width:auto !important}.ide-vertical .ide-panel[style*="height"]{flex:0 0 auto}@media (max-width: 960px){.ide-panel{width:auto !important}}.ide-panel-sm{flex:0 0 280px}.ide-panel:before{content:\'\';display:block;position:absolute;left:0;top:0;bottom:0;right:0;box-shadow:0 0 0 1px currentColor;opacity:.125}.ide-panel:focus{z-index:3;box-shadow:0 0 0 2px #0bb,0 10px 20px rgba(0,30,60,0.3);-webkit-transform:translate(10px, -10px);transform:translate(10px, -10px);border-radius:4px}.ide-panel>*:first-child{border-top-left-radius:inherit;border-top-right-radius:inherit}.ide-panel>*:last-child{border-bottom-left-radius:inherit;border-bottom-right-radius:inherit}.ide-panel-header,.ide-panel-footer{flex:0 0 auto;background:rgba(0,30,60,0.03)}.ide-panel-header:before,.ide-panel-header:after,.ide-panel-footer:before,.ide-panel-footer:after{content:\'\';display:block;position:absolute;left:0;top:0;bottom:0;right:0;background:currentColor;opacity:.0075}.ide-panel-header:after,.ide-panel-footer:after{height:1px;opacity:.06}.ide-panel-header .btn:focus,.ide-panel-header .btn:active,.ide-panel-footer .btn:focus,.ide-panel-footer .btn:active{z-index:auto}.ide-panel-header:after{top:auto}.ide-panel-footer:before{display:none}.ide-panel-footer:after{bottom:auto}.ide-panel-body{color:#313539;background:inherit;flex:1 1 auto}.ide-panel-scroll{display:block;position:absolute;width:100%;height:100%;top:0;left:0;overflow:auto}html.touch .ide-panel-scroll{overflow:scroll;-webkit-overflow-scrolling:touch}.ide-panel-scroll::-webkit-scrollbar{background:#e9ebef;width:7px;height:7px}.ide-panel-scroll::-webkit-scrollbar-button{display:none}.ide-panel-scroll::-webkit-scrollbar-track{background:transparent}.ide-panel-scroll::-webkit-scrollbar-track-piece{background:transparent}.ide-panel-scroll::-webkit-scrollbar-thumb{background:#d7dbdf;border-radius:200px ;-webkit-transition:all .25s cubic-bezier(0.25, 0, 0, 1);-o-transition:all .25s cubic-bezier(0.25, 0, 0, 1);transition:all .25s cubic-bezier(0.25, 0, 0, 1)}.ide-panel-scroll::-webkit-scrollbar-corner{background:#e9ebef}.ide-panel-scroll::-webkit-resizer{background:transparent}.ide-panel-scroll:hover::-webkit-scrollbar-thumb{background:#c1c7cd}.ide-panel-handle{display:block;position:absolute;top:0;bottom:0;right:0;background:white;width:10px}.ide-controls{display:table;width:100%;height:44px}.ide-controls>*{display:table-cell;vertical-align:middle}.ide-control{white-space:nowrap}.ide-control-sm{width:1px}.ide-control-link,.ide-control-text{display:block;padding:.6785714286rem 0}.ide-control-link{padding-left:1.25rem;padding-right:1.25rem;text-align:center}.ide-control-inline-link{display:inline-block;padding:.6785714286rem 0;text-align:center}.ide-control.active{box-shadow:inset 0 -1px 0 #0bb}.ide-control.active .ide-control-link,.ide-control.active .ide-control-inline-link{color:inherit;font-weight:bold}.ide-list{padding:7px 0}.ide-list-item{display:block;padding:7px 16px;color:inherit;box-shadow:0 1px 0 rgba(0,30,60,0.03);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.ide-list-item:hover,.ide-list-item:focus{color:inherit}.ide-list-item-footer{padding:.375em 0;display:flex;flex-direction:row;-ms-flex-pack:justify;justify-content:space-between}.ide-interactive:hover,.ide-interactive:focus{background:#f9fafb}.ide-active{background:#e4e6eb !important}.ide-code{color:inherit;resize:none;padding:0;background:transparent}.ide table{white-space:nowrap}.ide table td:first-child,.ide table th:first-child{padding-left:16px}.ide table td:last-child,.ide table th:last-child{padding-right:16px}.ide table td{max-width:300px;overflow:hidden;text-overflow:ellipsis}.ide-table-heading{color:inherit;position:sticky;top:0;z-index:3;background:white;box-shadow:0 1px 0 rgba(0,30,60,0.03)}.ide-dark{color:white}.ide-dark,.ide-dark .ide-table-heading{background:#002934}.ide-dark .ide-panel-body{color:inherit}.ide-dark .ide-panel:focus,.ide-dark .ide-panel-header,.ide-dark .ide-panel-footer,.ide-dark .table-striped>tbody>tr:nth-of-type(odd){background:#00303d}.ide-dark .ide-active{background:#005e7a !important;color:white !important}.ide-dark .ide-table-heading,.ide-dark .ide-list-item{box-shadow:0 1px 0 rgba(255,255,255,0.1)}.ide-dark .ide-panel-header .btn-default,.ide-dark .ide-panel-footer .btn-default{color:#fff;background-color:#005e7a;border-color:#005e7a}.ide-dark .ide-panel-header .btn-default:focus,.ide-dark .ide-panel-header .btn-default.focus,.ide-dark .ide-panel-footer .btn-default:focus,.ide-dark .ide-panel-footer .btn-default.focus{color:#fff;background-color:#007699}.ide-dark .ide-panel-header .btn-default:hover,.ide-dark .ide-panel-footer .btn-default:hover{color:#fff;background-color:#007699}.ide-dark .ide-panel-header .btn-default:active,.ide-dark .ide-panel-header .btn-default.active,.open>.ide-dark .ide-panel-header .btn-default.dropdown-toggle,.ide-dark .ide-panel-footer .btn-default:active,.ide-dark .ide-panel-footer .btn-default.active,.open>.ide-dark .ide-panel-footer .btn-default.dropdown-toggle{color:#fff;background-color:#007699}.ide-dark .ide-panel-header .btn-default:active:hover,.ide-dark .ide-panel-header .btn-default:active:focus,.ide-dark .ide-panel-header .btn-default:active.focus,.ide-dark .ide-panel-header .btn-default.active:hover,.ide-dark .ide-panel-header .btn-default.active:focus,.ide-dark .ide-panel-header .btn-default.active.focus,.open>.ide-dark .ide-panel-header .btn-default.dropdown-toggle:hover,.open>.ide-dark .ide-panel-header .btn-default.dropdown-toggle:focus,.open>.ide-dark .ide-panel-header .btn-default.dropdown-toggle.focus,.ide-dark .ide-panel-footer .btn-default:active:hover,.ide-dark .ide-panel-footer .btn-default:active:focus,.ide-dark .ide-panel-footer .btn-default:active.focus,.ide-dark .ide-panel-footer .btn-default.active:hover,.ide-dark .ide-panel-footer .btn-default.active:focus,.ide-dark .ide-panel-footer .btn-default.active.focus,.open>.ide-dark .ide-panel-footer .btn-default.dropdown-toggle:hover,.open>.ide-dark .ide-panel-footer .btn-default.dropdown-toggle:focus,.open>.ide-dark .ide-panel-footer .btn-default.dropdown-toggle.focus{color:#fff;background-color:#007699}.ide-dark .ide-panel-header .btn-default:active,.ide-dark .ide-panel-header .btn-default.active,.open>.ide-dark .ide-panel-header .btn-default.dropdown-toggle,.ide-dark .ide-panel-footer .btn-default:active,.ide-dark .ide-panel-footer .btn-default.active,.open>.ide-dark .ide-panel-footer .btn-default.dropdown-toggle{background-image:none}.ide-dark .ide-panel-header .btn-default.disabled:hover,.ide-dark .ide-panel-header .btn-default.disabled:focus,.ide-dark .ide-panel-header .btn-default.disabled.focus,.ide-dark .ide-panel-header .btn-default[disabled]:hover,.ide-dark .ide-panel-header .btn-default[disabled]:focus,.ide-dark .ide-panel-header .btn-default[disabled].focus,fieldset[disabled] .ide-dark .ide-panel-header .btn-default:hover,fieldset[disabled] .ide-dark .ide-panel-header .btn-default:focus,fieldset[disabled] .ide-dark .ide-panel-header .btn-default.focus,.ide-dark .ide-panel-footer .btn-default.disabled:hover,.ide-dark .ide-panel-footer .btn-default.disabled:focus,.ide-dark .ide-panel-footer .btn-default.disabled.focus,.ide-dark .ide-panel-footer .btn-default[disabled]:hover,.ide-dark .ide-panel-footer .btn-default[disabled]:focus,.ide-dark .ide-panel-footer .btn-default[disabled].focus,fieldset[disabled] .ide-dark .ide-panel-footer .btn-default:hover,fieldset[disabled] .ide-dark .ide-panel-footer .btn-default:focus,fieldset[disabled] .ide-dark .ide-panel-footer .btn-default.focus{background-color:#005e7a;border-color:#005e7a}.ide-dark .ide-panel-header .btn-default .badge,.ide-dark .ide-panel-footer .btn-default .badge{color:#005e7a;background-color:#fff}.ide-dark .ide-panel-scroll::-webkit-scrollbar{background:#00475c;width:7px;height:7px}.ide-dark .ide-panel-scroll::-webkit-scrollbar-button{display:none}.ide-dark .ide-panel-scroll::-webkit-scrollbar-track{background:transparent}.ide-dark .ide-panel-scroll::-webkit-scrollbar-track-piece{background:transparent}.ide-dark .ide-panel-scroll::-webkit-scrollbar-thumb{background:#065b74;border-radius:200px ;-webkit-transition:all .25s cubic-bezier(0.25, 0, 0, 1);-o-transition:all .25s cubic-bezier(0.25, 0, 0, 1);transition:all .25s cubic-bezier(0.25, 0, 0, 1)}.ide-dark .ide-panel-scroll::-webkit-scrollbar-corner{background:#00475c}.ide-dark .ide-panel-scroll::-webkit-resizer{background:transparent}.ide-dark .ide-panel-scroll:hover::-webkit-scrollbar-thumb{background:#087291}.ide-dark .ace_scrollbar::-webkit-scrollbar{background:#00475c;width:7px;height:7px}.ide-dark .ace_scrollbar::-webkit-scrollbar-button{display:none}.ide-dark .ace_scrollbar::-webkit-scrollbar-track{background:transparent}.ide-dark .ace_scrollbar::-webkit-scrollbar-track-piece{background:transparent}.ide-dark .ace_scrollbar::-webkit-scrollbar-thumb{background:#065b74;border-radius:200px ;-webkit-transition:all .25s cubic-bezier(0.25, 0, 0, 1);-o-transition:all .25s cubic-bezier(0.25, 0, 0, 1);transition:all .25s cubic-bezier(0.25, 0, 0, 1)}.ide-dark .ace_scrollbar::-webkit-scrollbar-corner{background:#00475c}.ide-dark .ace_scrollbar::-webkit-resizer{background:transparent}.ide-dark .ace_scrollbar:hover::-webkit-scrollbar-thumb{background:#087291}.ide-dark .ide-code::-webkit-scrollbar{background:#00475c;width:7px;height:7px}.ide-dark .ide-code::-webkit-scrollbar-button{display:none}.ide-dark .ide-code::-webkit-scrollbar-track{background:transparent}.ide-dark .ide-code::-webkit-scrollbar-track-piece{background:transparent}.ide-dark .ide-code::-webkit-scrollbar-thumb{background:#065b74;border-radius:200px ;-webkit-transition:all .25s cubic-bezier(0.25, 0, 0, 1);-o-transition:all .25s cubic-bezier(0.25, 0, 0, 1);transition:all .25s cubic-bezier(0.25, 0, 0, 1)}.ide-dark .ide-code::-webkit-scrollbar-corner{background:#00475c}.ide-dark .ide-code::-webkit-resizer{background:transparent}.ide-dark .ide-code:hover::-webkit-scrollbar-thumb{background:#087291}.menu{margin:0 -5px;font-size:.9285714286rem}.menu ul{margin:0;padding:0;border:0;list-style-type:none;display:none}.menu ul li{margin:0;padding:0;list-style-type:none}.menu ul ul{margin-left:23px}.menu a{color:#3f464e;display:block;padding:3px 5px;border-radius:4px;text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.menu a.menu-tree{color:#8b969e}.menu a.menu-main{font-size:1rem;margin-bottom:.25em;font-weight:bold;color:#313539}.menu a.active:not(.not-active){color:#313539}.menu a:hover,.menu a:focus{background:#f0f2f4;color:#313539}.menu a.menu-node.active:not(.not-active),.menu a.menu-link.active:not(.not-active){background:#e9ebef;color:#313539}.menu .icn{margin-right:8px}.menu>ul,.menu .active+ul{display:block}a:not(.active) .menu-icon-on{display:none}a.active .menu-icon-off{display:none}.results{font-size:.9285714286rem}.results .result{display:block;color:inherit;text-decoration:none !important;padding:15px 20px;margin:0 -20px;border-radius:4px}.results .result:hover,.results .result:focus{color:inherit}.results .result:hover,.results .result:focus{background:#f0f2f4}.results .result-content{display:flex;flex-direction:row}.results .result-content .result-icn{flex:0 0 auto;color:#8b969e;opacity:.5;padding:2px 20px 0 0}.results .result-content .result-body{flex:1 1 auto}.results .result-content .result-body>*{margin-top:.25em;margin-bottom:.25em}.results .result-content .result-body>*:first-child{margin-top:0}.results .result-content .result-body>*:last-child{margin-bottom:0}.filename{display:flex;flex-direction:row}.filename .filename-ellip{flex:0 1 auto;min-width:0;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.filename .filename-normal{flex:0 0 auto}.launcher{z-index:30;position:fixed;bottom:30px;right:30px}.launcher:not(.on) .launcher-content{display:none}.launcher.on .launcher-btn{display:none}.launcher-btn{font-size:0}.launcher-btn .btn{box-shadow:0 0 0 1px rgba(0,30,60,0.03),0 20px 20px -10px rgba(0,0,0,0.2)}.launcher-btn .btn:not(:last-child){margin-right:10px}.launcher-btn .btn:hover,.launcher-btn .btn:focus{box-shadow:0 0 0 1px rgba(0,30,60,0.03),0 40px 40px -20px rgba(0,0,0,0.4)}.launcher-content{position:fixed;height:100%;border:20px solid transparent;top:0;right:0}@media (min-width: 961px){.launcher[data-launcher="sidebar"] .launcher-content{width:340px;border-left:0}}@media (max-width: 960px){.launcher[data-launcher="sidebar"] .launcher-content{width:100vw}}.launcher[data-launcher="sidebar"] .launcher-content .launcher-hide-sidebar:not(.visible){display:none}.launcher[data-launcher="fullscreen"] .launcher-content{width:100vw}.launcher[data-launcher="fullscreen"] .launcher-content .launcher-hide-fullscreen:not(.visible){display:none}.launcher-window{display:flex;flex-direction:column;overflow:auto;width:100%;height:100%;color:white;background:#005e7a;border-radius:4px;box-shadow:-10px 5px 20px 5px rgba(0,0,0,0.1),0 20px 20px -10px rgba(0,0,0,0.3)}.launcher-window h1,.launcher-window .h1,.launcher-window h2,.launcher-window .h2,.launcher-window h3,.launcher-window .h3,.launcher-window h4,.launcher-window .h4,.launcher-window h5,.launcher-window .h5,.launcher-window h6,.launcher-window .h6{color:inherit}html.touch .launcher-window{overflow:scroll;-webkit-overflow-scrolling:touch}.launcher-window .launcher-header,.launcher-window .launcher-footer{flex:0 0 auto;display:flex;flex-direction:row;-ms-flex-align:center;align-items:center}.launcher-window .launcher-header .launcher-spacer,.launcher-window .launcher-footer .launcher-spacer{flex:1 0 0px}.launcher-window .launcher-header .launcher-cell,.launcher-window .launcher-footer .launcher-cell{flex:1 1 auto;min-width:0;padding:20px}.launcher-window .launcher-header .launcher-cell.launcher-flush,.launcher-window .launcher-footer .launcher-cell.launcher-flush{padding:0}.launcher-window .launcher-header .launcher-cell .field-label,.launcher-window .launcher-header .launcher-cell .field-input,.launcher-window .launcher-footer .launcher-cell .field-label,.launcher-window .launcher-footer .launcher-cell .field-input{padding-left:20px;padding-right:20px;border-radius:0 !important;box-shadow:none !important}.launcher-window .launcher-header .launcher-cell .field-input,.launcher-window .launcher-footer .launcher-cell .field-input{background-position:calc(100% - 1.25rem - 5px) 50%}.launcher-window .launcher-header .launcher-actions,.launcher-window .launcher-footer .launcher-actions{flex:0 0 auto}.launcher-window .launcher-footer{flex-wrap:wrap}.launcher-window .launcher-body{flex:1 1 0px}.launcher-window .launcher-body .launcher-scroll{display:block;position:absolute;width:100%;height:100%;top:0;left:0}.launcher-window .launcher-body .launcher-scroll .launcher[data-launcher="sidebar"]{overflow:auto}html.touch .launcher-window .launcher-body .launcher-scroll .launcher[data-launcher="sidebar"]{overflow:scroll;-webkit-overflow-scrolling:touch}.launcher-window .launcher-body .launcher-embed,.launcher-window .launcher-body .launcher-embed iframe,.launcher-window .launcher-body .launcher-embed canvas{display:block;position:absolute;width:100%;height:100%;top:0;left:0}.field{display:block;margin:0}.field .field-input{height:4.6071428571rem;border-top:1.75rem solid transparent !important}.field .field-input:hover+.field-label,.field .field-input:focus+.field-label{color:#5e666c}.field .field-label{pointer-events:none;z-index:4;font-family:"Monaco",monospace;font-size:.8571428571rem;position:absolute;top:0;left:0;margin:0;padding:.6785714286rem 1.25rem 0}.field .field-text{height:4.6071428571rem;border-top:1.75rem solid transparent !important;border-radius:0 !important;box-shadow:none !important;padding:.6785714286rem 1.25rem 0}.field .field-text-label{pointer-events:none;z-index:0;position:absolute;top:0;left:0;margin:0;padding:.6785714286rem 1.25rem 0;font-variant:small-caps}.fields{display:flex;flex-direction:row;flex-wrap:wrap}.fields .field{flex:1 0 160px}.fields:not(.fields-flush){margin:-5px}.fields:not(.fields-flush) .field{border:5px solid transparent}.switches{margin:1.5em 0;display:flex;flex-direction:row;flex-wrap:wrap;background:#edeff2;box-shadow:inset 0 0 5px rgba(0,0,0,0.05);border-radius:4px;font-size:.9285714286rem}.switches .switch{flex:1 1 auto}.switches .switch .switch-label{padding:.4464285714rem 1.25rem;color:#8b969e;display:block;text-align:center;-webkit-transition:all .25s cubic-bezier(0.25, 0, 0, 1);-o-transition:all .25s cubic-bezier(0.25, 0, 0, 1);transition:all .25s cubic-bezier(0.25, 0, 0, 1)}.switches .switch .switch-label:hover,.switches .switch .switch-label:focus{color:#313539}.switches .switch .switch-label.active{display:block;border-width:0;background:white;box-shadow:0 0 0 1px rgba(0,30,60,0.03),0 3px 3px -1.5px rgba(0,0,0,0.03);border-radius:4px;font-weight:bold;color:#313539}.details .details-content{margin:-1em 0}@media (min-width: 961px){.details .details-content{display:table;width:100%}.details .details-content .detail-group{display:table-row}.details .details-content .detail-group>*{display:table-cell;vertical-align:top}.details .details-content .detail-group:not(:last-child)>*{border-bottom:1px solid rgba(0,30,60,0.075)}}.detail-group{padding-bottom:1em}.detail-group:not(:last-child){border-bottom:1px solid rgba(0,30,60,0.075)}.detail-group .detail-header{white-space:nowrap;width:1px;padding:1em;padding-left:0}@media (max-width: 960px){.detail-group .detail-header .detail-label{color:#313539}}.detail-group .detail-body{padding:.5em}@media (max-width: 960px){.detail-group .detail-body{padding:0;margin:0 -1em}}.detail-group .detail-body .detail{margin:0;display:inline-block;vertical-align:top;padding:.5em 1em}.detail-label{margin:0;text-transform:uppercase;letter-spacing:.15em;font-size:.75rem;font-weight:500;color:#8b969e}.detail-value{color:#313539}.controls{display:flex;flex-direction:row;flex-wrap:wrap;-ms-flex-pack:justify;justify-content:space-between;margin:-7px}.controls:not(.controls-block){display:inline-flex}.controls-nowrap{flex-wrap:nowrap}.controls .control{padding:7px;flex:0 0 auto}.controls .control .btn{text-align:center}.controls .control .btn,.controls .control .form-control{width:100%}.controls .control-grow{flex:1 0 auto}.controls .control-full{flex:0 0 100%}.token{display:flex;flex-direction:row;display:inline-flex}.token-element{flex:0 0 auto}.token-element:not(:first-child) .btn,.token-element:not(:first-child) .form-control{border-top-left-radius:0;border-bottom-left-radius:0}.token-element:not(:last-child) .btn,.token-element:not(:last-child) .form-control{border-top-right-radius:0;border-bottom-right-radius:0}.tokens{margin-left:-5px;margin-right:-5px}.tokens:after{display:table;content:\'\';clear:both}.tokens-actions{float:right}.tokens .token{float:left;margin:5px}.setting{display:flex;flex-direction:row;margin:0 -30px}.setting>*{padding:15px 30px}.setting-header{flex:1 0 28.5714285714%;min-width:200px}.setting-header-text>*{margin-top:.5rem;margin-bottom:.5rem}.setting-header-text>*:first-child{margin-top:0}.setting-header-text>*:last-child{margin-bottom:0}.setting-header-text h1,.setting-header-text .h1,.setting-header-text h2,.setting-header-text .h2,.setting-header-text h3,.setting-header-text .h3,.setting-header-text h4,.setting-header-text .h4,.setting-header-text h5,.setting-header-text .h5,.setting-header-text h6,.setting-header-text .h6{display:inline}.setting-header-text h1 a,.setting-header-text .h1 a,.setting-header-text h2 a,.setting-header-text .h2 a,.setting-header-text h3 a,.setting-header-text .h3 a,.setting-header-text h4 a,.setting-header-text .h4 a,.setting-header-text h5 a,.setting-header-text .h5 a,.setting-header-text h6 a,.setting-header-text .h6 a{font-size:.9285714286rem;font-weight:bold;margin-left:.75em}.setting-body{flex:1 0 71.4285714286%;min-width:600px}.setting-row{display:flex;flex-direction:row;margin:0 -4px}.setting-row:not(:last-child){border-bottom:1px solid rgba(0,30,60,0.075)}.setting-row>*{padding:4px}.setting-row-label{flex:0 0 25%;min-width:120px;padding-top:8px}.setting-row-response{flex:1 1 auto}.setting-row-edit{flex:0 0 auto}.setting-row-actions{flex:1 1 auto}body:not(.editing) .setting-form:not(.editing) [setting-active]{display:none}.editing [setting-static]{display:none}body.editing [setting-old]{display:none}body:not(.editing) [setting-new]{display:none}.editing .setting-row:not(.setting-row-border){border-color:transparent}.logo{display:block;overflow:hidden;color:#313539}.logo,.logo svg{height:25px;width:88px}.logo svg{fill:currentColor;top:-1px}@media (max-width: 540px){.logo{width:25px}}.kpi{color:#313539;padding:20px 32px}.kpi-lg .kpi-value{font-weight:bold;font-size:1.7142857143rem}.kpi-content{display:table;width:100%}.kpi-content>*{display:table-cell;vertical-align:baseline}.kpi-graphic{white-space:nowrap;width:1px;padding-right:.5em}.kpis{display:table;width:100%;width:auto}.kpis>*{display:table-cell;vertical-align:middle}.kpis .kpi:first-child{border-top-left-radius:4px;border-bottom-left-radius:4px}.kpis .kpi:last-child{border-top-right-radius:4px;border-bottom-right-radius:4px}.navigation{color:#313539}.navigation-row{height:52px;margin:0 -15px;display:flex;flex-direction:row;-ms-flex-align:center;align-items:center}.navigation-item{flex:0 0 auto;padding:10px 15px}.navigation-grow{flex:1 0 auto}.navigation-link{color:#bec5c9}.navigation-link:hover,.navigation-link:focus{color:#313539}.navigation-pad{padding:0 20px}.sidenav{z-index:20}.sidenav-overlay,.sidenav-content{-webkit-transition:all .25s cubic-bezier(0.25, 0, 0, 1);-o-transition:all .25s cubic-bezier(0.25, 0, 0, 1);transition:all .25s cubic-bezier(0.25, 0, 0, 1)}.sidenav-content{overflow:auto;-webkit-transform:translateX(-120%);transform:translateX(-120%);top:0;bottom:0;left:0;background:white;box-shadow:0 0 0 1px rgba(0,30,60,0.03),0 3px 3px -1.5px rgba(0,0,0,0.03);position:fixed;width:320px}html.touch .sidenav-content{overflow:scroll;-webkit-overflow-scrolling:touch}.navigating .sidenav-content{-webkit-transform:translateX(0);transform:translateX(0)}.sidenav-overlay{display:block;position:absolute;width:100%;height:100%;top:0;left:0;position:fixed;background:#f0f2f4;pointer-events:none;opacity:0}.navigating .sidenav-overlay{pointer-events:auto;opacity:.5}.sidenav-body{padding:0 24px}.sidenav-region{padding-bottom:.25em}.sidenav-divider{display:flex;flex-direction:row;-ms-flex-align:center;align-items:center}.sidenav-divider:after{content:\'\';display:block;border-top:1px solid rgba(0,30,60,0.075);flex:1 1 auto}.sidenav-divider-heading{flex:0 0 auto;padding-right:1em}.sidenav-section{padding:24px 0}.sidenav-section+.sidenav-section{border-top:1px solid rgba(0,30,60,0.075)}.sidenav-link{color:#8b969e;display:block;padding:.25em 0;padding-left:40px}.sidenav-link .glyph{position:absolute;left:0;top:50%;-webkit-transform:translateY(-50%);transform:translateY(-50%)}.sidenav-link:hover,.sidenav-link:focus{color:#313539}.sidenav-link:not(.active) .glyph{opacity:.3333333333}.sidenav-link.active{color:#ff694b}.sidenav-link-main{color:inherit;padding-top:.5em;padding-bottom:.5em;font-weight:bold}body.navigating{overflow:hidden}body.navigating .navigating-hide{display:none}body:not(.navigating) .navigating-show{display:none}.navigating-overlay{display:block;position:absolute;width:100%;height:100%;top:0;left:0;background:#f0f2f4;opacity:.5;display:none;z-index:9}.navigating .navigating-overlay{display:block}.navigating .navigating-blur{pointer-events:none;-webkit-filter:blur(5px);filter:blur(5px)}a.help{line-height:inherit}\n',""])},function(e,t){e.exports=function(e){return"string"!=typeof e?e:(/^['"].*['"]$/.test(e)&&(e=e.slice(1,-1)),/["'() \t\n]/.test(e)?'"'+e.replace(/"/g,'\\"').replace(/\n/g,"\\n")+'"':e)}},function(e,t){e.exports="data:font/woff;charset=utf-8;base64,d09GRgABAAAAAAx8AAoAAAAADDQAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAABPUy8yAAAA9AAAAGAAAABgcMR/82NtYXAAAAFUAAABUgAAAVIcdx1qZ2x5ZgAAAqgAAAaMAAAGjFUyrzBoZWFkAAAJNAAAADYAAAA2FVU8pmhoZWEAAAlsAAAAJAAAACQM5gWHaG10eAAACZAAAAA4AAAAODwoBKlsb2NhAAAJyAAAAB4AAAAeDW4Ltm1heHAAAAnoAAAAIAAAACAEVARLbmFtZQAACggAAAJSAAACUpr8+SVwb3N0AAAMXAAAACAAAAAg/7gAQAAEBGMBkAAFAAgEEAPAAAAAeAQQA8AAAAIwADICHAAAAAAFAAAAAAAAAAAAAAAQAAAAAAAAAAAAAABVS1dOAEAAIABmBRT+1AAABfABkAAAAAEAAAAAA4QEsAAAACAAAAAAAAMAAAADAAAAHAABAAAAAABMAAMAAQAAABwABAAwAAAACAAIAAIAAAAgAEYAZv//AAAAIABBAGH////t/8D/pgABAAAAAAAAAAAAAAEGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAECAwQFBgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABwgJCgsMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAB9AK8AAMABgAJAAwADwAANyERIRMnIQM3EQU3FwEXBwAB9P4M+qoBVIyq/o6qqv6OqqoAArz+z//+1P/+Ai3//wIr//8AAAEAFADcBWUD1AAkAAABIgcGBwEGFRQXFhcWMzI3NjcJARYXFjMyNzY3NjU0JwEmJyYjArwQDg8M/agXFwwPDhAPDw8LAiACIAwPDhAPDw8LGBj9pwsPDw8D1AYGDP2oGCAgGQwFBgYFDAIf/eEMBQYGBQwZICAYAlgMBgYAAAAAAQFA/68EOAUAACAAAAEiBwYHBhUUFwkBBhUUFxYXFjMyNzY3ATY1NCcBJicmIwGQEA4PDBcXAiD94BcXDA8OEA8PDwsCWBgY/agLDw8PBQAGBgsZICAZ/eH94BkgIBkLBgYGBgsCWRkgIBkCWAsGBgAAAAABABQA3AVlA9QAJAAAASIHBgcJASYnJiMiBwYHBhUUFwEWFxYzMjc2NwE2NTQnJicmIwUVEA4PDP3h/d8LDw8PEA4PDBcXAlkMDw4QDw8PCwJYGBgLDw8PA9QGBgz94QIfDAYGBgYMGCAgGf2oDAUGBgUMAlgZICAYDAYGAAAAAAEBQP+vBDgFAAAgAAABIgcGBwEGFRQXARYXFjMyNzY3NjU0JwkBNjU0JyYnJiMD6BAODwz9qBcXAlgMDw4QDw8PCxgY/eECHxgYCw8PDwUABgYL/acZICAZ/agLBgYGBgsZICAZAh8CIBkgIBkLBgYAAAAAAQAU/7AFZAUAADgAAAEiBwYHCQEmJyYjIgcGBwYVFBcJAQYVFBcWFxYzMjc2NwkBFhcWMzI3Njc2NTQnCQE2NTQnJicmIwUUEA4PDP3h/eALDw8PEA4PDBcXAiD94BcXDA8OEA8PDwsCIAIfDA8OEA8PDwsYGP3hAh8YGAsPDw8FAAYGC/3gAiALBgYGBgsZICAZ/eH94RkgIBkLBgYGBgsCIP3gCwYGBgYLGSAgGQIfAh8ZICAZCwYGAAABABQAFAb0BQAAJAAAASIHBgcJASYnJiMiBwYHBhUUFwEWFxYzMjc2NwE2NTQnJicmIwakEA4PDPvt/kQLDw8PEA4PDBcXAfQMDw4QDw8PCwRMGBgLDw8PBQAGBgv77AG8CwYGBgYLGSAgGf4MCwYGBgYLBEwZICAZCwYGAAAAAAEAFQGkAwwDcAAkAAABIgcGBwEGFRQXFhcWMzI3Nj8BFxYXFjMyNzY3NjU0JwEmJyYjAZAQDg8M/tUXFwwPDhAPDw8L8/MMDw4QDw8PCxgY/tQLDw8PA3AGBgz+1RggIBkMBgYGBgzy8gwGBgYGDBkgIBgBKwwGBgAAAAABANwA3AKoA9QAIAAAASIHBgcGFRQfAQcGFRQXFhcWMzI3NjcBNjU0JwEmJyYjASwQDg8MFxf08xcXDA8OEA8PDwsBKxgY/tQLDw8PA9QGBgsZICAZ8/QYICAZCwYGBgYMASwYICAZASwLBgYAAAAAAQAVAUEDDAMLACQAAAEiBwYPAScmJyYjIgcGBwYVFBcBFhcWMzI3NjcBNjU0JyYnJiMCvBAODwzy9AsPDw8QDg8MFxcBLAwPDhAPDw8LASsYGAsPDw8DCwUGDPLyDAYFBQYMGCAgGf7VDAUGBgUMASsZICAYDAYFAAAAAAEAeQDdAkUD1AAmAAABIgcGBwEGBwYVFBcWFwEWFxYzMDEyNzY3NjU0LwE3NjU0JyYnJiMB9Q8PDwz+1AsGBgYGDAEsCw8PDxAODwwXGPP0FxcMDw8PA9QGBgv+1AsPDxAQDw8L/tULBgYGBgwYICAZ8vMZICAZCwYGAAABAEYAqgOiBAYAOAAAASIHBgcJASYnJiMiBwYHBhUUFwkBBhUUFxYXFjMyNzY3CQEWFxYzMjc2NzY1NCcJATY1NCcmJyYjA1IQDg8M/tv+2gsPDw8QDg8MFxcBJv7aFxcMDw4QDw8PCwEmASUMDw4QDw8PCxgY/tsBJRgYCw8PDwQGBgYL/toBJgsGBgYGCxkgIBn+2/7bGSAgGQsGBgYGCwEm/toLBgYGBgsZICAZASUBJRkgIBkLBgYAAAEAFADcBDgD1AAkAAABIgcGBwEnJicmIyIHBgcGFRQXARYXFjMyNzY3ATY1NCcmJyYjA+gQDg8M/eH0Cw8PDxAODwwXFwEsDA8OEA8PDwsCWBgYCw8PDwPUBgYL/eD0CwYGBgYLGSAgGf7UCwYGBgYLAlgZICAZCwYGAAABAAAAAQAAywcftV8PPPUAAwZAAAAAANfNTDoAAAAA13yohQAA/68G9AUAAAAAAwACAAAAAAAAAAEAAAXw/nAAAAcIAAAAAAb0AAEAAAAAAAAAAAAAAAAAAAAOAfQAAAV4ABQFeAFABXgAFAV4AUAFeAAUBwgAFAMgABUDIADcAyAAFQMgAHkD6ABGBEwAFAMgAAAAAAAmAGYAoADgARoBeAG4AfYCLgJsAqoDCANGA0YAAAABAAAADgA5AAUAAAAAAAIACAQQA8AAAAB4AAAAAAAAAAAADACWAAEAAAAAAAEADgAAAAEAAAAAAAIABwAOAAEAAAAAAAMAIAAVAAEAAAAAAAQADgA1AAEAAAAAAAUAPABDAAEAAAAAAAYAFQB/AAMAAQQJAAEAHACUAAMAAQQJAAIADgCwAAMAAQQJAAMAQAC+AAMAAQQJAAQAHAD+AAMAAQQJAAUAeAEaAAMAAQQJAAYAKgGSVmVsbGx1bSBBcnJvd3NSZWd1bGFyMS4wMDA7VUtXTjtWZWxsbHVtQXJyb3dzLVJlZ3VsYXJWZWxsbHVtIEFycm93c1ZlcnNpb24gMS4wMDA7UFMgMDAxLjAwMDtob3Rjb252IDEuMC43MDttYWtlb3RmLmxpYjIuNS41ODMyOVZlbGxsdW1BcnJvd3MtUmVndWxhcgBWAGUAbABsAGwAdQBtACAAQQByAHIAbwB3AHMAUgBlAGcAdQBsAGEAcgAxAC4AMAAwADAAOwBVAEsAVwBOADsAVgBlAGwAbABsAHUAbQBBAHIAcgBvAHcAcwAtAFIAZQBnAHUAbABhAHIAVgBlAGwAbABsAHUAbQAgAEEAcgByAG8AdwBzAFYAZQByAHMAaQBvAG4AIAAxAC4AMAAwADAAOwBQAFMAIAAwADAAMQAuADAAMAAwADsAaABvAHQAYwBvAG4AdgAgADEALgAwAC4ANwAwADsAbQBhAGsAZQBvAHQAZgAuAGwAaQBiADIALgA1AC4ANQA4ADMAMgA5AFYAZQBsAGwAbAB1AG0AQQByAHIAbwB3AHMALQBSAGUAZwB1AGwAYQByAAAAAwAAAAAAAP+1ADIAAAAAAAAAAAAAAAAAAAAAAAAADg=="},function(e,t){e.exports="data:font/woff;charset=utf-8;base64,d09GRgABAAAAAK4wABEAAAAA/GwAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAABGRlRNAAABgAAAABwAAAAcfg3B8kdERUYAAAGcAAAAHgAAAB4AJwE1T1MvMgAAAbwAAABLAAAAYHN/dWZjbWFwAAACCAAAAjgAAAS+1h8aA2N2dCAAAARAAAAAFAAAABQDqgVBZnBnbQAABFQAAAGxAAACZVO0L6dnYXNwAAAGCAAAAAgAAAAIAAAAEGdseWYAAAYQAACaMQAA3UhCB8sWaGVhZAAAoEQAAAA0AAAANhEbVxxoaGVhAACgeAAAACEAAAAkDwIHkGhtdHgAAKCcAAACIwAABLqV4QERbG9jYQAAosAAAAJWAAACYL9F9WRtYXhwAAClGAAAACAAAAAgAlUBsW5hbWUAAKU4AAABMAAAAkQJm1bMcG9zdAAApmgAAAeOAAAMErscz7VwcmVwAACt+AAAAC4AAAAusPIrFHdlYmYAAK4oAAAABgAAAAb3vVi5AAAAAQAAAADUUbVqAAAAANTcZEsAAAAA1N+oPAABAAAADAAAABYAAAACAAEAAQEuAAEABAAAAAIAAAAAeNpjYGYrY5zAwMrAwmrMcpaBgWEWhGY6y5DGlAbkA6UQgAmJHeod7sfgwKD9/z/b2X9AHWyXGWOAwowgOcYvTHuAlAIDIwCMvw7BAHjazZPNS1RRGMafV0ebrxydUeeoOF5nnA+bwFqYu2hnEoh/gCCE4VoU20a0cNVeXIirkjEkFxEUiIuCaCOuxsEaxc07iyAxk0CYnnuOLQoCFy068Lu/55x77+G+55wLoAlAI7lOwoBMQuAPveao2PHGi/GA3GD/Lu7wnSCKXtgb8qa89XQ8ncr0ZArZxex5TvIxbdaw9mqf5nVYR3Vcp3VW53VJV3RNN3RLd7Ssh3pcC9W663XOWPTwl5mgQY1ypn4d1BEd0wmd0Tld0GVd1ZJu6rbuakWP9KQWqdfr5YNA9aD6svrgMz6d7v/Y/1J5WumpJPfCptt0GWOSptN0mHaTMHHTamKmxVw1URMxIRM0V0yzaTIB42r+Ny3qXxomL3o3/Uov4Hp7lMd1RYAeciBGTznQSq870Aak4w74TjmQADI9DrTTBQc6gOyiA530uQNJICcOGCAfc6ALUEqbeemmg8T/tn6aVWgv8wDd58At2r+XZx6hB8kw823a748y36PHyDgz10AnyDTzfXqGzDI/pOfIPPNjeoEsMT+hl8kK83N6lawxv6BLZIP5Fb1Jtpjf0Ntkh/kDvUvKzHt0hRwyH9BH5Bi2WD0BaiHmMzpCWLe0QE5KFkiKfm+B9EG+iQXi0c8skH76rQWSpt9ZIBn6owUyQH+1QLL0mQWSg5xGLJA83Ua4t1Kg2y2Qa3SnBVKEfH9kgfBfFe7Vr6MqDf5B++P0/X6OG/EftMTlH227zEM/AZQ63VMAAAIRAJcAmgC4AQQBeQC2AOIA3HjaXVG7TltBEN0NDwOBxNggOdoUs5mQxnuhBQnE1Y1iZDuF5QhpN3KRi3EBH0CBRA3arxmgoaRImwYhF0h8Qj4hEjNriKI0Ozuzc86ZM0vKkap36WvPU+ckkMLdBs02/U5ItbMA96Tr642MtIMHWmxm9Mp1+/4LBpvRlDtqAOU9bykPGU07gVq0p/7R/AqG+/wf8zsYtDTT9NQ6CekhBOabcUuD7xnNussP+oLV4WIwMKSYpuIuP6ZS/rc052rLsLWR0byDMxH5yTRAU2ttBJr+1CHV83EUS5DLprE2mJiy/iQTwYXJdFVTtcz42sFdsrPoYIMqzYEH2MNWeQweDg8mFNK3JMosDRH2YqvECBGTHAo55dzJ/qRA+UgSxrxJSjvjhrUGxpHXwKA2T7P/PJtNbW8dwvhZHMF3vxlLOvjIhtoYEWI7YimACURCRlX5hhrPvSwG5FL7z0CUgOXxj3+dCLTu2EQ8l7V1DjFWCHp+29zyy4q7VrnOi0J3b6pqqNIpzftezr7HA54eC8NBY8Gbz/v+SoH6PCyuNGgOBEN6N3r/orXqiKu8Fz6yJ9O/sVoAAAAAAQAB//8AD3jaxL0JeBRV1j9ct6q6ujvpdHpfknTSe6ezddJrFtIECCEEAtghEVmCAiaIQmSRAFFRkcUVFEVBxgUzGh3E6oCKCoq7KDWO44Cvvjq+OOPMuIyjjDISui/fuVUdCA7O+/2f//N8H0m6qrq6quvee875/c5yLxSiKKqP7ZcVUUbKTfF0gFeEeIPA5wQRbwrw7DFeF+TlAq8OJs2olKqs0hpCDq0hGNE6gpGwy6ENO41ah7MePX0E7YnHceIIvqieFrpxor4e7enukt6kKNmZn87cIXuPa4bvCVP11ESqjbqC4isDvB1uHuDHCHxrgE8I/IQAXy3w9fDVAuKnB/hJx/hpQrIdlSanTdLqnlMX2Surx0xg3eYaKqm2a3WDJnNJTU0NP0Y7aHX7YC+ZaNXqko1x2Kuv1up4qqayiglH3aEgazIbaDnHupwVtM9L6yPhkLmQDcbp0SgaCprkRs5ITrp9YZ2BDQXdYbedMZhCwWgk7HU5OZO4T3YVh9GMd95FHW8zs+wGvOvMum8emCtzznrJZpLb5i3h9++5ZqbRyGmylLKQFv/362/i/84tQoa33kYm/BW+2rFx3vxbNi2Yt/Gaxsrg+PHBStm0xuVjxi5rzEu/l5y2tWz8FPdB2psKyQsVnD7oKyosKc3NVehU8rS1bcWKNrksPqOubkZtumrexlvnLti0qXTeuHHzGmEcYSzpLrafCVFKSieNJfRhViCZfXbkxDFz1rP+ePz0h2ScursoioFLsxQUu5kqoLxUJXURxcsCfHaI9wh8RZAvCvAlId4q8HqQiaoAj47xNoG3aZJlqJRXC8kgjE2ZTat7Rpattzp94sgUebS6fRRSmxRwWFmlMRTS0KExEyv2ZgXtcrJyr9vlVCO9BgbGTPodkTHSamAAxqy4b+aDqHHVdWjcg89+M3b5vTMexs/39uIDD828b0XfV9cj9dxO/G3fV8xzs5B27VdfrcX/YBo+f3px9aObbtn1t0+X7rky+vDGTQ9Fr8SfIfW2Vb33o9ze+/AJ/P39pK1YYPs4gQpRq6j11K8oPhrgbxL4awPQKsRvCPDUMd4R5OcI/Cp41SQvgVa2C3xTcO/i9ksUpXy5wJcH+MUC365JNmWX8jqB12mS0+BT1UHocN4STG6EHimfAz3gq5y1YCX0AL9YO3hFz3Iip+26Z21R9uIl195E3tdpk/FJ8O403V6NsbVN7LtrbwL5rQ7XQL8ZDWaQuVi0HoWJyPq8kXAsCj+RsA/EUM7ZEHSsGX5NRoOck3NGPfm43JCL1DK5GhkNRchURJtsyOurQDD0TqNBxsnhJoao2TSaJreKRoI+r9kUYLwRXwzUwGyScw67z8snP/k0yZdePropR75gwR3lS9Dgvv/6cN9g2eyJcY7LYhcsuLNqUe+RodNH2AOjtBa1Rm7g8nUmq8rqmXFAftON66IRjG+S7W+imcJCq4Gh1WpLYaFK5XL5Zu9nPU/9+F9vjMp/Dv9whnpBO2X8NPg3/kTJnGWjx+Zwc0Y3zLklfEPbibFTp02bOvZE8eyrJo2SyZXsnIbRczZUr2lnDyxZ0hU/UKM15+oVVoVzlD9a7DdYfdMPxDfKSooXjKuvv7atjNk4dj8DX+90FNo4WYE1VBVkmLJS34z9Yw8X9PQUG7uvVFNq0JsuBSULUbmUnjJT+VQR5aJ8VCkVAAmJUXXUaGocRUVA9x0gulpQf4cT+jkSMjKZP23EYURn93++PXeuvZb7vLa9o+ZUYU2HAP+6BZZKUbARuo4IXQLajsl7J+vb2uqZPTUdHTWpzYJAdx85go8IApw7u4/CF96Sz0BzRBk/Kd/D9VMmyk75qfHUYDFFlfKcwBcEeA1IeYko5WaBN2uSbpDcbCFZCjLrNoPMyjhNoUMUxIJirW5vNlXkFHVYa9AVItbujiNdJExTRHlZc1gHSms3I68SmbQGmnXZFzx7ApWjBlT2/TPzH8BDeOvh9Wc+fHbthG+veRMZt6PcI6f/PIB0rG3gbfzYEfwP+r2H8Qcnnl0gXvbw2+hKJH+gae0zH+JN25Hp7ZUDp//8Jn6Ptb2Hf3gHP3FYtHHn/lVJxxEYv4WUFdrKM1L78gK84RjAVjIfWiU3AAqYakQLSEaRAgOEQHsk+wMq5nNyn2xnHxJQ0c2fb7CFg/h/nrvn9F2s/4GP0cP3HkPmt2/+dK1i4A93/nhXhZ39AxhZijqzh6vnWCobJIYyepSgW6CcciUyj0bmoMlsMuciL/ornaDZcaO29qRT6T1WT7ktr7N0IVPVH0pcSbfSrMN786itlvTp9N43+qvYWOnCS6o8XZRkx8/I2cPcZsoBaIl4J5gm0ho+P5h0iaYcVD4WRz5tISLqajbBQQXyVTARl9YLeu/Pv+/QFRt2yS69Q1/pZBiVP1Zc0FBZ29pZ1X/v0zsfbZk8S+GuOjSfbdGun/7BaKPKO2Hqr+9aXVU3feXl/qHDkfro9xQ6cwZ/zclAhvIoylyI4BsiWo94d/HAp5WJBy7X8zctXk8fvXLJ6kXNL65bsl52+oWrlq7q6p03qsz/4MXMNwMpbPBXvfX26Er/wx2yXd+ebjT4K98S+zAk28F1gd5VUDXiyJXDyAUCvA8kM8i7Bd6tSdpAOBVCspIIpw/A3mp3ECNq0ybz82rIkFb9TDEpLzycWRsCy1eIwCK6nMTGeX1ag5r2+voSLNW+qrcjRbWtQbeUl5e/0L4mvMDtU5XkqrKVDEMnmsLTLpvpSvStaZPt6FjZ2346euP4CaPt9Al/08bKnk01RqM7WNudnf5rpKOikFWI7biJWyT7CSTBQ00RkdMJIxXgjdAar4iWFgAFTbIImqIRkj5oSpEFFEtuMMoIBGi0vBqUzSkDKZXX8PnavYCbGlHlLIjAZgyZgKD4kAicdkDMMBUKFoLgUkBk0CL+uxufuA+tH9PSWVWP+zqvHPwe468G5iB638o/3IjxMyv/cAODMf6OX9SB+8aM6axpQjfe+9yNcHz5k/iefYi+/g+9z2J8w1GwG+iMVz6BW0xZwAaGgUMgPhLgy47xKiEZFQUvaiKygEzRGAKRYzk5UiMzouKAQGrGR0XNhYzZxPmIMCIfCrdMfMTNNM5/yYn0BWzprGs3X9tlwV85i1Wpg/RvchLzbFYuMHZCPq3RBMJbl7WrVaqq2PbaaHv2bTsntYS9zDhVsRPpLF1w4ZwypgB/6XxpfuoA+v3chNZW0NoQRGZmh0aV07FsW6QyN0s1vTa6Iwr6eQZTffJJwGl1YMnLKZ4N8DkCMQpeGJPiQNIPbUnm5QDMZueCNHm1e7M0Sq3Y5bGz8iRHIDw+5DXSoM85iACrx02EyUckjR3v4Lod4/2pb73VtZ7Ut34ur8SElqMV3rpaJ7oGLTc5DAVVWepTdY5P7WPHEgEy4m6jEW03+lFF1Jz11ttG49tvZelcASXIkChHS7n9nB9QqIiiLOissdXQFchtZ9VIScfAwCgRmJmLH/oAyZEFyT946GLYx6fw3/CpDx5CeagOv7EPBmgUj18XX/Bh5hLp5MU/uygdhc/V8fgwivH4DXw4iarx2+JzgFZyFOhl/r/j3ohnAF0S2ntXdpwOgS41X+CLuxJrVrexQkfvqvbU/F/6rnNtHkvxXIAvBEySbLhd1B1wRQwaYsYJRjlAd/LBmu/lcjUyEaLMhXCEsrKpjL78e6+hiEMb0jqMDq1L+0vdhtCD7wP8dr//S32FuffRg3je+3g++hX1v/XRyG88r5NCaAdB+W5hRM+kQwLagbsE3I22U9T599Zf8N7G8+/JUuffTchgJHdc9iClhXsgXhdIUtkE/pP6jCMAIxjVEAqZi8gru5n+nD6+efO6fc9dt3L5umdfwD8yfz24IT2b7t+A1qzr7b3yyt70+TJqBg+OjBeMj1EaL8uI8TJL42WF8TKfN14GDpQOZYFvpjES9aNqfnnYjL84XKziPwzU++Q5xfbvgOf0gB0jEmULwUPyWUHRJlPDzwkCRbqF2GQHPOdgloapqak520USzZb6COxcGOhxEZJIsgY0wHu2255Zt6z3umd731/b/9DNPfM+OnrlonVTWjvSd6bvmMn86cA60pHrDhyUOnLpu9fdvH3ewYPzpkzAP7Wln6MnTslgfrM8i0uA70ZpEaNEDHJkI9r6Cl1Olx+iLemlJ08yu/CSdDV6EnfQb6O7aT49TcJRth9w1A989WKK+CZBgaAQsXXhAF96jK8U9uoqS8F1AcJXqUkqodFOIRkhg6ODRqtkXuI2KysBgGw1vFPLF8JIyYJwijI4a8gIaR1hqdlGAwe+BQJfQ3Qm4ywgU0zsJwe4IxQHpjKOvC4vml4Tuf3GusjUQLB6bWGl0oE4B0PnGEvtcx+wdvC/wT+8dtenaIbimtmz1ihWzprFRha1zWxpbQuvdRa4r/KH3rUUOA3hoqr8eJ//2ptOX7+mY8vQly+soume/X0yieOyZwrlC7jrgOOOolqI9YA2Nwt8Q4C4rXmSTE4K8KOO8SGBD0lUAmRyMjQ7NAp4rjvPO66RALBNyzvJmOtNOhWMLhFDn5f2uuVqmSeicwRF3yoXgbPlikBjRwPykb9zPhgTR3UoaAIHqBRoGMc8AAZl7svbke2L38yimR1n8KMv3/DP3+5eNYYeq0Kz93wQ0V1WM/ZTZUGOqVSeLy8vqHBYLpridKhkrTVsvJWdUs/WttKvvIwfO3UXQy8Y/BrZt7+MLvlpC40mXJf83Y/zFOjSR3ZcMqGw2VPZptCsLNHonTKjrMgw3hny+auqY4r0dTUtU+prp8imivIxLFf6kZIll+Ujj0wPv+fL2HF0xZLlaCH+aC0Gh2Ltv4vcFgUxhYov8VaM0eJhvhqSrwcZjBEOTgf4POj76gAfOkbIWw30uCIEwpVHejlidETCHuKNip4s+QmD40lCAnI1C64s8WMJgxZ/QN7krHw97jx4Z6AyV16co8llPFbOP/uJxX+babbrlQzHqRilUpnN5WhyiuWmsvI7Xsadqo8+6t46fktfeSQ6rziHsRfWTsjdV7vyinErbbWBOu9o+/hcBWMyzCyyMznFl0WiFdduHr+V9BUWmD2cANbNRThpFpEiwuUc0B53gLccA3xKeqA9hcDg9qm1RkO+aNbyNWDkFDlqo+QpmeMoZOLkjBjz8BEOqteBlUXcuWBSpO6pghyk7usUFqNrHqnfNrvCubnj4R68EGnoRfOWPbL40tX30jtnFregWG36X/iet36d6FtHO9Dkd+jtnVfuWDhj8Y7zdKAM+r5M1AFJ+iMCia1ppHEIHiOST8YhG7T6F6VdBo8dlDMcMB0zMHt46igMip6YPRgHl9P7n0S7a+mJ0fMiHcbCwALP/D829kVaLJbyK4/Ov6hvbuvYpv8gzn2zV7+B909pqZq/7CiKNTXRtro5veMuGSvhTbOCAtmtouZRXRRPBfgxIaDTiJ8v0lJwieSaZC0odovAt2iSY2BvrJBcQJy+MmiopYav1T7H5mr1wVGd84iut+gGaTSDmLuxY2AEmydflJgujqCFgs/PICEXh/Y88RSFkyHCSYvCaRwhmeBunD2Sk1etI0LCNORyci24ScOSzcDFsjvw7TuX+3wqxmlXFhgYfXDSignPtVoKcxCbQyuMSruTUfl8y3buZrey1jxGlZ+XSI+uR++qc71/XtEeVTF5VtaqYa3V3WNvi+WalDIZrUL7Ud7ch8auW15SGZhttJjm1GsGSi5uH1u82NUcafXO0LDG8ByTxTg7UFmyfN3YpksY00qtRjve5XD11F9XE+vBwjwUM06YE7ysw9E0Hk6tVPX5ExMrEuaSQGFEH5eLfKKLE2QhSkMsCNAb+BkmJRG0h6WGBNl64jOd3sO8hjcfxwl8vC9BJ9pXHR/mNCEYxy4qCnZ6vDiOxEKMC/BV4iD67ce0vD3Ea4VkI4xdlR/Gwl3Dy7VgMniAIZneSGA5mQeDlKwZLUbGLmxFmOG+FqNhI4dKjkRWFiGszMF14S2vbA1UGOV+lUbDeAoYS7zz7plfz8lza5RyWS6jyFJmKUvKmNyqwJZDrbNYAQFPC2ExxvLRypvH37WmrDo216emHfZqMC0VnbOby1Y64mMCTZ6pWjAt5sL5efmWS6sj5X1bxhsc6F48fAepPyhK/iHwEx9VAj+DDInO+AReESQBGp0k4qUBEmClkgXg9yaL/aTRGTZYD0AUigz/SczQhkJGlzHz59GioF0esgcF8V+V4yfBUSXtM1k0lbAHg/Y+4Qgc9rkrKtx9sAMHdBc8HQIfcJt8HKcgzFZnqkNizEQccDEEAAYMfCKnHCFD+W57FN2BdqFHHLk5st3lBntKcMx0pAR6S0V6fbmbXpPeoMq2Oui+CjsTczhSh0fwWwUgxXjQauL3qwXeE+DHCYSuVEDLm0SGphV4rSY5ClS6REhOALEYpdXqnqU5a57DUyXqrEdNKIpSSyIC47R8Qw0f1u0zFpSYRxFVr9Dy1WLYymQn7rNI5IgRA5FBUbMpFgX8ZsHJ80gxVontueEz5BCukLQaceRK7gs0alnHmDFuT0lBR3TS5EURFBjomjDR4ViC37sTv7+c7rN1X7/zPtS4bNkKfHRJV1OTze/2dNddH66txQfv6bKVltQi24NfLEu0NBUUJKILW6cA/xqY39DgSDgWeW6DW6wttnXfg8Yte+jBZb2qJd0Tm2y2rrCmumrypFp86J75tnqKOYPP0AoNt4dSU4WUl6LykRaMswPpQ4wXnhT9W5BSr0Qevdbwx19dga5Gz+Ejv8ufPLSlEe2usMvetZeX24ci9opPD4LbmIWm38NWpXeh5kUPEymlxzSbMFsw9AdHVZWDeYu8pvbx6FncD5iFn8f7RNw/8z0+Lt/IfUnVUZTXJHUjiUSJYYEKOko6upCGI9A/nxeOKhA5A58kp0iIgDx27oQFt71/dID5ycBZPZX6lGL+a/23B2svZv65pGdUW74zmIqWhayW4Cx6wJnf4krPqK20+Me+nmDefTRivXPWq7tSiuWv/+PSe8gdKp0muT6V0x6r2tT/5uXMPy/P10xftDqYipQpmdwI3KHoIkNhenrsluWOsUZyhzdm3WmNPJpSXAftYYmdY4mdyxYZQIBqkNhMiFcKvD1I8lTeEG8U+DLwIypFKVUFeRkIKrxqkhaQVXeQJEf8wWRVxtUCZliPwqXIaRy5j37h/f79/Wd/aWHkEcrq73/+0Udpg3ic6ht5NMzBxHiaCywKb5PiT8BZrMfA1vJ5UvxJJ7GXojwwsMZM+KwIEakRGS0ITimKaCRzEgnbSWaPM9b4+7rn0Yk53X3+2oT/edz99u/BZ00dKY6XtKr8Dodf1VrCFPkTP6IPf/iTP/H55/jz1opMHJoSZDtYgcoBa+IHmSXang3dFSDppKIA2DwSiyax57PR2WjGoP2no3o/K/jjdWWnQ6V15/bLake+j0L++np/SX09utofj/tLRo1CPZl3JM4KPSa7XLaLsGIdZ4ZOiBEj4PV5QV6ZCqTV2NHV5U1si58WbNaqaI89veuEezV9aGkQF9SwY9m+6BI7nEhF0KgqjdjWzQpKlkXZwOesphopXiFyMUcA3C7E14jSUgSt1pAYLp8rEN6SdBVpdc8oTGa5t1Q0aQ4PEMlcqjiWCbmbSYQXXGOwvaKbRVQG/GM5ccFYDdhQ+KMNJugZL1ExUDKAQpfTXz64eDWaja5Cs1cvHiz3+0sHe1bjfnwP7l/dM1jqp2tA49egLHwSb3CvO7BRWbLaqZEbNLlKpa2TFgriYwcmTF2wYOqEgbHxgvwxY3/dPHX+/KnNvx475ndoCUL4DL4bTJFh/9q1M/OVhSzN5YWrAoGML0AdYF5jj8OzURowrcGYEol5Ux841IT6EscZ3CYj8bAd7oVuMAi57nCoxYO/QPmeFgA1/D0+4VrkcjhQHv4LumKhG/Zi+LCjqcuDGtA4T1eTHb+Nqu12dyTsxgfxIQlX8G75a9wn0P+BzIjCcAKFDSCR4so5sw6JoTs5oqCTzPKMoTfJOa8vJ8eK9lS0M8+GzPNMTk/v9uqgakytsQc/XuMdhQ/UhVMt7E5rzSXzq2osRk92zlhVIrrBgz6Z4U7f3VRPP+yuRY3RmqqZ/4O0d1bnWmrxq/iHRMSTvgy1bfJMmGAzxD0Kx4IGjyV6Hh/Sg7ZSINsAs0gCdrlD1DnkQARqz5ryvkQXCtFU+yqFKh3CfW1raIEGOtElBrO7SRwo0Ucoxpq2gyy9prcdH5GO6G4SxCbfeebMmR0KJUeJ2GGk+NwAny+IRqIokLSLCpgvWgLSZ+KXxhwgbrATQOKhnO1QLuKWxctkHTJP/KcDcU+Se8OoaPGnm3vGxJsWYd4/RsE8mJrXVRllHoyUlx8AntFS31Tjl2wBwu/IePCtjFQEPPZx1GCUsJ4a0VvRwWPUixoSFpJx0IswML19RuBRFlEtojXAgWJ1gPN52r1MFucV1UPP6cwmndEhckBfBS0GjszemM6uN6lpQHL4lbu8AdobIYpB/vRGU8wUi6iyV106bxPt/3Vn8XZ11rzd+EfM4x+euux3CoWLedDFZMl0WpfaE94bHAgNNhTkm/UMk6tm2MObt9yzme29Ff+jeyH++pb//mBl9bvHrz/6687OXx97zqFAd+Ml/lHmsoJR5mDzd6++9MNMnxf5ijh5YUFW9umjR9sZpv2opCOC/EOwixzh04RcadE3sq+HjLSAKTQZ1Lb5rP1UUPA5DWWgLKKkSAAfGUZ4uNIDl69p47pI/O/UjkSfwHUNUSSmiHYQ6aCprrY1fYn0DrorvaMLbRNxO32mlGngFlHFFKUnFLlQpmbA8TObFEh0X/S6WJQwaOlHr2kfY7E3ubyqLFmOvki9a5oiG61A3TLlwUPco7fmKJTqORej37y51uCm/2pw5mXlFGQbOava7xhvx7c/r1CgR9ALFt/UaTq0HNWWFiDUfSl68fud9piEW7dwmzmDGJ0wmSlH0B3VRTTI6zPpaIp1N7QBsbnmOdT63R146JIr59k34T/jW/C1aNqSNjx053do0rNwV25u+HF8Lb4d/3mjXcTxkf1W8B96Dv1S79H/oQ/xIqkfzxtHh1YJQyn7Dv0VW4c0tBXvo0HT8X7pcx/TCfZ1wEHob0J9ELFHSsRFIhXolqoq3FsRCYdRIz4QQWrYuTMYRnfAuTB+GPdHhu3quXuAbYsSeyrypyp0S0UkEsGHUEM4HKnAvVX0TrwsHK6IAAJcCpsIXh4m98giL7Id4HcooLdt4H0EqVrwyFqo6dQc6q2MRtYKe021UUUpMQ8AXlUCoUAXh4ifNisIXgnvFQjriQfA1UZ8p6i1rMCzEsPwA/nRJMOwVxckhTyj4VWTrCDMSEzotcPeJUJyLmEhLND3XIuVeOPVYcA9R2kVUexkuxtONE6aLPp8jnxQ/bbp8Bm6Ct4uchUTug+uYUUNX6obLHT7yfVxL3xKOV6MVRpCQRhlJ6czFCIx9+eV603EGQdk53QaAkYawCGaxDVMYmBDRxAULqEzW4ozkQvlJPNDbgAKMXzTru54ov5FZ6jOalTYWmoUhik2F1M6yTXxy1du2XTwwG0bW/pmXLyqd2YHG2wIDv+iVcqKVlvLspZC5GiqtyptrpabFlweT9TQQoI4Y+j5ukoPbYR7tdSmcuDGrkmljGsiPQ1/99JBpDuE5/J9fTMuWYPvS9TXJ+LsZnGD061BhW3SsqbUfZNcTbXik6CLyQ2rCJflzuyQfwmCaaHcVAVYXCfFW0kki/haZaK9JZYWOtgKXWfQkq4D1DTpwaaGHEA3AAUCCNxsYgE8DjHB7XKokTHmGN4lRRAO+JNDHzqcaoVaPbZRlXuVbI8tLt+pto6rPzUt4ac5pJPdHTZl6U+7CoICkyK7qecLgl2304bNbHVJesd85qcxtgl4JV4c7ZLVFDM7mhsb4v39CQ8rb+wurqVpWbVfkLapNUJ/v1CQH8jEFbDAdgGmKCkTqXjKklivOUCoOGGUoJGivhsRGWpt5giFUKjejxMJmhL89Zl9wMur8Rauyx/vJu+czoKDI/74cHxzoXwUFwONyaNIBpFkOmiB5BGTNAIuzYg5AxRiiJiJFTliTAK6EGgayA8D6CTGIFYLzz+6JtBWM8Zd5IyObynpuO3WN7X2wvvwv14eXTa1rbjUXjt1QXzt87LSoXr6/Y1+Dad05uUVuPLo3MIdO1C+tUBVH1a7LPEZFWFvFQisf6OIE/B8h7kIpRItHmXmRGsHVgbollimog1pzeYKr9zl9xtTPbmBityq48ePVxU1T7BzYzyeIY8goMuJdcvgDshOCGRHKWZ6wLadNZvDdtRBEjTykNt6aoLV3dVRK5tQ23FqO1i8blY4aXW7rUNdo9raRrH1uFssSskiYwWcRwDfygIMuQp8xglUGzWfupq6lvqKGpxAbM8YYW/+hDEK0ViUBMAUEduzXHS/VgdJLrpSIDH9i4S9losmKUj1GeKvEy0QOGHggfnAugQFPqghos03B0lQoRVeNckYkiq3NMmlsLdSSF4PY+eTgUXRaEmOgw9qk0UG2MZ1eyv94Vpih2LjwCgFSiI1JJxQrk22X00MkhsMEj+zhi8haQO+Vpe0XwaX0dqkrwy2Sl0yGINtRJv0lsO2Ujeo1V1OvkCt5TU1GY8wQhwtsFAi9gKzD4DTzJjE1IJXhFxKowPWr9MQTqMPR+3ETtm9lA0RCwW+otfJnN3jjGLeBW5ENLYC+LReLBiAPRrAe8T3dXV31fu7/fVfKmyaWtsUQ/3EFluraHZsCjBQUcNElLUN0SiI2Pvvxyn8W4zRCTTtxAnMn0DNIwxakF7I6g2qWtFONRnK3XY6Pr6ppdZYXVlhlU083jUfvmi+vz5j3+g3Wm2qWpvCWDtxok156q9WMJ221mCWPZo7kbkUuGp62zbEoDBitm3D85/8/vsnn/jHP9KPkEcVn5ejyE4X8eOG7J4yg6bWgcDmjjfoWQ07OQLfXGNEBSWFionpR8QvJDqbh15mfsf8i8oFb6CQpK1NcZrgLspjimMFAI2z80Y5FXm4B1B2Ce2qdSgtBICNrDdSgDaEw3hNRvfxcTCm+zMYTygDMLSFaDKm2PeHNATvRVj9N85h/19Yx//CPP43/nGOg5zJUhi5zSRepw3FHEwIOWJxOhIl3mAA/AiX3uFz6YUv0FIwce/Q2imRBZON0Yp8/eSJ6d/iqIDx5i+EfrT0SEpgQjKmqMHvL7Do1UoFE0oJAu7P+CtcF3cNWIMQ+PFiXhF0DrRSqUkaQJ8KpHSiQQkKI+Ny1IS0k3AlyGQo6POCG0O8UlKRiAwqeCtPKpjyhWNxBrYZqs4ZG+t7xlmNi7pstvIxE69FO5ABPXyodmDloY0rmIQ34GeLvIaGPUu6O2+fe93D17c2+o2LF9K39XTZ9KZHV6T3jLp+GvoN+mtX9URNrortjbYtmdc7yjz56IYJo+e2Xl5/rjZuPPc4NRWsz8VUK7RmRoCXHeOnC/y0ID9dk0xAgzqCYC1I6WdyOtiI51Rqjd40rmUyMQQJ7V7z6LF5ok3QPZfvcIcisdq41GIdV4RMpPoSmUj9EVBqoonwnqjaZAvOlLgP2/DojMISqJXLOHGfXAvnOKPZBH2CMrZbo/Hzfj+fr7Q7PgpWaXu0pWVDS5q67E3WTsPCMr58LKtgG4IPBzX+pNudLNFGv4pUGddonWX4y/I51m7rRGun9fJgf1lcxTaGHqJPCYLAeibYH3DNc+00lhTKrLKLqjAftNs2185/yC8r21fmtM40llQNRGaqKlRN9p2OLscD9jrWwk4pR7ODDtvugoJyvpwp6y9zGKYYSyIDkVmq8tSJo0fRBNqY/lrCkNc4g+xDSg5S4yD5WSaQzLGGRCKpCPB6gTdIiTUngdOkwhAMZqx4jlhXzKs1pICAzxMyRW+aDDtjgix4fSGxBjFiZymdNhTOQlQZct360m23vXTrEyj8x5tPPIGP42X/jVTor+jS331/9WE4fBIv/gBlHdq48dBGtPjmP+LfPv4xug0VPfH9e3gXzsc/fIC2og5UdPjqC+IVielMoy6lFlOrqc+owUaCV3HAq8b4WbyKinh1tYhXK4fxqjnATwG8mtKcwas1F8SrqIRPdSQTMj7ENwh8S5Cg1RJ4f7mQ7PsFtKrTJSuBACfLoyClJYH4uObWxGLRZRZh6uJhmIoCTHWeB1N88GcgNe//FqRCWuf/Lwh1kk/++P8dOv3mu5TwbXrX/x02IeoTufOcLyc6ckriE0aY0nAA/sLhQJpLZ0eCYbY89WlFBeMiflzaR38UDFYM59Teli+QvQOMVIq0ycwoCiaHQ3JSnhclLjzckJIjQyxajqxo/Rdsl0zNsVzqs3K6xlrFcnffwSnsNu0po47u8jgQjfczdXblAzOZmEyulnGpByNYyDEWaOleer7Fmi9n03coUruL8x1fDEALVGeOyXdwMpKHiHES4WU9UfhWHQm1eNwyVh91x8hvCEgwPIlBoS8uL1XO34BOIutlT9REP787RxnDj6UXgt9+VWADWvrQOlQ7wRPoWYkfffYVPBDReq252XrhgQOvN6Kce+9A+lalKhZo+/hbrH3wp1gFeAT+8pdX3YBvJP2RdeY1+SmuhSoChJIy4b6zlc52gbdrSOibxF1JpbOdZBKLZGKtjx5EnEz3IOnaCpoEWs0Zx5GScSyNwtGgSUx/G7K630HRF75C66aOV4asVgtttKx/rXpspcpww21Ylk4+jD88wAxccsPMmfGxl9Abt+L0yz13dExqm+gurq8c49k60cgGqjtTs9G03eUY78XPjLn44ptmzRweTwdgbBdVDL4awdj6ERFjMtMiIkXGyooAY0cFKuskxNGSCQAms0GuJs4qKJX4G2djJHYIJtGZRSPwfAxyktUXQ/wkqOesu3xx/VLmosqo2xYARL3qisZm1XSjy5nrlzXir/Glh0r7FrbIAlfOL7BMnV87YVx9T6OFXmQLuixyQNaV46/YdEeLafLRm5vLq5R1uVab2iOLV9EH6tcm8Cn8GH6auXxJd3pFT1dBzH7LXPTd2snj/CJHOnMX2FSVyI7c0NIyijIaTISbSVFi8akJSSPKgAhf8gD6yeBP2jbZ0YvoJacbvYBeNObqch0O7IC/sbjJ6Ya9jWgG/N6MZq9DM2zg6ZD5NgYDeVWpDH52dwlwFYMBf4nM8HrUUHL6PVZ19PQPP3uRciniWJSQiipVgOQimSBJXvgFPi9IIpZ2MUPLu47xnJjxUQfJICVtLpArvYX4CVoV7HJ6MKp+7V6ZwUwmxvB2XdLirRFnxIjZMgNnNAwHJOQoCm0/VyICZ4zEg9u3truDNrD71t6wd+8NS1rSf2VZ2jplETlau49NfzN56VpmMt43Br+Sa9DfsHcfokFQGgxxA2oYu+/GG5L71qoNufiVetIutJTtZ9tJHh8sBjKRjEc4Y3sc6DPPTA/6zOFobcM9uKetlflrlwNHPR70DsB/aytei25sbc1wKEFWBNhYDqg4jpotet6AaBqxj3QhUgEdJPO4kpYSQPWaAD8auqtRFGifwPs0yQIQaKOQHA9dRvLbDUp5jlbHVERrakXwqg5C3xX4pHAOJdM6nIArQKUBTVwOrZsCKZEyZ2rGWcFkjlBmskxEzPJnqrOMyINYfNLvp4/7/fgkYpHHH/d7pl3z1O+fumaax1/vR7ObGx8faGxOb6e7mxsHHm9spvvfwMct+IS/zw+/SG1BRW+gPLj8L7Er5jaXlDTPvSImHddFQ6FoHRq3BQ1KuyLvaZbruDWUGlhPWJTvs9llEGkdbSal+l4wMiZzjJTdID1L6oppn1yq5ic5nrFeh48ba7e3NJ162fFfbg/tDzfJGLnhslnXLnoO/6l5/J3voSbUjqquabxye/eYWQpljr6qct8liZJRBXBdid8+Zsypl/OYKfi/bqP9k3aWVqgMRbapXevbGsZ/fvqFa3bddc0kNP6lrkv2hQImBcfNHENlcgTrZWs5A2UExmMR6ztdYv2TVqxlJ3RFShOYJYMppgpI6R+YdxNQfOABZhOYGmAFPsU9TONkpLzlVpTdMpa5h+ucfxgfeQcnO9p+Na4F5SATUrWMGzcR/4D/hv85UaY+3ZAfCLZOqarMYw9VzvS3JUbXdQedvtpanzPoKa6tLZaeb6HCwkXAfrhI9hu8i0y+wudxIYczFzlIZAq5ZBySXDVDrXxSObexfJK8RuVx4/2H0Ry8VaFJpLcnstR4K5r9Nj5wMUqj6Wg9mpb+GjDwDX806kd1nlmGT/GPmuPHNSj70yD9x/Q/6Rz0z0z9AkucQR08RQVFJkmSKivbiKpSkgdWCclCEG4LqSrN1SiGq0pJwoIMfFRHJqHY1UhH0EUMQi5sGbU7UJy79u5/bPoG/+2bTd8++LdHH12xnKXW4qfvXIFPjI5qd79Jl7x9x983wQdSf3vwoeUrHiUPcmaHgsrUC0vzlyKk5tUe4A0hPgyPFg3wFcf4EmFvsKQCOKhXIMGQpJdUgpWBroXtYknY2eqSc+UDorMaOfuDHIS7kYobaSaZWB/h7EtwYhbq1I62NcSF7aYpTJ39O0JTivKqRE3t8/tj1btzRpQqnw6xwunQR8/37e/bnzq+RZPT6HVNS8w7fnxeos1+ScVw3G0BtxPaFiAco4gxeaIKFNOBfxQQQ1tiIaoaFTLgWSFKTI6SYzlN2zyhwHxU/BrqR1Obe+aXBpkqp9VjdY6pvFgto7OyCi1W7Uy8D/MzG1zh0OLOWATdbyirCpXPX9oC7v2vX0Ml88uDtDufRrGaxROsHrfFY7VqMpfkmU2VkyrGOTPPOIb5iptzgbg846oAIpd20Z/CpiL1aRW9M/UR7IXpk/QQbMJwNNzO9fL1oHeOzNzLLDFHXjTsHGW8IdNZbyhpUpOZWnJzYRFBlTwtb4GRzMpMIdFqn0GUwmLNGy6KB221i3WIblqjc4eCQBkcSuQiZX92llt/HEWeQJ7Ptjx09An82RNPIPvA9X95opvFH6HVaPUQu/Ez4MB78LvHmVXgQr39P+v37ex7AjlBZ5xPzN11/Do8Ez32OKr4+Iabj0v6MZs7ztWDPPqpBCVVIvOuICnCzgvxORIngzZpyIRSXqMhyUfeFgSfSWJmGjKTVJXDagulCn8vHCOFkrK4zzXH7o6C2yE+vR4kM6pzx4AfmCizw+gAyqt1ab1u+vZvwEZ2oaavb7/9a/wC3oFf+KYA3YGXawZR3uObMVpoxb3oFiu+H29+HP9lkLlB/MjtIy9Lv7LlMWRN6vEydKcN35feksb32cg99ElkBaU7V39JWGeQqgMfcZfYZvDqKkS64BLDmBHJSowfMe+OQKBD4B2apBcRT5KPa5JjpRrlJgKLZoBAayHQB4c2mWcj01R0e0srQ6QygI9rk6NGw1tjdcmGRkI2KghgllaKZCNZFoCtS7fXWtggFjjXapPVJHca0SVDMYKpF6j9NIdjZk5jlnvdGioUBNSi7LQvBgTBzAEvCUXhjF1OJg3ETEYAqV8uBF3b+X5Nzfuz0BLEHTiIOKCDm9RPr702de3aXe/gNU+/9Pu9a3vwVz00rq09OpOZ858KQ3/3zNpV+KdVawfVaCWS4aEXXsQn8ZbOo/H40XYlp4Krj9bUpOk1iF2z9ulXX39FLPs/W3Oioqzgm4SoBqqV1PEw4ixmUKwqELoAHwuRYYgHieFuDBH/fVIQ8VPI+CRz8oJkzntSD95acupwbQo4qVHJSf3lA2pkmQr9iwf1Ge+RVK9Ie6R2Zfg9mqr302IdS1qsYbngvljekohL1S2Jeqm4BY5TRxJikQuanRCrXmArHks+Bn1mPbcN7IwO8L2bIgEYvTj7PvfsXDUppkfmRVileRFKkt9giRQ2ZMnkjDpXb8i3iVbHquMLQPT0AHFJViYGD55h5Fy+ZJNygcDZxKQSrTPLZVq5Vx9nYj5gCsgMzCEPgXh59DETo2Y4tveaZ+jot08z9OxtL3Ur8Wfv9DKlwNTe6r0OTu1Lv8t+Rc7de4Dpxa/jt/p4B93x9xcRuvaTB7o0v3O9s/r07qPF76wm049QTR9vTz/57Yv4DDkr1jM2MN9wncQ+m8lUyeHsKyBZOFLBOIPB1B9J9pX+1E98bMYXDDM+kntNc+fVauRTpeJszLIArwSkD5Kp7+WZwFQRoURkXQQSychwUzIhIhchvSMYI+WEkTBBT5fhZH5enh0t9Hf64RffX56Tl3+SeTFBLyrKl1WeMBhOeIqdzBdl2QNGJicFBJQjvLVPwRgH0L3Yr7IOZJuM2QOGHOr/jA8paUKI/l/SIdpAGzGP+36RDr2BVegHWpX+YcScoEqqlloieks1YiWnC2SqLsAHjpEUcpUU4TILpKAzWRUg8x+9PrI4AB/V7s1xuLPIrlm3V5Mrig+VrAH3aS9D6/TkRFi7lzJay8ku2LWC/JJSqT7KZI4WMnJ4tZujMcKp4RUIitdHyg3h1e7j5CY1TV6NBs/ZPIrLNebaWeNy1XVLO9GlnStj/iWbNpfm9ffnlW7etMR/0ey5eNfcS9oMFV13tzg8A2j0xyj68cf4nY/RSwvGaQwNl/aOtZUNDFTkP9y71jNtRtc993fNmOZZ2/tQGdzDWj51x8Iq3ZjuK7f29+/89NOdD3z8cUaOHuM6ZD+BhYKxMzp8iPyYkVnrMNMbh1C1gI8KzF0CKhXSq4dmwvYIPjyEPhRQNaY3ktJZiqWUZyoUbm4mNUqMRa4gmQ0SVY6RJSyChJkRF0KsdgUyFJcBU/O6vC5ORibCEmbkJHyJRSRKHUM+JjOxlMTfPeaYWBQL14lFH6R+U6om88pZUirFyZU0x202uZgsncLF2sIdbfUK206Dhms2GbKt9aMXzmnKQ4qmr67C311ZpGZVSnm8Iye7kNMrclhkCQQ63SXop50dzDRH+bxid2p/bt5WDfrstoGZy49dPs7JAmMqK86xTWmKe2mmYKJRmW/Gpyw5DG2vYHXKbG6nK59RauRFpnE2Bz1qvEKzRaWhL7NFg2WVxeGSwiyWZlX7pxSpVcGqmpxsI6uWZ3On/6fY2+ksQd/xqC5V68rrcJYx7xk0a622hx6aaYnsW/d+kdzEjq7Jr3SaymuMQdNmo9qRvXxZcPxFyyoyui8Pge6LY1YlDRaShk4cqEc+YsL0zKOoTsAfHRFQw0d0p0D3Cch3BL9xlOSgqE/k+exrZJWBTA4qFj2Xg6J/pIcqwmB/jlaEU0fRxbWOLAv9adpVURGMMIVADz+X6j66ZD+INalSPkksM9E6VrUzdegbbEib8XG6q201PoJeQ6/hI3TfiPoXqe5yNGgmwb9ASCq+TJYFQ2RBj2SsPhiUyjD5WkC/BtFRGBUkClsdJLMp/o+qMtGFV4bx0wBsdaXp7QTtyH5tWXo7wbtz77OqOJp2BM2pr8ePHsF8/D/UbuL6btwPJ2Z3d6HZ8ThJT5H2ntkh/xDMtUL0yjzUpaL/A6BuEqvcMhEcaT0UwLnCY2QCHEE3ZyHwaEZryleJRsfkJrUQlhpxGrZan2UlFkelSyrJNGEtGCFwLDNTfCiHHcUoO2OOOuzmGBzBXigILv3ZchKXczO6HP2E/oUu34znnV508+YTaAqa+s1m/DGejWdmb+kdeLx3y76h08GVT16zsiPBztyMFuL7N6PH0rHNJ05sRoH03nt6e+/Zl/7myWuueXKNKAvHOYHdL8qCNA9DmoKxgzWgojVtp3cws/H+57GBjrevOiL6FX+SNcteEHOXStElpvvpfrwy/S79bepHJps+kg5n8v3inFOFVC0leoJkpoTsAi5hX4JkIQW0Y02CCZN5qKkjHSuPMGHw7Y7Q3QKZBsKEOnpXtqUOkwwiNXKNBsewDLvA/dBeYCkGEvf6ZDsCbViAFn6E1v98TQaNNbMow3r0IQZc/LfFGch3GeQh2XqQBGkuGold6MGlItyGJCuppJbOLAukRdpgIWsmmVIfPIKW/mLb5x899sCNdSrrsms+XYpf3kufSE9HL2n8TT07FtYu/ezPe2ddhW4ZjtfO5v7MNQEnIJV5Mn2M0pPYsVRwJHqmrF6JmKyejejPtyncMpdFqdA7qgrK6mr9mJPTS2AQPlqeOnmCuQHZdROV48YWFegdOXKDvdD4TzyJrj/95+FaDNG/NwD/CFO3ilU8INmBAJnXyEl+RUT0KxiQcSlWLCEuYXGF4sz9JEPi3WQWDV+mHWS9Yg1VFaCt1c0REXdoB7MUYmKpUDeYU6ASK68CRBmM8FE+pH2G1RcUOsksa54DdciRJoUGY2TJHlLjS6KIDjsld5EgHOzoQxFxQqjLKYXhkMFkj2q8dg41X5Vfhmrf/elB1yKX3f4vnMT/xBclTqAd7u/RRUiLnmw7gff3WMrxm+98O+AJBZ1uVPgKUr9yCH93iBb63kgP2O1w6bf41TNpexguqkfUyb5X8ZkBj8eBntv4yqtIc/CgGGuWeBtoKvRckIoSb1ROIrfJkhDYvfxA0hMOkcWuEB8L8OZjYBEHreas0r0NVk4J/FdDIjgkAObSJIthD7qbDSaroTeLXVLsJBMzkSZEGUcqiilTXOZyRs/u6cWPKUnhzJo2Mg+cW4S70b3D+f8DFXZH+RT7Q9KmHYXA+w5jDV7Evi+0rzrMDKamHO7tYIW21WsSc+PlJfYp5eJr6nYSuURfo21r10q65pd9KFs6oraU4ej30wFaSM9Gt9C1aP1wjc9C6J8I9E4AEOIicVaW6I/y1SQJCQ6sEyADBE3Da8kb2QJBCBEVkg4iTpWRGjJbuEEJnD/HUxIVk+B8QJdUl4qTlUJ2sWo9RmbHGpXIKE7wzJCLUlLebJbmyMW8DhcyOULSZ3wGOWfkjiLV4cuu6JmRGP+7rha0Bydann6obu6YjmCNMXtGovFo19GjL20r0smC2pDia/yno8wP/0I26YPP/0ar0i0f7Fi1Zdn8qWsEtBRdfXKmc3xsfsOk/FzyFt33kKdANtpYn/VpyvHtSfjAUmEfMuay1gyWSHJDap/yKDeZB5pZkcAzotaRrEhQJBDXPZnPAlPNyjZYRQjREL9dLZbTVYmF3S6xnFvrioADbQRjTVCC1KNFpekWa9q6uhJ96DV2zfE38R/ePI5mL1+yYjH6RqwL6WpfxVF9iSGBo452dh7dGAxuHKJACLra1kh2FX2DXmP2wLNaqWF8y5Jm+8uEs8t+mUSIdnI3v7D+5gPr6PfmbNgwZ/a6dRK3AFsZImu8aEeaeqnQhQyIVHwu205CfGBuQ6ez0R4iu5iSis7XtNGJjl58HCfQnuOkr4+vah+uVz0nhxJpoQUmK3UyHUKDuFfEoT4pJzQcv8yjCsWc0DSKTIOzCLwvOGgpIApp8YNC6gNJZwkorAoaWQ4+KwkhDWpyyXlNPpzXSBGyc7k+v0AKT6l/j2yaz+qklyAadfYwJurmuZqcjE5WaLlFQwlp/2n2/S6CeqCIa/oS9bYyv31KxektzJ5Ugu2JkyNNX5+kXxJ3tFJOsD/14pwcT4iomD8oxfhEXzJv5KyQYtGlFOfnPMPQar1BlcnyhfRGKf/hcHrJ3CmS4wiLhY2ZoghONrxz+FO/rM5/+sZYhaOSXeIZAi/zFT8KrXlyZe9AH0tJW9mOFLXT799pdeWgRmUZXcX7/adeA9R+EholbYgusPgH+X7uMdAEJ2DP6Mws+0KBLPaQK9qDc1FvohFZArEP0hodrlKxcI5KWgrFo5p6qWjfpKNYwA2KhJ4ot5xjKdrs1ZUhNg/RYB7cXpqEpkgWOSbmjWkwFwhcGw9NVvPxKuhHUDbqeesdtAjR22j2EXwSb33rHXwvTm07yryLLkOPoYXHuCP4wd8/hP/4++tRVd8tqPnhWy25yr5b8UvTp91qYXVoTPnlyNKyyBev66BfeQtvw6n7afZhuPGSd95CVyBmG00/BDe+640/oIUfcO/gX+EZ+P4PGHqlgArxJ1bzhodR27K2sNG8Yfo0/NQyy2x0qM53ZQv++6LyS8T5nQbgO+tBuk3iKjpmUVzVwnBdKiL6wBD2wQD7oDPkA09Bg1/QX6za3b9hwwSFYu6kKfjF34oMJA/djW5EuvRiwkbM9Ut3r+3uRr6tD7whkpFznEcLRCvOuEPk9k6x77gJu577EcmfpY+ni/6O51y74GmL1nDdU1ePNuOx9G56K+49smUFfmrG6OF6WnH+O030UqukHQh9iD5MJZg92I9eSOvpv9N++isJPzjw+78Dv5/kHIrJ2pGc6EgUBcTZq/5AsoQghaVIqxsscEjLSJC5BnqiijG9WJ7mIiEKAARzzGGWhXShoD5EwMFllyOaedVSy/Kjc99W1vr3u6em/FPcy7u1xQ8fZz77/PQdB1q33996UN1S9tRSfJA9lZMbOc3V18sCE8Ke2xyOGVM1vjl///vzJGO55rXlmT4awYUzdXy30BF0a3o2zadDxDZleB1lhbG7RfL5JJYd0Uu2EHg2laKOsGJpXopiy4Fso0LhdPN+NAHNPjLMC6VYvhN6ZboYY8sVCO+wib3CO4d5WpYUYysh7MwJfALV8FnaZ2idwebyiHqTS9Yt05Fa9+copLVYnW6f5HsAk4/q3HZWZzSoaUBMuUmcNEEC4i4nC4MuQzHAHRK9x5/KnkSFaBqyDywY+Ovad5/c8jdk+w2KfrZu3Wf4nd88jn/72SaWHkKhLnxyM0jgTPTYY8jyyBP4j0+u/fKJBX07960/DjfrQLHjN9/wMf794xEsdIGaPJJpK/qG3SzijxZaSxBIJRY/aYJk1RkST+SAo2oIEpHKC/1wHZeU43ayGZu1rnMOIBPdsm7/xnUHmNID60R8OrBu4/51Ga6CvpHPznxPPjA5UkumMgAWKISkxhqEbysYUVUlfRufq0nqpJiT7WdAaM98r+zn0ChseHbDOniQm1+4ed0IpNy/EZ7ks2HYHLEuAcm2GSleKWa/1eKiRYR1S19mlolTzEDawwHkkaZXnvWiVrahVyduR6idpdrgIdFLbSvPloGiovYt2pm2uFWvz7FOmand0s6K9Z+nd7HLT98h6fsslpKNI34gYJuYxCc1g01VzFU2W+qeqqZX6v122mGuNtMOu78+wxVCzB62izw9SBDRa7aLlHxKWFUkn831iesZOalmajCPVLfJxBI9krFxiWMpzcgma/uAJ+Umy8doM7maAilXY8jL5Gps9gvmanQaUWw1NLypFz1A7bYUmoOuR3NS27al8KP4JvxoKvYWakN3ora33sK78Qq8+1r0IHrwL3gLc7t4etvIS9KFaAtqe/11/BS+Gv/mzTdpGkjKevQYnpmpUxjiDNwA2CgvFaFiFF8oZqNY0VJVBUkmSiNmSElKlEqyZBaJxV1Tkywhi83pVSFp9RvwaeziIpykopYE+qVq1fMS4Zw9H0XrUJCsxunyueRffE2v+PqLdTe81uFddODSQMfrN6zr6mEmTEWa2+9AhtZGpudfqcfKPjJUvO/JU1T2VO5eO7COHVqdmD49sdrQNLnFOz8Sme9tmdyEd6Zs+YHQtIuCgXzmT5tpDaIdjqza9TUbN2bslZ/zAM+yUFXECgOLt5IFBEjz1NBOUR+doCHBQDIksaFgzK2P6mjiaxNVNBciNeuSXfDdseORr39qcfMbd/XxfN8cpwYVRi6au3o0M/uXzvg1E9El/WgSYh99Bu+b6Jo1b8GM8cWbL/hu5vlngL2dDrJXROytSVxZJ7P4kpziSCmWUqwZNJmViN5c0lTmwAr0k8MRr6enKGzl9Vb6tvQ11vpym8KKUpgFP2fQpxuV7zWj99C7Zm9xXn396d/VlRVyZnoK3WLmCsvqzDiCq85bg1APlmVQA1KPQOaTRrGjqi4Y/Ti3gqDAUucWChzqku0Y6jovZlhI7lkg3vPsHMsMq/75VH2yNAXgjIvZQch1qotmV13EbM/M7lx5mNme6j5MUyeBBtxxMiUMf+vKDnwEhYe6hJE6rAGPrpiaQA3aMjpsCoimyT9Ch/MkHSbYkyfqcI6adUqoY7KJK/cqXcXnq3AknMm3ikt+BkUtdjmBrXkkiNyWRrMzWpnG/aCp/enYyjeR5t63JE1+8x78jzdXonFoA3oEz2U24xvwrvS9RJdffgWuuuee0+nj9yHtGyuGdRku1t6D532Bln6V4TgnmRDbL9ovIE+A2NgPkJA5J83bVxF7SBam0obFbt3JbL//fujBid9u2sS8uq6uWbQJx9l+br845gXgcwyaST/pxfhgvljJQfx+iiy+++/Dzw4XA/YlmCxxeE62relnZqdfa191UaK+JkGGhouLArFG1jy0/0d4syMu5mrwSfkR7gn4XhfJRMXc0swyaYol4sSZ3iR8pCBJWQW8r1A+hTx7mo0d7S9NbbFYrlLRqlx741qvRjs4eRVqRa7n8tzYnf7v/tajEYv3N5NeakvoGyc8tadPRf/FlG1fO8GWc8vklegm1It8eU78Bh7/iNj+M6O5zYBdVniOUsSK6GWSfJGzCKoC+dCKvggfzXvh0MRTP1LG0iw10BY+/1CSRad456EXRj83/LZbw+ccSvrh7dxDe9X+XH3pC4daT/0WTmbDJXvzmHx9KTjNe12sE06NfnHIK57ya/aWkA/D9XtL3Tn60kH4gP1W+60uTq3V1QzCdWQDp0a8CVfAhiyZ2ZDDsDnq3Lx8p8vtLymtGPkP/aeTfEMeSqpkJLplGl7tTe9hImRsbYiR6aPDwk7ng6LGPMGoj0GGkMwU03tYB61xgA0jG/bm4/iwVBNR4yixoHttDpkd/XcN2lGtdKS/Yeo8dtxfjmZbegcGei3irt3zCHIfve76P+BPUt/j3UY7a/dY0TTMx+3KWjRdnCutOKvL2YDHPipEjaOmUp3UFdQiigxTEEZrkThaZEXfICFYc2CkZgjJK0GhOQqgi84iMTx+jrZBzyrUljxfobO4IhiOVscbm6bNJnGaGbqGLHvtqOaWKYnKuZeJqh8sgyuL8yol0NOcS6YBb4+K4ZrMMWMy6zxuD1kfk0Znz7mcDKkIYmXRGE2KTch1Yj0eGHIfqzeRu8CRBrDTaEBRPRF8A1yxsfhav6ZzStf+tkW+QF7RVTcpc9Y9s7X8jue+QTcBA/iostaquQO19i4PhhORZ+770w8Pbi9QIAVqMRdOf6naFI+sYXtWfpK0sd4CfN9BYf5NwXUbFVj47D106Y9zr1rqmgyQgE9+/N03kfHWyOU3voEm373CoOjpcmbbPJ0tFw89s30iuurV8OECFn/H/r4+YYtMzlubDtRXWN17gyVmZPgvrb/zdMjScef26mCu6Sm24gQ+qlym8k6tRo8gs6XDWDF05mlUZlNcmm8P2ruk9X3YetkOka8WiCswnoscEd6fM8yFI2ReqZaUUyGDHXbsxv3PP7+fFucibty4kd2ybt3pq6Xtz2xgRIlIeP0kIXLU+RzODjLTfM7+GyUOVzzC/lsl+0/mL1qHOZzDLQqB0ZbhcKIXckEOR+r8TOB8SAAQkxDtQkTumjeRDpUh7evEqL+9DX/75p/QLrQe9+HOC5K5adKHV7yB/3HfW/ipt6558+9fAPnb9dXIXJxZwtXs83G16uzSSEbi3IXOLpgpPR2Y61D7qsOpw0zsMBhtoW0NzQLW3ouvTHURky0Ish0ES4nhTnVJOEsxYLMPK4q4o+DF5wEvFuu7PGR1Opm0gI2HAfst48welINiHjASMmRAzcYEurpK4bAzDY5aOQrlTk5zG+W1jlTn1OcZF/KlPkUvR9BdU4076Xn4hGzp6cAk4/yDhTXy44rCInb5RKOAfigqVAxZO4+e3vPRp+8vsjbRYwZS2sy608CVvqEMVAnhegVn65CNx0i0S1wvyl4AWpyjKqypGVnTJyfdAvAi9klcNhwhUCMxVVHv5yh/XBgSUJZx/Lr0YFkt7aibv6xn+0AvPZCe8TD+qmPydY48F00bSB4O3TSwnNluTcyrLUvT8zctqi/OwVtpI03hQ7MmjH5++rgnfbrhda7geXdceC1TiU6dVz0oMhuWEpeMpYiv/Z/k2jBSrjUCif+NlOvhOjKHV/JNiFxTCvA6fBeuIwvrxP8iAo5J/SrwGkLJQijDa2anR/AaQmlErgJy/Q/8B5Dra9C4v6Cr/4LnDRObe9OoE92A5pwmxOZPb4OPcu6zRC1247lgPG79mV/mQGKkJUS8ssw6ruJ8feKXDcpIu0mLNYEkyhYbqhVl/+dNWfoyykJelPXy0qUv45P4Y3zyZeYy/An+16vLlr2KlMiNFIeWLj0kytNw31oysT2zQJJl5FusI/rVKPUr0MakkSx1SPpV7FW9may/C9bign2KSMWFhrN7L2Ac0Bf7EM3vPUPtvaAp+PMNe3mM9+3L1CWDHDmgHzQkO6lHI+VIjrgRixLX0M+PnsZ8IDKz8mmj0xNqmfsQh4e2IqBY9+Ah8QUP0fenH6mRJC2a3lWLzyAacWQ9S3ornMb3k0uI/CJEK2zsTnE1KJ2YedOKqyqR8LJYCX224kb0DIfjWZ6YwzxcfaM5V3JjTOSMOVlef/qzePmPDVkXIfQ+u/x9vDU3K5HekchS0zvx68XRaDEaFW/Xxb8rLz/RoL5I8+WXWkHQirrUBxzXBZzASObyq0ntlvh/tKjIKIn/O0tSrybLINCS03ouLoDOokxtGf2XgoJ0Xlkts2P7jvsfQFlRtw19YAqa0Ac2dyw1t7eXeaG3NxMv4wzn5Y6ZLCYL96bwyNwxWSf+oOyP3HFqvDg3vkn8P2MU0optCnZ4brye1tPiQvX6TM6HlLnDDhPjxCoT2ImS8l2yTo+cc8E2GhNt09ma+Hnzf9upZNx+1ZbK61e5QzdXz1vc7A831264/97YqZ5ah/X9rtvbSnP0OdM6r3JPaRzXudXqVGYXB+Z9U5qfx2Rl52q1FeWzmKX4GfwaPiNUqy3F6F15ljJH03eFM+6PFcpYb9OaKbXzqwwqry46pb2+uWtyeVipr6n+1Ulm9Jg3Zpb+9uLGXS/f0r1LoWxqOijN+R3hP0q112e9yLORoKpfKKsmsxRI8erPPMrUcTqefpX8seTl5w7mF8/QS/alX9xPDeeqzvt+quoC60UP/523+H0RMzsFfktqgJkxYrH7Sc88w7j27cM9+/cP5wjlH3L/D2VvAthUlbaP33Nzs7Vpm5u1W9rsadq0afambdJ9X6AtLVCgQMGCZV+kQNGyiIgsRXFh6QhqdXCG0ZsWER2cKSouo1HRD9BRZgaXGfUDPsUd2uv/nHPTUlDm7w/a5N6bm7Y55z3vedfn8cCfjvIySbja3RBmUpwofpLoRHmYSIoFl0HydLzxoEVyAUYh0FuMGSgRadDzBQYBkOvk1dbXWgXK1jet5eXWn6Kt1a1iryCspw3ULPan9Lbh71qz2J9mUTSo7eXN6AWf2CagavL6THBLZv0EG0jM9NOGWQilbpYh6uoQXMvzub2G4/HAnAzQAEAjgTAfAXrE9Qbwzzq1upn3AHtl5L0wux/cAgSk4xS4FcwNr23iPTzyABoXMgFaBedHLqDeaxLuTaN6WACHH+oALk8GaN114ExgL9gH9o2CcpPEKBgTiUvdR/vIL8O5GoR7mIzDkIhHPDoYix4On1yhVhHqay1QCKEKN25xAwqXMWqVlHh1vARldIoq2mQafiG+taaIlxc/U+s0DXekb9q4IlnD33D17VSLjJXGikSSTGpeehx4z2G1KtlyScLV96ozNVRPRhz4UC11N2dhXBlhxK7qwtk3PWGGlkUW4US7tRpRWcBfz7Wv0KN9QkiCAQ34HhMNv+ERnQk8fNrk4Rfz7AqBCDquAqDg2Ysybc7hy8NfO22Z/WTvyAUU2EDf5PnxZ+fLEthjFPwHKuPL+akFap2SPQnylDp1wdVYqpu9cnUz+LF/Wz9IhQ9X36O6geDq5vrRC2gNRv0cI5wl+BNcey6iiKgnZiCMHTiUQRLpFQHSKgRWK7E8BEcI1NfabFDmhVBF8B5xHzqKyzhxAR1U5HIBPkFtgQCeKhQg+9Sct4Z2TIhL0Wo9Kp1IFKOWz2YLPvqoOb8uu7JOB04pJ0wZWbjkYKIyTjlh8s9LFh1IUIKTKmO8Ji9piVJlbPEuBvZCs1V3sqiounpI932M3ysxnTTFKxSN8AlknGJPKaJ0tZXZYplcbkpIN/vya20fgROzZzbnr5+wY+gt8rE4ZeLBJQuHp0yEvyPhwKIlxM+TJ4DaRoXEc9LUqHBOO8n+K71AN1RdXVR0MpF9yjZZugT+cKNKuUT5Cz/B/Ct+guWX9lTadfaU4Xo/QW+6mT3F+QnInkKdByaclPjvbgK2/F9hD79K7gczOtjwr8d8//0gvnfMnnoFND/J9ncAN/gGr9Vu8l9wn5RHetzQkuJ6MnAhig68rXNko3a2O8G6ujqdy5NIsi6SbdOxGp2ueirYCe5trdbpSDZ11AbrJs/BnwcNcF+kYQ43n2D8pmpduw68pdOxzkSvS1ddDW5nN1X36XTgE10betBVt7JL2OVTI1hRLuo8qgX0cXkBrEGg/SKRyBQ2QaBkdqP/pwfM36vEUbNKSbYs0zQ8Rxn5G0AV1U9ZOf2j5homkV+NkVgFuromcC+4t6kOt0O2owfwhRN+RLCB7YEf0QkV1hvwNY+O+1lP8i7xfviV3mNwnzsL3It6VTDslNPDm8V2ZWWBrW67243gpZxO+y8wMTyRujLU73OE3RNmFRyUGXGjDTGac+ORYOvw9+Nzbui+l/hn+Wd/rVaglu3Cdkf3jfddX9sy/D38yQKutuWarYRwgfS4CkyIcYE4LxxnYUNCEhVqyDkv6ZoXDiVmdF727d27D8zVkF9Yc3OtI2rNZc44YnUqNZupMXp5W70mDZupHv2ddwmj+PG47yCSlfGMml/jToqs5MfQAkuxFvG2FtjIK/BYYCs4n2NIAcNSTZIKDKcYc4ZN488N/l/8fHr838kff6IhWWtRkXWE1PAeTSY/xscpyWRYI2WpFEMO78McYwpLqROvP1eNfoZrGCa/jl5yA2LJr+CTcD9nlJMpD2oYwORjPiaMQ8q4UDEREUaJChcGJs2ASkYYDgVQMJqjagpluKBbITWYcbOLkGZi/jt7k8mNYPm9qCHNIFSpXRE2NESXVkAiw/wm9E48MkFV/rxRL5XMk+WLgprKv+mNUopaUCwRB36N+mlGvFFb+7pREZVovUSmxlsTTLf8LU0hVYoU9BeJQiqOs8ki3FtyYjLRQdyF6ocEduYWKH9bsPzVhJkaaWgh1+lzN/zQNQh6XOFnFtLPxgm86vopc+aP9nYjXgyX00hAJYoItygC7mlQe3BFVPgJipZXpXZicAVUpI1wNVVCDufYEvn2RbBgskhkVuBuBGhdCHRwt/dRBC0VmjF8IjTUsgDeNb0WuN1ZxlNycUxer7L3sz/2vd4Ibvk02pYu1iRSCmGcSCLmC10dZUr54lSxsbHenhEb55v2oFDI4ylSHpTS9XVGs5hSWIN+sTKapPTRmnh626yptuPe19krt4MFAj3xMyhgau1OJS85x9hTLqVorVEu5Nnt1iJjIvnGQfZ/EJcYEMK/ZBdYBER9feyP7O5bzoJkjSIpUZwg48XyJSJJrCja2ZEbEIkoiSjOEh/MC8z3TnlbWFORlvmHJHJKW6bV68kLFpXGy8RK6JuS4OrRpKhEntag5SmnbeP/T6t7MlvNfsN+/nnx1HWP2VvLeJt0RW63VSHkZTmpBEniaH7/beFE/tvQXkonFhBcLnEUrRtFy0/Iv23gwuKElAFDoSTyJyZ96PkCz3ffcpcNUkY/FBLxfmLEQ8SzBNxDk/SG9LHI9S+uoHD1Dc4mSkLKdVDzylHbuEBthpuPU4WwY+BCNVuk5fxyG3/AVs4vUzrYIUfHKRNQjXw78iOQWU/fksUezzzGd2fwLRlufjxVYbtaml5GgafYLTi2s6Z1AdwN4f9G8BR4tG2EnHYks7g48yFbQYHteg6YBNQjDD8/wTGuSTHLQBJnz6pkUHCDlMdNGi20QmAw6WgBRWq+BivOrjr/lwOLgy+zT74bSB/uIy+/yD53imw/zf7+peDSg3/5521nwW1fJw0ftOWdJi8r32afhTZL9M/TRbmCcgKhhjsRuqsqFfgsZgEP4Qvh3RBtYwJuH0NI2Ny+jyFG0EU7NDCMum0LXtfnKIU5yV41GQbf1jlJylOvrVGwTlZkNmbEjpAq8uhisjopxZRAUuXFCXUa1j/yiSi+mnwmxy7S9TtEScMnDFZoV7NDzhryszpnQox2ZC4oiI+OSr1amwz+oWGDygTwdmGJhkpg2wF0FaWRWjCMJyCCVkQi6v7ApX96VBd448G+PNv5RhIq1lzbx40ktJFz4XmYJNID81gCGvT5HVf3CsLwCfvePz8l/FAgRNoaQb5h0io76i/AIEJCAGIShEd1rNWU9m+bnn1BkqXYk57GWj0aqDJtw1ey007b3Gy8gk9vSc8aGRjFHP0e7gH9XH6IWIZnWBcO0aiTX4MBsNUIABInjMB4cGmuDCwOHpnCjEmKPBtkPI4WtDFQlStoRuYPmeLgGY1aFRkJtCQ1Oi7jGKcYJT1Dco7SwIRBT0B9pvPiQ2hSjiJxaLkj/foP7qAaN3xwO3vx5RPsl43ssUb20kvr/17f91Ff3+JFv6Ma0cFHvAk/E3/v6fn7+peAjL3w0pZNXbtfBvLb2ScW9+3/+4EDf98PHyO9gz8v46di2Ub46rlEKfQn9nE5XKbEhQp3rE5UFluBGlkZFxyECVinxznRp091ogFANrMBQxlFYVRw1PdkcTJlYYSIWcaRVFQ5GRvK0CPa0FAC3PSeJXkiSQwtEyLcuaIyeMGabne5c/xZ2NjWJ9OyQgn0deJUJovN4Q3W4qHycPUrFporYoFDRQvUYw3lZmlklMCv3MYVKKPbeGOj2vtW7/33w4fduzsbVza3+HMb4VPzSrJr9IX771/Q6M9tbs71NzasxE8d83bunHeggieo2Devt3fe/vLhK+UP5zc2oUwoFV7V1LSq8epfrr9nX8XwlYoPVjfCl/hTAuiOxkjt2ShnZSlc42jPLOQ6ZnUINAL3xFp0CFJDiorTCwW07CgRnWrwBUpvSk9pwgXIHAkEhj+B2iDIg/tjLE8o4MJNFjMu1b8ZayUYtjrucZYaEuMkVFZyxhQF0OemCbKrF+XekRTXvn5TbmadVykLFon51tRoieimbJbJDl9HdOykwJJyydBhc0WaKNHaXKmLjX9y2ksH7rCoZU5r2jvvx0lEMUKxCNu5Twl7+BegDKLskQXH9yN+mBjzZtE4bzkuOW/B27bRhJgOhbHIY/V5jWoakXsJbn8PGOFnM753hyj+mZa8UvYSu4fWVdQOb9m+sLAIOPbULXyEPfcubxl7nD17Zv36s8DyiMMvCvxuHk/yj9jYkaNbl65caTIP3719uwe8qrzjTGQfJIX7BPuhPvMiTyIFFACzRY4R3zAAEPK6ffxYwFfxKTXiYjRBRxrNAF+l5nHY/wIJyKfb/f3bt+3x+P6x0GffGKdkw++yP0gkW9hNOQU8lwTkAEFXbXZmHlDnFtHsSXg7e/GVx7p0xueWFGX2UP1XTvuDEqu9FEw3ZdUpHd1/XF0LeH0f726VdKx7YFHL/rn/eaOhXDI/h5/hD0iKzM3sMY02l+LJrRG8f1z/zCeioW+VwFUPYPgQVFrLAV16uCabRlKB7dsLjTwXb58tF+UnAtbhjvA8koDqGWrlPBvYGwb7rIFrnEgoX5WMarMjOXYNV5stDUdKDGhFigDad0ESEZ+RyMKLJUnaVrzgrr98dN9LIPZMT1NKStP6M+zXL73IfnN2fXMq+cZ9H72weUFRBp0yqecM1PN3gdiz6yelpk5Cd+GYZGQdKaH0uIlCaH+7CES1UjGG5FFlD1UjD6iiBIpSkRh3OxWKCYFEm27PySe55SSVBxHhjXd0NUHb02iGMmakcPTEbETJI69v7JQ746MTI18gV+mcPigDlxs+uDjy73cqX/kU2WwPvPY3aEFe2Q8WxpuNj4AwOP9EtdVVu5OdxM7ZZlTH2YCInHI+YDQVvTxy/tMsRZyFtIMehybJxz7KRhkl/wBg3apl7LdhMszex/6nYYlL0fx0993gj9++Du1CAbZS799bWS70x85tR2Aik1qiHJLhppgJFdv0ZUXWVYGy6K9Ko9d9mZjjSD6zOnrklR7d52JeBL8xwpOlICyEB6MiuwmkfqrGsYkh9jAiVAX1c6hEhNHIC6MIfrTO5sgNVl8bOGCkVOpIyQyuyDRFRi4FxJJ46AQyFPYeGzuB+bqxgysIKqZzrd8DKRB/NeHo271fswPPPscOfL0DlIq0mgfBIXBsb6JManAnbWJXsZvXNwQS4gr/l7S/HjQZc4+w9JkssTIRsKDdoUvIZl9mMxMF4S8mbV30zXNw6J76mWhdosx/essGcNc/nwX1X/fugD//aV2B0B09vZV2Z5kEcRMmRmcp2fPFZcqKgjvMgfy0Jf7iHyxpoq4P9DZb8okl1Mj/LU8+IxGPyvp7wun8N4hMQkOgojpTeMCUjgrzTWpxBmCy7CE7l+6mdFqTV0Z7vNCJQd8czpHaCNCj2aJUqNSocgD6MtA9AVGgEkwAvCvsirrFS3qs61ctfuLxjyVsKvui5/CcqsNbHC6P3PRyzyn2cm7P4T88Dj4HckfzSntc3d0l6q5/PZJtjgMbZ85+c7U4jdp2WiMRde2m+iMxsJegf8oSSYSDKCGyCQxO5DnDFISZgJMpkDK+MOOzY3gijw8aK24/U0AP0N6SMXZAZHKiAggz2kfV/Eg0BpmeyA+LaEEfl+woAGJ0DTH1YmAxvO84eJO6u0nTyB/kvsYlSxq32smugw7H8OHu7uHDDjBJ23N/a3XTLH2qI/7WyXUFGo2ZnzzyBnkwOUUcZeTBSbXwjSpFrCSG12dNYnVFRcC3TVTcXlx9qjXJmpYE/llYyOqSWMP9DxabbU63KjrPYYhXyj2qQ+wXpC4zZ/3uj1V0DE+n/5R5JMvK8VeY4Jish/rcSuQTRQRCSVCO4fJHh5lorrcsh8MhiyY4XAAb/axIrkw2pts56CaUH2TknHGi5KiCoQuKa8ZwcyQliAKUIAXjrBG40AkxR6OkOtqhSY8UMVvwi6zpORS1/u8g+8ncqt51Dz7JvnL1eAfPSFmLWpqbkkvBgFrGbma7sngT+ynKaxNnJMqlJPtZpuJ7nTMZvpdfkJGV/Ryo+7/tIsa0+G/s1+zTS9trgwk8j2MtNTE6ms1jiXrw1Lfs27lGa7EokfZmloCXQfA2P6cLXhKZ+GfhWGiIdmIh0QWSCWYZAngEzOpxdVKoQWxOmJkjRQp1oLZtvhMayaXhgZySRfAotIbzCF8curicc/2SpdDnCykoVCj1vOi7oUfQZYppy4pliqVMmzRUR/5EwcNQDvnT8y9OvPQtrpNKlg6KksVyaGFLB6WKOHnGoAw9ousadJ1i6qSDJXXF8IVa9DgAX75WMcVI/QPwNnQk8hOFEuiSyBTJmpyS2rq260qmno28UnddnVQKQp2MTUhC5URzaKbBHyqthjN8K2JlWAYPZuKpRrgHXrkuAuVoMfNIC0JBEBIgCfAVmPDH60vBzJGIb8YrgwZABvCYvBa32QNtAj3f4zbA5aRUKfkI10etQIF6UqnyOU1q1CHgDpI+OdSVJrmTI6mPBSImhpwL5s+TMKKGuP1tcYqTMh77B5C7+35w78aFS8J1d5WkR+Xe0SLkFVPKof6gczgUD+bTYimIEarZ15TSVppiTwhFPEDyBCQPwQIBkE5tntvdm1ZUbhaX+2eCqZRAIlhXFZei7RaJRCRoZA+LBFFX7FDVWDKk0qtHwEkyeeTTrJX3SehprQ8/4n/00O/zhbF11Baw4dCm3aeCPKWkXhQl4meellJSyT/8FJR3XmxqnFQTA2JId9gw986nChZVZcewVfESSSZ4lDJJKmsGrrOHfcQUbA/7cHdFhC4jB4shRy3t5oJJiODPjailBXyZDUXOoulQZhayllOhEjsSrSYcBg4uaCDekhkpbR5nNWdReJsnpLhFLUL1DU0gjkbNGSnXEmjnPPM1sEGDMhNauhU9R8/+vPl1djfc1smEL/qzsyZXVRfl9pb1wFkT/PF+rdq6gLrIHrveMr6LPftMT/l+9if2AfY+UHtR8llSmnb7HWaTZw/I4PNIwWJx5lR9nELWf+kG36AE9VQIEPcAQpiTjsHKGcJMmhN1aga4sUCq20BwXmeAflbAlyaa3TnFeFRkIW8uGhVn8RgF7a95D0iF6y1oM84CASi0KJKmUrvtwM0VvHE7GNeDcTP/gUzI3DF3m1VBxxrKJpu80zQP/kCSS5sm+Yv96oKMUn1g4o531+67qdvAFjXczRdLOsup+Pw5WZ4Tktgo5YRl/hhtqZmX4M5KWPDqvhkRW5Pi+GQicXbUHuZFpqye1AAd8IHpYBG725YCDOy5wW/Y18njw128rSD7HVsBKGB/OMGM9oTahUfhz1ERJsJO5OGKEI4BUx9GKUvE0J5tx9xWmPMyFKPAPaCDSrUEtQAwabJQqilCJRAJwZgtcAXjSjGPjw9SSOjZ+3iIXhJ6CyotMnQMeqFIVE+erl66rJp8p55qZHsy+exznz3I/vxgJtsDBvg9715+t4e/QnFyw8bXFG154K68BqV6wx1KsGyBFd6cCTbY5mv7utu3FSwu7O4DBtdkp3OyC5T6q6v9QNDa+s/SsrIIbqFws+B1qNc9RC2xBO77dXA1jeJrJeHuwUG+NkmUEYlQ88ODVnyKsOMRntOgF5/m4SbDCviG0nCoHrW84coLnt8f8lrhUYoeHlUg+cvxM3k0EzEbVFpM4sS3uFEzLD/SF33zS3quQOskiD1ZKqpPKdTqBVESnkCfWpTcICglu+ALL5eIa7UFoy/Ao1pxCdn1MnxHSeQdKp60Iz8wkffolhMntty2NGade82kLr9I5O9qWpe9IWrp1ZEtQ0NbVi+OXetZ3bwKvbCqebVnbexingq9o2vx2Dvu/Laq5tkb+wL9RAOxcbQv0Gxngi40WKVOtD6rXEhp1TtH+wUbx/ULon7HbExIjAg8oXdSMdZD2AQHNDcbKjJzugelAEJJFfAkWFRbz9WpZtKywqh0Q4bbk1tUXFP7W/sKfRiK0YuR0OBijhgkKH2C0tw3XBYK/l87DS/s3TChqMCywtTgL+4uN/bUDqzZS2rrazbW3WnqSpqSX9JTYeyuPtxdX///3HL4+3v2Wg0VwcaW+kPVxVse3npPTf3EkmDj1Bp0Wj/5Oh0ZB+fEhOdDh2v/uf4d1K9DhFS6G8q1CKjzuOyCliIAYpP05qEubEwnSRvo/dCgXQTuG/OudrOLkaondX3drfffb3ruOYb3ELsUXvqxrw+I4G27IumCn0Zeeqh1zpaD/gUPsX7wKpSZqp9lULf0EDT86yYRtyJ0hil2Zh5XyzzrDNOOy5eJ0LwpcNXEwD8vEaXqsf3IM8tQ0oNE/YOUDfg4ljb83yhXQaWMO1Z8Lo5nzOtTYRsbriEPh3YrQCzN6AsV2qsiuRIZqkaOAkb4o6qiGjSbSspcycWq2Md/b3X8aeQ1Vc7vwEowC5QsSUspCGxN099595dL2Xd7lSaJw1Pp60iQxi30VXocElNCmsekpSl+95z2NSK+VG/0gCRRY1lGdf1Xs5b+2cKPlnZ9yg78tXI6byG7+U9FZp1uVfGDQDEA1j8kUTawn12doLIsqQ+8sj8IFVlsvnfd+joLn3RL/N40Zb7Z6zXnK03+3Jj4pQ0xEvh7YiTzN6y/NS6KSlRLYhpW8p6pWULxpNLOykns3wflE/4K5gPZMzJqaiQXFeZfEIRxD7INxWloBICllqsRZBAcKC/0r+UWFB/nocFGgaMk4IscyX3yyNH3W7eyrSvObXrk/o6Hs4Jn2lum7d90rottdW29EgaCTR2+3NyTnS+wop55Of7clzuHKDZyjTzSW68c0ReBNdWtpoQnP7tDPLgNuKZVgdvLRwxrmnaN7ACv1vvfap/jymd14HlxdeD19jnufLJLAv5czx1H6pw4TEElYYQ+Zi5xJ+41jIvsSUxmBLMgCQq8M8Jyo5MyDg6BSnkGXZWFB2RK5JLKssQZjIxD3UsPM+lcv6AIV9KLpIg42WPHKFVmGTYfQtFK+JwE9U5mGrKiZAqlaDT6GuFCgVZRLNBibEyERqjTqnWjtUGEFGtzs9bkcUPbWAMU0Cw2H1hBvbDiALtHsut79l/f7RSxfeAvDwINkB8Afzmw4mrJyodJ6wkQO/RX9ityheN+h+N+hWbFysceW0kOOTw7v7/33u93ZvrD58+DjBUHDqxgbexXL57Ycs8Lp9GdjtG6hZ8r4ZhZ4czLMCpXyjU9EPnb4frmFjyNFzwixh1X1bRxGtl3+vSbe04yuV9+CWqnbdw47coH0zaapm0ku4Fsy8Fz7OvBXvbSyOaN0/gZrT09reNynyjrng3t1k5sq8HZcGHrNWmMkXrMdHVgZGvGw/lSESPWAY3Yo/xEncFoykZWhQeh0jMpsmcESVpzmhVvAvDPlz0THa8hTLabxn/H9xsC1/iycB/mc9LezGw78j5YBo6AZe+/z+5k69mdoGg5yF5u1LCLNcZNW7axl25usR1E7ztzhu1la9kd778PnoaC/U9wH6LEYbdv38bZWaafzwrvFABoY80mNkA7ayAWZRgK7MxUO7PUzqyFg7TRHtqE1GEBNCwYs5+ZSg/UNU1GXFdrl0KPbP7iDmzAewUqTkuiNDCFXGgBVpm4rBuzRWITgiKv3QeV39iNiKv1F3eOu5GrnsHVU8BswXdkUNHSlKaUmW0Nk97aBYhXF05LsmWp3TElIp1YU1w/p7XBc899s+9kr8yqPe7nZSptynjuHfAV79bdswB5Er4l05Zol+dLUmI02SUps6c1olci76FsqgylSqRJmaiLvPDDO//+qa6wuH5BjWPX+8vYBz9dekfnXn26QifSNOQnJPom9lqi5ckx1ii/MGVKSn3xxJxkJe331lZAhy2d1ErNieAzg1UB/z70itTv3WWJViRKTXHuqIQSn4VMmMBd5t7AS5WaEsFPU1JTRZrIC73nixprC2ZkJse4i96aYKmbGuER4WTdTTQRa7CkO8IoWA9t5Qo7MyHM1DqRrCORnzQO+DPioTRDQQ+ooUaBvkmWB8u0xYGontOxST1gyshCPncFNHWg55ZgzAwUVDWh1TCBDnmq4Ss5MqbuJoKvdvv4qSSXBrIIVS6lywMnlM8VYsm9XKG7UiE0IW5EzuKxeAxKwX/JhBzJBN/2LZ+ZXO65bf6WrY+umLuXBovms3f98wN25/ubloL2tx4D1rPrNSx9sKVbtLylpadz24pZhWUJN10qd+9ae77YY00w2t2tW7oeeki0dnr/Xz95Hywne//w0h2n2dOPL555rtzkF9F1/k0N4j17eFnumtG610phhqARV/w1EDOgnhkoiFSxifCYZ2M+jgk4dKsJMxopNDAxWZ3yDOKeI0I5BXDkAREzqRnZl+nQ2HyGjmtsapnMjTAjRyP/jFk5pXX6DHSHhsPWxd3reFWgcJWXjtRXIDYbr8uL4Dk4ix1VYeQB6C+rkSUpN8PRdzlVuEDDLEfBYBTDQAsPmpzjiclXztyzlKLEosNbLp7uqN+WP0HpP8BaeU7bfn/Z7D0zN2ooQwp1z58X1PIn72nWbXhUJHpy+65XF2gqGhTK40G1cqJfqqzfQh4CrhOoQPYEGwb5lw/rPBRVtgSkDjw/U2+oX/HO+l1pkiS7iOL7LfZjSy62BpN1HdZcHfuPsk1NvI0LOh8Qim6jEle+kUCda35omZS6m30Z1bMOATf7ZiRWngFlfwVcBcJI3TNBiwU8MfCgT2QRI6JtOxALwb1kObti5BOyGMwfed5IdpILLsVFycXsMfa4mJbEfU12gkVkEds3cpSsBjtGnucLWAasAaXDJnYLyAALh6+gfu62A3wxiGUvi/kHQD57Gt6QAtbAGyaCRaN+q0uQBv1WPtFMLIQWwoAWSYMT+yPpcOIXYWQ7fRjRqYT0WdAIltGG8kiVDYKr8wEEzU25uOAS6uHGBD5qWRzApLqoDtSiRxOmRpkNhE7CyyI98AvhzJtwOgthYqei/d0MzFB/OnHENwJUzcsCwOIXsQe7g2awaqEjnk/JFAZVfrozWjA3rYBSTmDKo0WJMXSWVlTmaKvgxbmbQO6iuvKgJCYJAMDjk46yINsu4mcZCo82QlfhUhclEotFNZ0tCqlErMzVJ6UYRckiqSiK+j4z5+oIM431BM1Flwxmc3xKlIgEtDAjhf1GLBK4LcmxVC+lq3F9kua5dTYwfvgdWCgSxwgstTrSrc+M1xgqpcmHSnwLdovZVRK7Z8rsoFciFislIpJPkjwqki8Z038IYbeV6CBOYR2YH0YhmZowssPg0ptoZ1rwPCA1OC+iBgfUBDLF1DpoikGNCB1oRL9UhGw46AhOkoZc0RnMtDAzjSNusziZW8LMDOeA7xb0Np9dnBGaD2eyogg6gtH8pMSMTEeyp6YVqcfQpHqoRBtaoIKcRoek6SjQU1MKZ9ynnnsLXskJ0LiIJjzT2ud0oMU+kQ45XPDuFtkzOvv0tlmoF5Ix00zmzcJCbp3L7EPAZtB28iF3SYGaPnDNWQQUXQBtPJSB5dwXFOlEjDd5qJKYgy1HnhZUykqD0uC5aehIBJKodLGkMqO+y5eRcKlRKaWqyqyeBd0lzVKrxXPrraCzoryZ4jcU0bWT/eZmhc1CG6bQlNUIlva19/W139xIWT7kdWidy6d0R4nFajGc0rSumWVJ8Up7e+v2gE4k7qj2BAWCao+vVDgJ/L5bsji4gpK0sxfRT+3ru8ajxc2/n2iB/hyae++oRV5nZxrDKHWAZn3yuM0vgnA9Bc5ecWTzc3GJA2Rdh9LRTNTRhTHRhNpgzEhwOItLJ7Rg2i1ZKHei/7/sdwalSwF9PPikwmsUt6CaLbpf2fVcHp2F08Gcp//fNj1S0Ua1dsZX3AOEO5aZZk3fWqtVIVjHBew9/0JbX89ScMvbeOtLGPlcyn65QqKs2TB7kmNB7+f3ZsTefPPbvnbF8jhFXHLXuqnHA8esjab6cy/+C29+T76MN7+OeZeWO0zKVutxx+/duPZMfF0/HepJshAZhIMIwF3wV7vrcOeHC8ka3NyRrMFnNfzOA5GjsVfQ1RtKO3/ah9D81wYD3QH471h3d3cg2B3oRufB5wKBMCr8pAhU9zlMoLpP3t5580byA8FAIBgMHAtw3+hrHL5kDNelMva3AtyjgoCJEYOo2QR9kO5GKtzcxf7j6tamtWAfzxW0juyzBkjizTc58oBpoGB1M4tZBhA2KNhLXOd3ZBElRAX8j6QxYyxGXDlOAn2cBFZBCfRBCTwKJTDNXlrBRZYykFNBJPhLy2/qVERkTQ2HDdlVOs+vCJjHINfxLDydGnig2rmZcJnAt0v+Hc+ylwEJfAvY+84ieepaADrPYnnSsV19V9grh9r62CtLwD8lH9xcmHoWn3vIWbXn3Llt246+h4Soe/AtLEQrVoTKwBvsJiuY9PrIhaqEds43FLFhQbngArSd9hFMsR0H5uwIiAyF3lDKKrj38lNcysotZbKHQvl81PJPDabmow7+wNOXvkaZqUEtOh3UoUd446DTnS3PGICP4/r14Yso9aT1E89mO935qVqdfizjdBRduXYB55tS7dDQCmIyPbgLB0muTAcVsyB3BIGBZYEIuDEmVUW4IAIhiZ+DpI/LVaiCfAtpwiUKIip38yw6TiiNVhjFyTNmAPuxIx8qlVM73T2dEyUCHpAIVVFJlEFM5U+al57jitVLdeUaqUgQ1byq2kLleaMCLdP/uG11g1cYY2Z/ZodHnjhVOpeyvfrEOlW632hT6fLsQ30HDkokf386xP5lntMq86XJ7Wn5xsqUiZJFzRllqSqr77HHK1tWsj88NGn/vA2Fr349RFrNfKNYaJt252PPvzYfpO3dU/JK4TORuhpurSgxauUoLgMIM4DjDEjgSuoAgUulmWQ6FJfhx2jsMoxICWh3kKd2qpwuGgfgdVpartMmAIDYcix6s95AY7KhZcm+hvmFcpU+ThwnlpA9w6tGXj3E20z62V3XXomN45WDpeCp6asLNNAMYa8oJGT3yIPDFLmYNxH6uI2RF4BAKYnEIKfDdagnVhJ34aqXpRipNC+MGgMT4Uq8DfcHFsHNXhoJsVNSlLwpkoY6MScQwp1YBT9fEfp8pJ/ppI/GJKaYxc6laBdQotwyEVoqhi9G+xk7jeoI82SDcoO5E71eTg8SlHIOznIheHqcq4fbMmb48sHxwOgy3khlBio/iCW5fI4qkrXHcAV2ZPUZcHkYtA2DIPJ6xKEyR6iFFFgkR/9zNecGtPFXK3u/BnXHHCvW3L79q+0exY6v2CPHWspu39d5YlsjeKImJy3dEAvc6gU1i3aYzDkZVG4O7565U0pyg4FPH5jXOdft1ifXeW36mLT8J+d5/Aq5w5cxybdzQm2pQRfMXbv2kRc3TF9G9T64bubUF9hDP9wnLdr1w71r1sye+wKYDM8aJ/WeHH7RWZVssIMZOseM8rwksyIKxMUl2Q0Tahfd2tQwWWNMdzhKLN66+JjANqvJoVMkJculMdHpidnZwfK2xTObcx1lnj9cH1cuIvKgPBaP6w9ScSWeJXC+pIgnoMjPqOhCMYaEcuYWFKJ5EKMgGvEr0WYUYqCQFwQHlBQip8hnDpIotYuozIIAoaPE8vC0CM03CUSDP1Jvbv8DoBTSqicWWmZ7OoUiXaokSWissdbpFQlinaV0sV1mty1fuqDeLOYpFEC+52YRa3bBPa/JlAfu7T63MZpXwP5vTe/K1St8aXOa02lrg33SlHxR7KJHGLvNEOtvXlWg1Gv1LsN1dpCeKCA2j0a8PBg8NQ3bw5G4V+G4uJcTjlwBRto2OxFWL2qC8IcZ/1gcDOEoOuPhmBr8jIMe0CUaUTQgQ/YsX5CklZo8+XjDSrOjwtBodbwmhTAYHU5/wW8KhsnVPgOHeYkl1sCVq3BVtsLfGhSrOfFydfwrC1YFizreknwX//WT7+/Zzl769x+/1Pzm6Bh5ZmiI6d+7f2oLcyS8Z8/5CyDttWegzMX+HBQSgnsIH1GNqr0x/WREtafwgjwcuOKqN71YhlCMikdyzcMYNBIKFxfkx30guNVPRilTHi8Rl6V5/TG5+ZLUFJvWpy+iDUkxqao0cZqPzs19GKgrnpjeLpOtvqP/0JzW2JgDdeyDV61UMl/nL3jY4/XzeXRsftFBj9dLqpZl18yO58fniMQJd9ybqJcBSh6XIpSYzIaYeOWUuzIKRNKAb31a2g/fg0SgHXw2zfS7nW/N/fc8OfnshDhf4MLtd7A/VJdEibO9H93eA+QEcUP8FHViVoxKU0SCMsZJUEROEOtcSjxnxxiMljQsFkk4OEpAx9T62+QhQvH0W6f+P+RrIzn4+zfHQRsO7T4UiUunUt2CbgIKLN4hEDZVKsZBTQgzCifG8wjFcgoeIZ/SnJqFAkpHlK+Hy3CjuQ4nK+9aOPf2L070bp+YZ1NJwfNsOfu9xDn777w1IwvvLCxdlabtBJY2q9qV9iT4BFjAh+sXn6gibojf9RCv4pGGnos1zOTameWYZ7wtjADjsKrDm9d6PPxwzaoxvvYcFLt2MpVhZnWYqZSGlsDzwjBTKA3p8dww0VKENme2hzbASZrjgB/J5WdW0yF+ot8fWlKJnNdkaUZmbmnKxLZblyNlWUgPCqwN2OHRyxgjnMrcTPi2DD+znEZR4Bq02vVGh8tTSDS1zFmHbmyjUZFDyuh29ytl0FzBgsuZAn1VYWQTg984YWGWK8aq1TBSD97z8M1c2fTYVY7AWYGuIr4T9MMiEzK6I960ivrVw91NpUbn1s+3SLR/7JoQiC+/6993i60XddaujvrGWpWp3r0r12cpdaW7FbSEVscnpUmizek2Z1FzYWGZNt1Wl5sdl2w01RRaDIlxMXHRMjoxOUl5U+lb1c1kUvdc2u7Jza/pZkwieFhiqGaP25w5eRpLhqN4vt2oj1XT5oQMVSJcPTFWTZJBbk6NksYntOYFM9LVyTHRPGjw6UwuSZwsJk0fTSuVo7EmC7RxuiJYlMhCG489eQ1xMsRHFkyUn5HRIYnUj9hNEGoVrhD1EnJaQJC4QsLII+VSgi+j4XRZzl8FTuof7N4wuPD2N9+9y+5sbv4aeABxLszu/Qd5mv0T+103GAFOssUMN6ylV/+1YsX/gna2j/co+wbLWwc3ydZPQC8QmYkb6ma80C9CEp4VxiCkUISdGPbccAZ180M9gnDNow2oeEibwTUdWLMwyjmKRUcTGf6b+d58DwZ04MIZikipvZKTDChh9E3jG32ZjgyTbNPHH8fwEtL05VXtXZllviRjyk1n1bkl1mKcOPXyQ5cnJiqlSsdDHqkqSVudC2pvXM81xNbReLweRQCR0VIVHg3G197AwoUziKNh+box7i0Eb55JhxJr4HMAxZkEUr05y5FTWFGFxycdOjYhcxai4aJxjD45wZIZKECeI1MlG/BU1Pj/W7wC2o8pPK4eAYeBLeAXfiTgDFOf2aD9byGK/BjvtO4tVQ/1RCX1xuRVzl7C593yK+GJ4e68W4M2aczBO55hL9/53yIT20ry5/1hxURjCy09HOPp72J7bgxNgB3zdJKY/iWnRtdEJX8frp1OI3IQkgyFs7MJWNIy7YwHjrrfjgo9iFBCHM7vo6ohCR0t43jUoX/IeOjBVKM5ZTS3ihofgyAA3ByfpFmgpBW42yGAmrzQpSyArl3D5tRCm/wkmPDnHUB8YqWmhN3I6tmNJRL6RVAN7gKVQ2JpMdvDprA9QXGM8L2zZPnZ9947PXL09HsfzH1+RdmS+2rC2bYF27YtkPNlIHXaQy0tD027aDS2dXW1xURFxYA4Dpxz05IJEydOWHJDDFSP2d8qiQ2jOza0/IrCEQrwyO5dNW73NnKEAi5pqAAe2cKMbWxHr4YS6ELcCzq4TTAF0J4W8C1p9mxpTiUaLJsspE1CUU1P0ZjtZzBm2IjcwG/a62UKVINFurNIfSyQS3ExJc+slquUUhS0d8N1+1vNgKOZMw6eOdiWmdkGn2YcY6RKS9IHovbLEkYioiVU+W+3A1/99tWHp0x5+LXLr6En9gUwV2R0siumvAoenTKJPUiSFKXHvvEbwib+G4Qc2g5c76V2DI/n13ovFeRPjGF872UyBjAc33sJHR/D9b2X46/8au8lhzr0y6ZLqiqda7qMd6Omy+Hjv9JqWWmroMAfRlstF00h2ba2EbL5+XEtlng9lQpdglYiiogljAg7Ph590lGEf5OdiT7DEE5GArccJ+YgkEQj0D8e5hkNaVENaGxcjD4iD6j7C5fByHW0FYGK6Gg3in4mAB0tJaFuMVhWHl3NXzp9xkoJuIddRS4QgR0xeTteB1u/OwU3HJGCv6dl2fKmKQsX/TSZ+jr82nA/+UFl4m720kgpeRE6UdBwG+2hmC78URAgNISV8BDlxFToEaFZysS93tV2Zgr881vtTN0ZpikcmobUQSaFcp42zDLCiP1MtexodILeGSibOCrNnCJAVojPC82MOKDHNFWxQEjIzF4boFKAQAKM8tFoO7RSCAFX48NdgLrDggqEOC5epCtQq80lsOGDY2DShR2XMyWuGXf07NYliD3Vafc9/foM9vTZ+B24+0DDxO9gv2ePsZ9MpPvbO7rk8sfaO1byNgBNYv1yWlqu0YoSDq9KzKCt2hNAZdWk2B5nP32iCuzoY6/uWvTHM/PfqJWYNu4qo5L7q9NA2dYZ7Jts0fsnN2vrn8CPQNw4VUE/2AQfFbt5szNMQnp5fYmY8mi6mASh4mNtOnvhJY3VqqGeAAmPRWRjuuAzOMYJhB/6B6eJAT/KdWnCcBmgjJfEjloNA1y/USVUQqO+ehbHiFAVCfBlfBUeWykJQyGh4Ccmb+j5wOOX3kSXGY+UcQ+FtMKfGN0QI5QOioR58ozBXPQ4AI/HlZfn+onCKEIoStDq3J7cvPEYnL96GUf5sqQR9lmjH0NEhQJlUGat0iyumMMnwKSKPjniDtFyeVYMFy/k4VfGvWCHAi0ldND85CFaESBHIMzIxkV1NiKR2XhOW0zVU8W6IvDA388frF7VuYf1tCiNIqvxg6b4KmGJLgD2fXD+MTqT9bG3BVqUVcJS7TaQWqRsKdtw+8shv85yQuf1aUGB1tnfD6LOLsxMkDb89IrO0wIKtc7HHgOS/0wXTVzJfsc+18gOab28D0FSY2Prxl0O4gafLhVqLT9xG94htOFQptfpZHR2xuhClZO4x2ggUYoSXIlW1DWTO0pdr3aiYlPURwqttywphmWF+0QeXPdeLS17li9NTEnm0OGZLDoksCIloNOiYiXCbHHcdFfAgS/MTAO9LLlL7cIhAdqAkDDgVooObl7XHLQtWNApennFYQkV3HLrutfm1MeLXr+pwgdKa+6c9hE72TOygexpmXffZnYLuGVbfbSZ7QUDPTfupYjfrpKovcH7rfql91sd8X7RHik12AMFZRVjDvCz0GrNCQTLyn+bC4wArMZB/mYADHsBPR45rVMa4HCgjMpv3Rnv1ClP6+JJRbxeH39aqxz5VKNcAJ465+gET/12l7kzXn9aqdUqSfh4Ol4vTEwYuYXsOBhnZpewX5MLRh7A+gBAnbsA6oN0Ihva+HqCiUZ064j12YCr41EpPBEqgBtEyJqJWRiQZjT6OC8Pdf4KKIt6PKU3onJCiW41pTb75FmYfQNTe6NwEbJRLWap6PM37gTy2cqWvPzGhtwudvD3Il7VRGDu+x1In1jFOx736cfsHvZ3H38aF61nQwfE4eKV9wBDfQvIhqPnbK6vb2b/9vDv2Lea68kldx5XiNbfpk/LbW5e3dB3SBIwevOnT8/3Gqkjy2+ZO/eW5QuYOy5tmMK2xS8iB5Jt9vJyuy05yZZVAZ9H/Zww1SgIQ9kxwlFAta+GMb4ezs7XcpFKtFdqUd6RT42Rq3g4gwhKhYVLninpWKB2exGlMHZyteYp94f/Fb5/yr7NASvb37h5X7h3SbhzU5j9OPz9Ungdvrx0L/FzDW+HNThveEXNz3tXPKclvx6J0h5ZsfOttyK95dfZirlEENrJDTdIeMkvJbx0VMKjkYRbXb68QEHRmIxDv4NIy3Ln5Afxxf9/MeepfWq+2kTbgcfEp9VCvocPHTeLkudTC9Uen/K3Cngpy8KfJwHRypdHHme/py6SHvAin7+4b/dBHfPbRXzn4k7RaWoFUIkaL19ZwX5JzTnNHKMYigKGokDx+cPVh6/DQ0aYVVYik/ARhcREopVYgefai9mydThwg6qdp42LUFdy8z4djmIl3HMKpSg2rdSlpWeiUStqmIyHkvaioRQBZWp6prOycWqEE01eU4uCrrmyZ8SEsaCo/FeBrngerUml1o9CqQrNcq8MxyopHnSFHT6ZySeTCwxaudelVQsFfBJBIBYAFY3q6dC2psaFdmqST/4KOFY0OAG60tXSmFUfV+Wv1UjiwrT1i0OCjN/NYHd3iCiK/wJ4jlrjOrif/WrS9FnAeoF/J/vJttce3trspY/EVrLD70XxBbGTaphVrgpxHvuJ69fRNpNXVBeJLFvLc++1yhL+DT48BiyNguBnT7QPX4S/BEx7gGJfZD8qFjgSXqcGFgGS3VTYWVyg/JD9hB+dlqSKEej/FkvFRksF7KN/BqqILcjNmZCIIZSYVyJjrKfQYGeSMe+RhiOS0CRjCJxI92AUl7YBhEVAyGVqWigAKrg5ET6dHKDcFUCAEKQlgZfBnkm8xF4qX3jh1BLw9rqnD38B7lx5tbKDPPj8G/tJBsz1fDBEhtvmkf8GopRuNjiyj/3uMfKz43NGPg8oEwAI8ytHHiX9jVeT7n/sS/DwRm6dgigRQfVinE0dlDU/UUM8RTD59sHYBBPcTF2oRKWYCyNAMYvGUA9CDPUQgzJYTiR5MsxsjqgydE5UlqyBj1zLQybGTkQwEqjaJS3MWKSoORbZxx4n48YuYS4OJOJQRAyCKRdI/P6QGvXb0Cp4pE+iOerl4nxo9fPEpbhOkB7M8PlTI+yU0M71+HBLSSpQwEOeW6+Uq1HRKzw03HisGj0WyhUuPsddiQGWoBWgEUejPShazMQ7k5Odzyg0yQkJyZpjtE6rVGp1xyU8o4GmTUlRJzTkuc6+vs4cO81+PzirNgEM94rFvbvF4t3naPocmCSVsofP0coPwKsKBev/QAmP3oBHntMJCadJiUYzYtBQe97Zozh8MVmsiOCgj9OZWYQb2wVNxDRi/aje9OHcYrqdyXIhJzqiRqf/Uo3OGFWjcUiNZtgdHn+gqGzipCl4/ef5oPWpTjHhwGs6De2mSVNaI8525UTcIP9svMbuKiipaLypmiWkQaBNAdJYoDXzFGqu89ciMPicHIa6yzmKpY6qTuSqVACNLwye7kYExdzlm4ZQf+z5CIj+sWHDP9gfP3K0SywZfY0izQsfSZ56fkLp04vmbWssl5R/VjU7a3vRsgeCfbwoCUUZvfWdLZWTA5K79B2BrJsr5R8BdW7jxnPsMHwEM3q7VA73bYmU39/ouGdy88ifWnTLn2skdfdM9rS0saeilIkCIUVJNyya8dYjq9oOKbl6zKeE0/kXCDvRSEwnbkHRtyjo5YWZFjsz04UqueY6mSDiXgFMB54crvNnEoatZ6ZIQ23wqD3MtEsR0AeTGA7NgxM2ZRKUb38uZqtsowclMXkIy5lplw0UFRuxqzutBS6KcsR7H6RDiQR8NsuOJhvTsry41w/rkQjko0utchYAhALCfaE8MFS/SGkjcTdaUJupQO7GaLSoABD5GV6c2I3lQWcii+eN0AUZRomLDHqDfn5D3caWrrnV1rXW6gKN84lA+R53TslDdFycx5P7v2taDve3sRf+6o6Lo/ewnY5iuSE90RdfK51RJ/L37dufszi386m3e0W9b/3pVv9ndUvr671+Mli3tK4OPvc9tHbVnrwcX6ycxP+08cm3VdZ/u/vzx6P27b0rRrS4MT5+SLmpb1/UE2zG3hkZsXwBD/CAAIgkMQme9vtvubctR6XKabv3wb7Ozvq6hQvgU98Cbr6i+KmCXtwTEoR++jvYagyGGRFmhM8d7forx0xvBhw/hY5INqqpAai4Gc4gFzXlcUl7k5NRcklNqNHSpKh/gilBFOlQ86E9OMSLpDGU9IA9240m1Clj0v2h/DRsxEhlCUlavdhXgJejKMiFCOX0oC8nD2U64R7MxPpD8eXwBY2fMdBHVAWFJQj5hSmWMSn+UDZydwjSnOYenXYamnUuHW4JQvOr03to1XXnAcDh4ajHAHCICGAOGXnendmybTKYGHwM4dY8FmSZg6XTrztFoDgdLRgKZzLP3YzQcrgv/r6+8uHqknVzA3sQbs5BsEPLHXxRsR/B4eQ3Na5qarrSsaqxcVUjLxU/XecDIVyCWmIy8TTWdNk4ktgcZqqdqJBiggvlmfKcaB9F+m7KOEPXiXsSmVLO9IFLsE4aaoRHCNFgzHWcipLLajyWoUpUHMl363Cyvo4eNASCUq7gblDgMeWhkslMhIFggRNT3gyXm8/pR4kqqCQz1YEIJXuCzpRxU8XIdyNudtRWFKGKQJWx0GvXQaMo0uyI+vD0HKqmG/mk8MTkdo0CGd0cnadeJBAka3S3+RyN09J6pyULBKJ6tucI29PzOFj8uCdzYux27fbYiZmerqJic44JVBSjYEqy+abK8JHlk0W1FdVUlM8kkbRJqitqRZOXQ1+VXDd16rpyj0kkMkE12GbOyTG3ec0Wf06kZgfhSZwlUqAGdOLeJJ0LIWPBbV7M4XSPds2KE5G882NiVZoUU2aWPTJo0K6FTifmH1H7EMIhwjak0TB4aB3gXtZFzoUWEAvWgtiilsCuU+ve+/G9dUWNxexBqpO7zPYXtxSd2gV2vMB+A2JeIDehqOLa8vK1695ds+bddSO3I0hIEMd+zb2OjmxBeEVeXIw/i/rnKFGeoA9aPxUYSZeCbjH0C2WWLNKGsBmiAKBdSi4zgRxIlAhEoQKLe6wwBp9mkbi0En2OzCQQB578sR3kX/zPqRR6yxn2MvvXJ95h936zBnxwpHVLXbGfbtuVtyI1y3BMJI1RxKc3ZmYeS6Cllvi0tBS1UkGeeJsdeOGc6Y2TJLiy9bvnbs9SJg2yLPsMG+TJAvUac1KbJj6jpmTkDTCsNCqlKp4k01jDasBwWq5ELFFGpST7JKyGs++ITBGfvwyz/5jhGptIzCB6CCbLzuSEGQIZZYow02xnNC64jnDPQCImWjGgl+IwnZ0FrqL8MJPPdd7PcCLjLehEjQUhQSJOXIfyEYFY3cQGpOncdKi0Ge1WzQpUeqx0ufMDDWjhlNKhOAMGINUhayEA4JjhnQl6oYDW4RSrYfRAYAAKXKIEtyePAdEkWqA06DgWIVS3gbwPJcrky3HFEhcBVZLHly8snMBzL65y+qac7B9ZBAxgqckU3AN9saXKpAxPLvjQnpH17s7FviWzA+f4/EUt3oL5ZC/FN5rSXt96R9idkUuSH5CSkW89MTFdDa4GeZyKJMslReYnljbmLpogirlz1qHnrr4IZlH8mbWHyUxgofiVuVNL2F3uByonzKFIe+PmiSZTEbV2XjDvUOPU5fOq8v9kU2vJtoMjS515s9I16jJ5VMz1OTwHUUQ8NKr7CjDomiw8oJeh8Jg+XpwBtR8uRRrTe4mY7JpJ4XScE5HHMk4uamZ0MrlwUxtL8aFypUSk/bKhakuB88TX2fGOhNDpGK9sQKAvRI1WgVx4TwGCX8vGsbRkV84vdVwENAF4XEoORRYvYqHFg0xrvGJNHrUPvRYALqzYbgafAN4+4vFuO76ls9zjv/v4NjJQ3pnjY7YM3X1z7ISHt2/3eEDljLu3tAWNxqDHwx5r23L3jO06Hby+fXsbpojDPI0uoYvqgL5YXISnMcrFCMNMrBOxSSA3hsteizlumlFaCY6zm5JyzxdA9cX/ZQd45oug+sKX8GANe/jyZTDp4sXI82hvDoehlw09pxKinriXGMhBEWoe7orKx/CB1jHkPBuugcrFNVBoroLYnbJgdyphbCurxvCCGC3P60DRPpJnNFnTs+wYLy8B+kiDMbFaHTqpRtuZSi1LwpZERQ5Wt4QiwWJzGYuuh80btQS50gcOGY9bRvD/LzD10NTRY6aCaQw/D8Hm7RI5Pa4JMxcurXo4Hu3zu8SuzMmrpaLXG6/h6TWvxHB6uf4mnnsURQ/D5/UHa2enpui0ertzwdeccfG7wln5XpuJzwsGwKM3QOtBW4Ev4HDz8rjT0dxLlHAztOkqsQ3eQSwFZsyTqTS5XExDODRtidPJxGC9VgRNOSczy874oYJbhuehGtoWHKABFAsh15LByUQePJI7mRlhpgk+SpFwIJCkRIR/iKAfp8Dz2U7kbXmdyOFCTu78MDOf45/nOmwXcdzGy1HPRjVX1ymkB2pqsXqsxwmAPG4SC1EYK0TPQORcfoyw9Uxzy7SZs+ZynFUhVQ5cmAaU4NKkZKPQdkg3H/5AE3LbQp1L4DsWoXZJIhTTAGc+hk/Q8vhEQ1p6RU0zLhAtokPSJHjXLNmAN2+uP0LTjcUBV3oio5+Gsx5BTFThnt2xc7jcSegKeMYJB+rnjSXhPaox4EXj2BFvvGkZkRdkBgqEzcHwjODu3rd27q6Y+mbf7p1QSjKb72l+8yA+3B+evK0lcxSGkeweB8cI5YcMQ/lpacn1I7l4uOLLxCRjRTzbVvEwdw4ejT/45ejJl8gGXQBSyvuQqPWVsx8vCMxdV/JlxdlVjU35fmR3oieBKdCILdJbVjcgU/Q6XZxCWIgWrIvNOJKRiM0bKce9M+ZoJ49xbxs5NYtYeJJRBSPfz2hxB69Rxgjg1CSa/yvuSoRjjxtGNGI3TUJQ3f3d3f3gga5DXV0tjTe16f5+qLv7UPfaP6yFX6OY7r3QXosiSoAURxC1LiYqzOQ4kTK0ulD4PMs5iiwTE2ZiuD5lCw7WIC2V4USFDTYniq1jhKdPoPLD2bREnGDOE/3E+Iee/9p54jh32YnTaSYxSkcPGk0GOdyipIMup1ue8fxL8RemYJynPOlgbp5fnjEAH8dV0MPbx53B98An4lk46SaX+1piDfziCk60OWLQ/iYsQPuZF9kk2qwc7DlHcQ2NjJR+lhDpLRk2hzeyuUG3yTkKhoHMvBRBKkjhubS01GSJdIuSqG9DwceA21oeNvViyeZ7hxa+v6l8W/fmPw9tv7c4ShorjhMq+NX62bvf2Qr+w4b3bDn0ZNyXSezmv34MZAcPfMeenFPtXP/yvsWvPTiVPH7HezvrF4RXvPPI869OiYnX0BZ5TuyljvsXe0EliK7S6W/p6YUi1n/4qwqTaXE3yLh4YKCh5aF/RXBbuVijGseHXXDnqSKGiAEH2neoMOO2IwMgCeG3cD1Jg1ppQAQNAyjC1ZwIO5Gm0mNlZR6zJFCrSFkYgbZG2pZqoEijsp8BrcGKtJMZlawkoZpLJkU2oFDa0EUffYSyO9yoq4kpkw0IpQE84G4HJqAS2nxl2KGlB5TRxdjMsCJtloB5qkJGlA6PT/FfS337vMYxJEG0N5EcfzLUP2REz+jlbp+KUONeUmjzZQEeKiFKIaHdLMzi/R6kPvlXUFR2HPgHb3uF/d+9vexPJ3skAx/eMbm1u5vRFLeXl7dnhm3AdWbZN4cvgyf6L1J7P9JqgeG5W4e2N33xDNnefx7s+D378ZP/HIh5G9T89SEge/W2ziMjO8rZl3gHnlrXzaxl2VmlZfbssuHOb5afYd+0vfk1Wc2/0K/9ECw4cqlx24nO4+x50+3n+9uvz4nGERqoWxzQz0WFlhZcNYNQG5zw5AwCdELlQ3BeOPMO70wo2qDEVLYhJSrAUsejwbVAM45J9DNpNL7AOGSMcjxEwygdDq3DRc9KrJ4tkeLGDGi84fJnePS3nRS7829/23mV3Pk3shsc7dy+7eWnH2cWzK31WCq7yqckWss7PI294XAvdQXft4P36pq5j9qptFc2Pn7EVVlgoA8pDL5c6w31d9XEUaxBK6Eb7kR5HqhyAkjNQCFkAlJksCZi3SPDQJPX7NpC+ME56zV7rFDIw6kgKJC1CCmnEDnwiWW4OiibPiqQaVIs/nIufPmM1mS0unwRFAU9HKqSSjhU5VAZ0wMef5mfK26TRKuJFA3UAtmuXBQICCU64V15NzF2+XgzQ0BuTo/bDjilIIw0wCKdoLcD7JPgggsflsybW739y29bZrI69/U0Ntx96oSkizetsbiu7/srRaakYGHV7OkldbmmoiXLfndTM/jdTYdmrO7aU+xRSg1rDu+RlAV8cVLzXf2nuiaVzJndMD93nmf/KCbGPmGrQMAhoSBkYLkM9xdA74tMBD6EShdLCoMghRQISdzKYQe4GQTxtFLCausyX9K6Hp3RnTZthW/a62ef2ZZg7y/o79/dSTunFdtiFclPNymltDU2Q0wnaBzJs3Jnsh9VUuXzNDXpZnYG21xU7k6z8Y3BwW+BEHjvA/yZJkHB4j/OTaHjc2rnONnDKtVSf795zt7nGrMd0bIPm0br65aBCxiXGvmsLcRAUsSi1o5xtoyhUGvGUKh1ERRqjr/lBpRpIqRNQowuCFPa+N/RpK+3fK9Hib5m1d4MCnqcvRr5LAJop24jdIQJ6mqChiITaUVQc4BhUKK4zcdnwfQmJrFA91BBWktXQp8uzaqjOjSa/Xb35DXxDyVPT766TwdkvFJSOnyC3Q0WkX3w8S9puj7N2sk56X06dHerZn98V4vL3pecfHWvrpxXOPJ/wydIKXs/uZ/rH6fw/uGC+wfquColahC3Yg4Xra61M+IzjIpLxqjEUPWbcwojKKBSLrSsAVxZtJbDAfC4I04FVjoolQ41j1onU2eRJnekL1yJMJr1ZosZeOW6WPLw1NtXMd0PPr/lLrB60+bn7yu4bcWq26cetqWw/XPZFezyuezBFNtuwJO0r9o1C6wypZ34aijNZEob+upEmomXNEcCyOhZu/hr2BPPzuyoWbW1fYtsdlFVjs+XU1U0W7aldPGc2pqOmc+CAk3aCy+kzWOfO9W0869/TNZb/H6LPjmJex555z1QtvqvOzm99SJ1RPAloYD6mUgCAlItTyFRDAiYjUKeWSggzHCRIDwlzcurb7V+oGE+v3PoOT/7vZ899fhr5kAOKDE7l3eYnX6/oJ3d1MRevmf44sL7LIYykN/PExzos4GtxabE4aPLO83e5QsVNKcrqW6oK9XQc6zBVWNZcPwd4yxMG87lDsrENrh3x4VRqDMUH2mDs9FwO4C6TCYbkBtwwiCOZqgIiwaiIsD5fTOJMNUEJPxSw7kQFHAVtnGARErL3AdEe1f8z74ZW2+9dTDJzEsavPXWrf2mKLkqVhuXGd0YFSuNEfKULasc5cC+l72yb9re95b3geCdm8HB8zR9np21+U72xcPz5qdkZSVmqwqkq2Ji6Ohy9rWhbeWj63i+iBB4iHgo+5lEIoFqsREuWgQgNxQHTQFGhrSuzuNS6nhIgFB0B0oQ6jHX6YVJAPFbIyJPpcHD86ESxFTAe+IY71GF+GX22DRtgtXD5vpNGrtfzh57WaxTHhMQhyViyXDvsVP+pDyQk5fkB2+Hw2TLuT/lOJPjvdMXas6NlLCHDx/uO/bmm7x9SzyeJRFuuQjfahKuXKKJgXjMbDdGf+gYXy2j1Hl08Nsw2nrsog0At/PyMY15K/vcyFPssbamtWH+3qupvb28fb29mO0z3NIVhv9WN191IUJbfhSYzvaD6aN1Hfx9gjD83QkEMZ6Pm6fjwV9kUut8BotO2JxLdee2TPZ3D3d3+1sA2Uqen/lxFXusuj+/qSlfoPS3IPiKFn8v+kUEETXGx3CNt4/rpbZD23GMwc9tRxvtf2Hww/9dHgOCCwfw2Be5JofXuDZmjg8uTIWHCfTZUNPym28iYA7gQscdYB+Lv+GfdSPRX7hjXgf8AvtG9s6Dz+HhcMeortonQiYvYobOJvKIB3E8xxweMPNQcMzsF2egPiE73hxkYY5vJ5or+M/HqwkDomB6Bi6Hgzx2R3g0AiPiqHisGuSCK3AN/KDWZE7lIv2h2DhkXiHmBsaLIp1EyJ4B7Y9kvUGD7nDRIYfXf73pBT3kMXJMeIxAsa5lSmVcdMmgHxfvH2WF/d4fH1QERyrhQ7z/e0Ssd/cFEH/h7rsvsJ9fKBsExGBoYw/PUK1JS9Ok2HB/OG9fS1fgBb//hcD/t4rQv7fgijs6GH/8Z9gM1LJFwU1TVk5bC3rXBeTOQDnw2m07hg3soPoUlCshdxUJQ1ad2Vzb4AxZa+ZsAwwVER5Qk1OTF3QDgYCBkZm9K6znxAy6uILJHNJ1smbUYwZ6mg90bro4K+jSHTtGYNnPCDrmW5WdD7yzGXQ4LmilIziQ2HRjGzenszCEFYVYKHZE9/VHdShahBSF/WFouNrmxVjAqK7CqK8nwCzILSMj4ccopy4uYPrvqiEXl4CEkmzMv9esPo66fnqurnp+eg5Mp2M2zC13FdS1Nv51cO9fY2tdwewNt2Q1ufnai1XYhbgZefkt/r2QkZKR6CmXFhFl5uJzYOQpjiwp3VBYCBkzZPx3iy2S7TiwBjBhYJAHn+9vZi5sLgxaVAtqKKmwgzdnMrKBTzuRY4TufgWWV0ygFpOAIquG5GxXqav9nxo72/e4ykjs+Pelr+RIq42QtNHfDxrMTdxqdmfWqNjyiEgY8EhL8LPwinJ2WrIrnpBVYJflMmcMkWTsFZGQOMuoMn/a03RpkbxZJ7L6Mv68MmFlVjKLVq+7ES0sIizIz8nMyc+WoiMGnYfJAJYXpsC8ocygwwDKACLg9eEbxK9tkDm7QQaS1gXOggqwjcoyoLgUtoSsAZMH3yprz4hY/KcAOk0CVMpAL4ZPqg4qZwoqCqpODtTaefFfwaWzGnZMDPl78k2TVFUVFVVVk5jldfz7H3/58rjfV696R2ZFReYOSLnP9V+frZUtCdjesQXNqgiBryDkAzYzxVlUzVRAi5SBnWh20Fnw4JudGIVAG96BCHRfIXg/I4uaujko4IFNI3YWLg5DA2kHGTEx94mZjCKMPrMZBTeGionHxCXKGfuHuIcGpucBE4FOBhubaVhGv6QhsK90vJ2ReaNDmJi1y7+bywv//d7rYVt8tLxelkXK5N8dFsmbH5fmlxjGx/tYcEmXW67bstHeNVjAzzF3zqSEEAMlHkZmDU0VG0t916m/re08/I55GVmw8Ek4+0VcsdXSZubZmu6luSGIhZ8vH3oWLdNDYNnKCSyxORmhK+oYCxkLrHT+Xg86y1j4rx96fw0wjf2PZPvL1ggsdW0ZGITZxOwZgd4VM1cFj8mCdgADvQ1iC4F2Y8Nuq1YHb0RjB9eIDLBmqbqkhI3VTUauIFFzB0Y79QpWDiEeVlZOJkYvv7Nx6bkinPKz/i1rz/9owK/GNinLQIVPg1VaUldSjsUjsiUqyslBj/Gyo5Vk0L+PD63tJbqF/MUUjJSC3T0FOK1sbjd0MyYt1BAvTgn66CBsxs4jxSXNImweY+XN+LclLq4lTo+BAQBViFnvAAAAeNpjYGRgYADiovRLZvH8Nl8Z5DkYQODKnRRvMH1/hc3/j//WcFizvQFyORiYQKIAX2sNeXjaY2BkYGC7/G8JAwMH2/+P/7dzWDMARZABox4ApBAGpAAAAHjaTVQxaBVBEJ29v7d7nmIhgiGFCCFVyiOIxW8NFiI2qU7R5oOtZbCT1L9KkdoiYPGRIBJS/jpY2BzaSEoJKUIKBUk2M2/mbu/DMLszO2/evtn7Femv+EzkPxFN3hGFH9kXT4ncV7Y1NfrF/hX7t+olVy7TP6mtOOx31McFr0nXYcrrAz53llK5z/sXnH9MLjbpOhzxfsbWe7FT27OPtfKKLXlZx13mttA9sE+sX8fWkJP6itJ1/JguPOekH2ybnJybLJWbrKsCfJzUItekqzDPeMVDNamPPyn4GXpQPFSPmm+02t8TfOTMJvv7tj9n/NfgfYcxa+Wn5+ReJePHe+zfp8S8kx/hTI70vtCB7wvt5lRw3Gm/lKDTNmpuCafwh1bLy3wH0afcUjzEGsXr+ZZdXrul5vsY7rpQnWUtuoffFAQPMebm5+Cms6dhNrh/WLEe+4bVisZ87sRmesj8rd5PNSdraFuIHtanVVzgSC+fUrwiJzjSp9zTd4V8l/Ub+m5RLXXFMZtoumFv/Vg5A6NTE0y8szrrIu8FM+XaKtBtzLhTfpif5HXG2q+xWJ210fdmcfs24herYY0Rf0PPyu/2/k/t7JTW4Td0Hx5ljOG9SfwJU5uZfpZnjLvotWOxUQ7aLPAdKt+/mO2Qj89Z35ejunakRZvvjdh/ejDkGsvtjvKjvqKjO8ta+Q+j/4xGefVv1f47nMXqQnXB3IluAP7dou4AeNpjYIACEzzwGSMTYwVTA9Mr5gjmBOZZzKdYeFhsWBawsrFmsR5h42CzY5vFdoLtFbsYexb7EfYHHDEcHziVONs473H5cQtxG3Hv4uHgseC5xivH28b7hE+Pr4ZvCb8Gfwr/Lv4vAiYCuwTOCfwSdBDMEpwnuEnwiuA3oTfCccKThB+JcImYiOaIThBdIvpATEisQlxHvEdil8QdSRnJFMkjUmZSXVLfpKWkV8iwyYTJzJB5IOsnu0D2kJyG3Dz5DPlvCgUKExTuKSooblG8ptSntE7pgtIr5STla8rvVJhUjFQyVOaoXFDNUX2h+ketQ+2e2j91HXUH9TUafBqrNB5psmnKaJZodmiu0JLTCtKapXVL64s2k3ae9gMdB506nRU6T3RDdJN0K3S36P7QO6W/Sv+a/hODEIM+g2uGeoYBhgcMzxn+Mwoy6jO6YsxjrGA8z/ieCZ9Jiskkky2mDKYJpj/MMswmmG0xu2T2w1zKXM/cyTzMPMt8ifkVCzYLLYsVljOsJKyCrDZZ3bPmsG6zcbE5ZStjW2e7xvaFXYu9kn2VA4tDl+MZpyCnR85szmUuUi5PXE1c37kFub1xV3Pf5THHM8pLyivJW8ZHxuear5Fvku8vvxP+agECAQsCvQKPBVkE1QTPCH4XkhKqFDovLCzsVLha+I2IDZEukQ+ikqK2RAfF6MR0xPrFKcX9ij+WsCiRI7EiyS3pU7JG8pNUntSqtKR0q/R1GWUZlzItMpuyuLJcsrZl82T7ZVdl38ipy+XJTcvdlKeRZ5e3BAQBAjvJsQAAAAEAAAEvAIcADgAAAAAAAgABAAIAFgAAAQABJgAAAAB42n2Qy04CQRBFTztoojEsXRAWE/ZOUFRAXQobEY2orEXlEQcGcTQx8QtcuTB+k48v8G+807ZkZGE6PTlVdevWVAPLvOJhMotAQfeHjfIFx3NkCRx7rLPrOEOekeN5nnlyvEDe5By/sWK2HL9TNA3HH2TNo+NPlozr/fLImRcuiBjzwIQBPfrE+AzFtzoDzexxpW8sxVjKY0U97gg5V8ea/rVozw6n7NOmKUrrV2c60jV/pnamaGKnRlL5f9yPaCmTcDrblzK2G4y4n3YElG11KNdreSaarrKhnDt604BNeyuUFFXVt0dN02s0ONSkA1GTk3/3aCvqyDWymt/JdfuKvhwSja9TsrUK26pW9d0Q+5qa7FHmUi5daRPXWF4Tt3t96tviRtWBKsnbhd+FY1J3eNptVgWY5LYV3l9jGM/M3l4uzIxtk7u9XKCcpr2UmVmWNbZubMsnyzs7V2amlJkZUmZmZmbmNmVu2iePvUm/r/PtWrIe6MH/3vMKW2l/V1y2Ml35Pz+c4x4rbGUbGAbw4CNAiCEijDDGBKvYhrWVy1cuxXYchB04GIfgUByGw3EEjsRROBrH4Fgch+NxAk7ESTgZp+BUnIbTcQbOxFm4Gq6Oa+BsnIOd2IV17Ma52IPzcD4uwIW4Jq6Fa+M6uC6uh+vjItwAF+OGuBH24hLcGDfBTXEz3By3wC1xK9wat8FtcTvcHnfAHXEn3Bl3wV1xN9wd98A9cS/cGxwxBBJITJEig8I+zJCjQAmNCvthUMOiwQbm2MQCB3Af3Bf3w/3xADwQD8KD8RA8FA/Dw/EIPBKPwqPxGDwWj8Pj8QQ8EU/CpXgynoKn4ml4Op6BZ+JZeDaeg+fieXg+XoAX4kV4MV6Cl+JleDlegVfiVXg1XoPX4nW4DK/HG/BGvAlvxlvwVrwNb8c78E68C+/Ge/BevA/vxwfwQXwIH8ZH8FF8DB/HJ/BJfAqfxmfwWXwOn8cX8EV8CV/GV/BVfA1fxzfwTXwL38Z38F18D9/HD/BD/Ag/xk/wU/wMP8cv8Ev8Cr/Gb/BbXI7f4ff4A/6IP+HP+Av+ir/h7/gH/ol/4d+4Av9hKwyMsQHzmM8CFrIhi9iIjdmErbJtbI1tZwexHexgdgg7lB3GDmdHsCPZUexodgw7lh3HjmcnsBPZSexkdgo7lZ3GTmdnsDPZWWFTqvWdO3d2665uXe/W3d16brfu6dbzuvX8br2gWy/s1ouW6/re5bpnrycbo6NMNybNeV0PZ3IRa24SP861mLVce/Ze7ItcN0lQyVKo3Cu1lSP3iCUvZOIXTa1EUEtuRDaakposV2lmvYKrfFXwUshcKCNymXRv9f6GG5mMq7ypO0q7784nhSq3XvyM9NrlUcc7ao9kUdmFV1tuvEzm1dg9OobInS7pTS2Np8qpHrtHR/fdae3F3HlIW54k/oZKpPYyXUgvV+UsrJSwjZEBt5aLLMj5Qjd26IKiKQxeIcvGF5kUs4FcyGDp18Dy1BMZt8FU5wldnPOiGuZyam2myqgyOjWyrnf5bZC8QusrD9cj44LmGFfbnbuGvFYTJ9+/RG1kEz0vQxdttSGjWOtZwc2s9khrGpG9srRKl4NYb4Yte1ONmqrXEDTV/xizO5i2TEObNUVcN5XPc2nswNR1wJN9TW3H7jonHqt0VPFKmirnJYVJ8mlYETfdOFpKO85BwSu/zigBw15wUCjhFY2VA9FUZECueeJCyZ2d/oZweKsyXcpx7ytdxcQ8oDSmkqKupjJu9IIyU9uIG6PntRDzyVaciD2kJDp/2kvdBQOh0xGdqANy2uS5b7XO6/HyoC54nkfLoJBslMsNmbdRdTeQpqBWacnzsCU0ledoPrE31XhpflsQvpFVvogSZaRwrkSt2zzOZVg1ManKPOdQWGfNdJrLYd0oK3gtB4m2Xq515bceBHNV0gVBzOuZtKHQReVKsVVOdoZTbeYUolHrOFFjPYh5yiiU9ZwUZiMHZEVJJ+yS5nX32B0WulRWG4+StQid/WRmm8q+CKwhEPr7GypkT+jEWSX8XKeqbNPQsYVuT6JUaboKCh2rXPqxaeosKHhakr30P9dm5lecamnYekT8y+R0SgJSS+VDhok6kJuVpoqmPcEoqQUhilKxVZoVCQcUUG0SJhKfqrOWvioJzZRCWSZtgmOqr3Aquc2kIeeElZt21K2q3PArQ/EIDVkmlxGlerWeK5Whe7i8+7VuysR1NjEb9riLtiAVbOi8KWSwBMmkh7IrodYCV0REdIYshdyu1dPaZrXrQXY85bXt8jdxe5cq97JVfzsnLZSofkrqGH6a61iGqiTpPB9SLzG2UjJqN9SX5PIo5mZ55ODmWYrgZJrrecUNScl8skFQ6JudZxKlh4T4mixOCTIykWWYxITVSm6rK23VdNEnu3sNLQHLSrOaUm9s2jKlNPkpb1I5pKylDU/l2CnuBLd1At3rcMqFdIEeE8imUyUEFbc/58TBhFjrqR0327+/BUgSR63jdGmxxdONAU+IeDHghEMhSuGnblyEidGUgM0hFalx82iSXmWiBI5RNiNB0q7sTEKdTlfVoiXsq6KKICIpBdStc+qaxq9ni0pu3zru4ydEzaNCprxtUe7+JLDU7XIzaSX6+4ws6W91SbpSuCLEcsupuGlMiAPSaD8x1LiHbsyQadQ1VMnnUsU6qPiCGupaT+mzQha4xhLEjaAGMXagL2hQkZlEokGnNoekMo6p8QQ0t3jNRy24W2St9aTezlQR2OKxAwyxCp7I1eVRP4rr1gVJyKc5pzZVGMvMzbcdVyH0ymh4iJkZOWWxIaZs6LbWSLm6JG11AFcIxWqqddqbUkcbM11aPrNydUnum0CL31aTw3xglfM7sJTubOEXmvpMm3saPVFslJy6pjoUNIrKxFVGrqr2IyYq5bxuJxYN6II6SRi78WgWA/rM8Vzhe7GkMutHaGC0u2hIYpfkiyqb9Juz6Qvsv6ZkCG0AALgB/4WwAY0AS7AIUFixAQGOWbFGBitYIbAQWUuwFFJYIbCAWR2wBitcWFmwFCsAAAABWLn3vAAA"},function(e,t){e.exports="data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 10 10' width='10' height='10'%3E%3Cpolyline points='1.5 3.5 5 7 8.5 3.5' stroke='currentColor' stroke-width='2' fill='transparent' stroke-linecap='round' stroke-linejoin='round' opacity='.5' vector-effect='non-scaling-stroke'/%3E%3C/svg%3E"},function(e,t){e.exports=function(e){var t="undefined"!=typeof window&&window.location;if(!t)throw new Error("fixUrls requires window.location");if(!e||"string"!=typeof e)return e;var n=t.protocol+"//"+t.host,r=n+t.pathname.replace(/\/[^\/]*$/,"/");return e.replace(/url\s*\(((?:[^)(]|\((?:[^)(]+|\([^)(]*\))*\))*)\)/gi,(function(e,t){var i,o=t.trim().replace(/^"(.*)"$/,(function(e,t){return t})).replace(/^'(.*)'$/,(function(e,t){return t}));return/^(#|data:|http:\/\/|https:\/\/|file:\/\/\/|\s*$)/i.test(o)?e:(i=0===o.indexOf("//")?o:0===o.indexOf("/")?n+o:r+o.replace(/^\.\//,""),"url("+JSON.stringify(i)+")")}))}},function(e,t){!function(e){"use strict";var t=["sanitize","whiteList","sanitizeFn"],n=["background","cite","href","itemtype","longdesc","poster","src","xlink:href"],r={"*":["class","dir","id","lang","role",/^aria-[\w-]*$/i],a:["target","href","title","rel"],area:[],b:[],br:[],col:[],code:[],div:[],em:[],hr:[],h1:[],h2:[],h3:[],h4:[],h5:[],h6:[],i:[],img:["src","alt","title","width","height"],li:[],ol:[],p:[],pre:[],s:[],small:[],span:[],sub:[],sup:[],strong:[],u:[],ul:[]},i=/^(?:(?:https?|mailto|ftp|tel|file):|[^&:/?#]*(?:[/?#]|$))/gi,o=/^data:(?:image\/(?:bmp|gif|jpeg|jpg|png|tiff|webp)|video\/(?:mpeg|mp4|ogg|webm)|audio\/(?:mp3|oga|ogg|opus));base64,[a-z0-9+/]+=*$/i;function a(t,r){var a=t.nodeName.toLowerCase();if(-1!==e.inArray(a,r))return-1===e.inArray(a,n)||Boolean(t.nodeValue.match(i)||t.nodeValue.match(o));for(var s=e(r).filter((function(e,t){return t instanceof RegExp})),l=0,c=s.length;l<c;l++)if(a.match(s[l]))return!0;return!1}function s(t,n,r){if(0===t.length)return t;if(r&&"function"==typeof r)return r(t);if(!document.implementation||!document.implementation.createHTMLDocument)return t;var i=document.implementation.createHTMLDocument("sanitization");i.body.innerHTML=t;for(var o=e.map(n,(function(e,t){return t})),s=e(i.body).find("*"),l=0,c=s.length;l<c;l++){var u=s[l],d=u.nodeName.toLowerCase();if(-1!==e.inArray(d,o))for(var f=e.map(u.attributes,(function(e){return e})),p=[].concat(n["*"]||[],n[d]||[]),h=0,g=f.length;h<g;h++)a(f[h],p)||u.removeAttribute(f[h].nodeName);else u.parentNode.removeChild(u)}return i.body.innerHTML}var l=function(e,t){this.type=null,this.options=null,this.enabled=null,this.timeout=null,this.hoverState=null,this.$element=null,this.inState=null,this.init("tooltip",e,t)};l.VERSION="3.4.1",l.TRANSITION_DURATION=150,l.DEFAULTS={animation:!0,placement:"top",selector:!1,template:'<div class="tooltip" role="tooltip"><div class="tooltip-arrow"></div><div class="tooltip-inner"></div></div>',trigger:"hover focus",title:"",delay:0,html:!1,container:!1,viewport:{selector:"body",padding:0},sanitize:!0,sanitizeFn:null,whiteList:r},l.prototype.init=function(t,n,r){if(this.enabled=!0,this.type=t,this.$element=e(n),this.options=this.getOptions(r),this.$viewport=this.options.viewport&&e(document).find(e.isFunction(this.options.viewport)?this.options.viewport.call(this,this.$element):this.options.viewport.selector||this.options.viewport),this.inState={click:!1,hover:!1,focus:!1},this.$element[0]instanceof document.constructor&&!this.options.selector)throw new Error("`selector` option must be specified when initializing "+this.type+" on the window.document object!");for(var i=this.options.trigger.split(" "),o=i.length;o--;){var a=i[o];if("click"==a)this.$element.on("click."+this.type,this.options.selector,e.proxy(this.toggle,this));else if("manual"!=a){var s="hover"==a?"mouseenter":"focusin",l="hover"==a?"mouseleave":"focusout";this.$element.on(s+"."+this.type,this.options.selector,e.proxy(this.enter,this)),this.$element.on(l+"."+this.type,this.options.selector,e.proxy(this.leave,this))}}this.options.selector?this._options=e.extend({},this.options,{trigger:"manual",selector:""}):this.fixTitle()},l.prototype.getDefaults=function(){return l.DEFAULTS},l.prototype.getOptions=function(n){var r=this.$element.data();for(var i in r)r.hasOwnProperty(i)&&-1!==e.inArray(i,t)&&delete r[i];return(n=e.extend({},this.getDefaults(),r,n)).delay&&"number"==typeof n.delay&&(n.delay={show:n.delay,hide:n.delay}),n.sanitize&&(n.template=s(n.template,n.whiteList,n.sanitizeFn)),n},l.prototype.getDelegateOptions=function(){var t={},n=this.getDefaults();return this._options&&e.each(this._options,(function(e,r){n[e]!=r&&(t[e]=r)})),t},l.prototype.enter=function(t){var n=t instanceof this.constructor?t:e(t.currentTarget).data("bs."+this.type);if(n||(n=new this.constructor(t.currentTarget,this.getDelegateOptions()),e(t.currentTarget).data("bs."+this.type,n)),t instanceof e.Event&&(n.inState["focusin"==t.type?"focus":"hover"]=!0),n.tip().hasClass("in")||"in"==n.hoverState)n.hoverState="in";else{if(clearTimeout(n.timeout),n.hoverState="in",!n.options.delay||!n.options.delay.show)return n.show();n.timeout=setTimeout((function(){"in"==n.hoverState&&n.show()}),n.options.delay.show)}},l.prototype.isInStateTrue=function(){for(var e in this.inState)if(this.inState[e])return!0;return!1},l.prototype.leave=function(t){var n=t instanceof this.constructor?t:e(t.currentTarget).data("bs."+this.type);if(n||(n=new this.constructor(t.currentTarget,this.getDelegateOptions()),e(t.currentTarget).data("bs."+this.type,n)),t instanceof e.Event&&(n.inState["focusout"==t.type?"focus":"hover"]=!1),!n.isInStateTrue()){if(clearTimeout(n.timeout),n.hoverState="out",!n.options.delay||!n.options.delay.hide)return n.hide();n.timeout=setTimeout((function(){"out"==n.hoverState&&n.hide()}),n.options.delay.hide)}},l.prototype.show=function(){var t=e.Event("show.bs."+this.type);if(this.hasContent()&&this.enabled){this.$element.trigger(t);var n=e.contains(this.$element[0].ownerDocument.documentElement,this.$element[0]);if(t.isDefaultPrevented()||!n)return;var r=this,i=this.tip(),o=this.getUID(this.type);this.setContent(),i.attr("id",o),this.$element.attr("aria-describedby",o),this.options.animation&&i.addClass("fade");var a="function"==typeof this.options.placement?this.options.placement.call(this,i[0],this.$element[0]):this.options.placement,s=/\s?auto?\s?/i,c=s.test(a);c&&(a=a.replace(s,"")||"top"),i.detach().css({top:0,left:0,display:"block"}).addClass(a).data("bs."+this.type,this),this.options.container?i.appendTo(e(document).find(this.options.container)):i.insertAfter(this.$element),this.$element.trigger("inserted.bs."+this.type);var u=this.getPosition(),d=i[0].offsetWidth,f=i[0].offsetHeight;if(c){var p=a,h=this.getPosition(this.$viewport);a="bottom"==a&&u.bottom+f>h.bottom?"top":"top"==a&&u.top-f<h.top?"bottom":"right"==a&&u.right+d>h.width?"left":"left"==a&&u.left-d<h.left?"right":a,i.removeClass(p).addClass(a)}var g=this.getCalculatedOffset(a,u,d,f);this.applyPlacement(g,a);var v=function(){var e=r.hoverState;r.$element.trigger("shown.bs."+r.type),r.hoverState=null,"out"==e&&r.leave(r)};e.support.transition&&this.$tip.hasClass("fade")?i.one("bsTransitionEnd",v).emulateTransitionEnd(l.TRANSITION_DURATION):v()}},l.prototype.applyPlacement=function(t,n){var r=this.tip(),i=r[0].offsetWidth,o=r[0].offsetHeight,a=parseInt(r.css("margin-top"),10),s=parseInt(r.css("margin-left"),10);isNaN(a)&&(a=0),isNaN(s)&&(s=0),t.top+=a,t.left+=s,e.offset.setOffset(r[0],e.extend({using:function(e){r.css({top:Math.round(e.top),left:Math.round(e.left)})}},t),0),r.addClass("in");var l=r[0].offsetWidth,c=r[0].offsetHeight;"top"==n&&c!=o&&(t.top=t.top+o-c);var u=this.getViewportAdjustedDelta(n,t,l,c);u.left?t.left+=u.left:t.top+=u.top;var d=/top|bottom/.test(n),f=d?2*u.left-i+l:2*u.top-o+c,p=d?"offsetWidth":"offsetHeight";r.offset(t),this.replaceArrow(f,r[0][p],d)},l.prototype.replaceArrow=function(e,t,n){this.arrow().css(n?"left":"top",50*(1-e/t)+"%").css(n?"top":"left","")},l.prototype.setContent=function(){var e=this.tip(),t=this.getTitle();this.options.html?(this.options.sanitize&&(t=s(t,this.options.whiteList,this.options.sanitizeFn)),e.find(".tooltip-inner").html(t)):e.find(".tooltip-inner").text(t),e.removeClass("fade in top bottom left right")},l.prototype.hide=function(t){var n=this,r=e(this.$tip),i=e.Event("hide.bs."+this.type);function o(){"in"!=n.hoverState&&r.detach(),n.$element&&n.$element.removeAttr("aria-describedby").trigger("hidden.bs."+n.type),t&&t()}if(this.$element.trigger(i),!i.isDefaultPrevented())return r.removeClass("in"),e.support.transition&&r.hasClass("fade")?r.one("bsTransitionEnd",o).emulateTransitionEnd(l.TRANSITION_DURATION):o(),this.hoverState=null,this},l.prototype.fixTitle=function(){var e=this.$element;(e.attr("title")||"string"!=typeof e.attr("data-original-title"))&&e.attr("data-original-title",e.attr("title")||"").attr("title","")},l.prototype.hasContent=function(){return this.getTitle()},l.prototype.getPosition=function(t){var n=(t=t||this.$element)[0],r="BODY"==n.tagName,i=n.getBoundingClientRect();null==i.width&&(i=e.extend({},i,{width:i.right-i.left,height:i.bottom-i.top}));var o=window.SVGElement&&n instanceof window.SVGElement,a=r?{top:0,left:0}:o?null:t.offset(),s={scroll:r?document.documentElement.scrollTop||document.body.scrollTop:t.scrollTop()},l=r?{width:e(window).width(),height:e(window).height()}:null;return e.extend({},i,s,l,a)},l.prototype.getCalculatedOffset=function(e,t,n,r){return"bottom"==e?{top:t.top+t.height,left:t.left+t.width/2-n/2}:"top"==e?{top:t.top-r,left:t.left+t.width/2-n/2}:"left"==e?{top:t.top+t.height/2-r/2,left:t.left-n}:{top:t.top+t.height/2-r/2,left:t.left+t.width}},l.prototype.getViewportAdjustedDelta=function(e,t,n,r){var i={top:0,left:0};if(!this.$viewport)return i;var o=this.options.viewport&&this.options.viewport.padding||0,a=this.getPosition(this.$viewport);if(/right|left/.test(e)){var s=t.top-o-a.scroll,l=t.top+o-a.scroll+r;s<a.top?i.top=a.top-s:l>a.top+a.height&&(i.top=a.top+a.height-l)}else{var c=t.left-o,u=t.left+o+n;c<a.left?i.left=a.left-c:u>a.right&&(i.left=a.left+a.width-u)}return i},l.prototype.getTitle=function(){var e=this.$element,t=this.options;return e.attr("data-original-title")||("function"==typeof t.title?t.title.call(e[0]):t.title)},l.prototype.getUID=function(e){do{e+=~~(1e6*Math.random())}while(document.getElementById(e));return e},l.prototype.tip=function(){if(!this.$tip&&(this.$tip=e(this.options.template),1!=this.$tip.length))throw new Error(this.type+" `template` option must consist of exactly 1 top-level element!");return this.$tip},l.prototype.arrow=function(){return this.$arrow=this.$arrow||this.tip().find(".tooltip-arrow")},l.prototype.enable=function(){this.enabled=!0},l.prototype.disable=function(){this.enabled=!1},l.prototype.toggleEnabled=function(){this.enabled=!this.enabled},l.prototype.toggle=function(t){var n=this;t&&((n=e(t.currentTarget).data("bs."+this.type))||(n=new this.constructor(t.currentTarget,this.getDelegateOptions()),e(t.currentTarget).data("bs."+this.type,n))),t?(n.inState.click=!n.inState.click,n.isInStateTrue()?n.enter(n):n.leave(n)):n.tip().hasClass("in")?n.leave(n):n.enter(n)},l.prototype.destroy=function(){var e=this;clearTimeout(this.timeout),this.hide((function(){e.$element.off("."+e.type).removeData("bs."+e.type),e.$tip&&e.$tip.detach(),e.$tip=null,e.$arrow=null,e.$viewport=null,e.$element=null}))},l.prototype.sanitizeHtml=function(e){return s(e,this.options.whiteList,this.options.sanitizeFn)};var c=e.fn.tooltip;e.fn.tooltip=function(t){return this.each((function(){var n=e(this),r=n.data("bs.tooltip"),i="object"==typeof t&&t;!r&&/destroy|hide/.test(t)||(r||n.data("bs.tooltip",r=new l(this,i)),"string"==typeof t&&r[t]())}))},e.fn.tooltip.Constructor=l,e.fn.tooltip.noConflict=function(){return e.fn.tooltip=c,this}}(jQuery)},function(e,t){!function(e){"use strict";var t=function(e,t){this.init("popover",e,t)};if(!e.fn.tooltip)throw new Error("Popover requires tooltip.js");t.VERSION="3.4.1",t.DEFAULTS=e.extend({},e.fn.tooltip.Constructor.DEFAULTS,{placement:"right",trigger:"click",content:"",template:'<div class="popover" role="tooltip"><div class="arrow"></div><h3 class="popover-title"></h3><div class="popover-content"></div></div>'}),(t.prototype=e.extend({},e.fn.tooltip.Constructor.prototype)).constructor=t,t.prototype.getDefaults=function(){return t.DEFAULTS},t.prototype.setContent=function(){var e=this.tip(),t=this.getTitle(),n=this.getContent();if(this.options.html){var r=typeof n;this.options.sanitize&&(t=this.sanitizeHtml(t),"string"===r&&(n=this.sanitizeHtml(n))),e.find(".popover-title").html(t),e.find(".popover-content").children().detach().end()["string"===r?"html":"append"](n)}else e.find(".popover-title").text(t),e.find(".popover-content").children().detach().end().text(n);e.removeClass("fade top bottom left right in"),e.find(".popover-title").html()||e.find(".popover-title").hide()},t.prototype.hasContent=function(){return this.getTitle()||this.getContent()},t.prototype.getContent=function(){var e=this.$element,t=this.options;return e.attr("data-content")||("function"==typeof t.content?t.content.call(e[0]):t.content)},t.prototype.arrow=function(){return this.$arrow=this.$arrow||this.tip().find(".arrow")};var n=e.fn.popover;e.fn.popover=function(n){return this.each((function(){var r=e(this),i=r.data("bs.popover"),o="object"==typeof n&&n;!i&&/destroy|hide/.test(n)||(i||r.data("bs.popover",i=new t(this,o)),"string"==typeof n&&i[n]())}))},e.fn.popover.Constructor=t,e.fn.popover.noConflict=function(){return e.fn.popover=n,this}}(jQuery)},function(e,t,n){"use strict";n.r(t);var r=n(133);for(var i in r)["default","core"].indexOf(i)<0&&function(e){n.d(t,e,(function(){return r[e]}))}(i);var o=n(113);n.d(t,"watchDigests",(function(){return o.b})),n.d(t,"getLocals",(function(){return o.a}));var a=n(55);n.d(t,"getNg1ViewConfigFactory",(function(){return a.b})),n.d(t,"ng1ViewsBuilder",(function(){return a.c})),n.d(t,"Ng1ViewConfig",(function(){return a.a}));var s=n(111);n.d(t,"StateProvider",(function(){return s.a}));var l=n(112);n.d(t,"UrlRouterProvider",(function(){return l.a}));n(220),n(221),n(222),n(223),n(224);var c=n(2);for(var i in n.d(t,"core",(function(){return c})),c)["default","core","watchDigests","getLocals","getNg1ViewConfigFactory","ng1ViewsBuilder","Ng1ViewConfig","StateProvider","UrlRouterProvider"].indexOf(i)<0&&function(e){n.d(t,e,(function(){return c[e]}))}(i);t.default="ui.router"},function(e,t){},function(e,t,n){"use strict";var r,i,o,a=n(12),s=n(2);function l(e){var t=e.match(/^\s*({[^}]*})\s*$/);t&&(e="("+t[1]+")");var n=e.replace(/\n/g," ").match(/^\s*([^(]*?)\s*(\((.*)\))?\s*$/);if(!n||4!==n.length)throw new Error("Invalid state ref '"+e+"'");return{state:n[1]||null,paramExpr:n[3]||null}}function c(e){var t=e.parent().inheritedData("$uiView"),n=Object(s.parse)("$cfg.path")(t);return n?Object(s.tail)(n).state.name:void 0}function u(e,t,n){var r=n.uiState||e.current.name,i=Object(s.extend)(function(e,t){return{relative:c(e)||t.$current,inherit:!0,source:"sref"}}(t,e),n.uiStateOpts||{}),o=e.href(r,n.uiStateParams,i);return{uiState:r,uiStateParams:n.uiStateParams,uiStateOpts:i,href:o}}function d(e){var t="[object SVGAnimatedString]"===Object.prototype.toString.call(e.prop("href")),n="FORM"===e[0].nodeName;return{attr:n?"action":t?"xlink:href":"href",isAnchor:"A"===e.prop("tagName").toUpperCase(),clickable:!n}}function f(e,t,n,r,i){return function(o){var a=o.which||o.button,s=i();if(!(a>1||o.ctrlKey||o.metaKey||o.shiftKey||o.altKey||e.attr("target"))){var l=n((function(){e.attr("disabled")||t.go(s.uiState,s.uiStateParams,s.uiStateOpts)}));o.preventDefault();var c=r.isAnchor&&!s.href?1:0;o.preventDefault=function(){c--<=0&&n.cancel(l)}}}}function p(e,t,n,r){var i;r&&(i=r.events),Object(s.isArray)(i)||(i=["click"]);for(var o=e.on?"on":"bind",a=0,l=i;a<l.length;a++){var c=l[a];e[o](c,n)}t.$on("$destroy",(function(){for(var t=e.off?"off":"unbind",r=0,o=i;r<o.length;r++){var a=o[r];e[t](a,n)}}))}r=["$uiRouter","$timeout",function(e,t){var n=e.stateService;return{restrict:"A",require:["?^uiSrefActive","?^uiSrefActiveEq"],link:function(r,i,o,a){var c=d(i),h=a[1]||a[0],g=null,v={},m=function(){return u(n,i,v)},b=l(o.uiSref);function y(){var e=m();g&&g(),h&&(g=h.$$addStateInfo(e.uiState,e.uiStateParams)),null!=e.href&&o.$set(c.attr,e.href)}if(v.uiState=b.state,v.uiStateOpts=o.uiSrefOpts?r.$eval(o.uiSrefOpts):{},b.paramExpr&&(r.$watch(b.paramExpr,(function(e){v.uiStateParams=Object(s.extend)({},e),y()}),!0),v.uiStateParams=Object(s.extend)({},r.$eval(b.paramExpr))),y(),r.$on("$destroy",e.stateRegistry.onStatesChanged(y)),r.$on("$destroy",e.transitionService.onSuccess({},y)),c.clickable){var x=f(i,n,t,c,m);p(i,r,x,v.uiStateOpts)}}}}],i=["$uiRouter","$timeout",function(e,t){var n=e.stateService;return{restrict:"A",require:["?^uiSrefActive","?^uiSrefActiveEq"],link:function(r,i,o,a){var l,c=d(i),h=a[1]||a[0],g=null,v={},m=function(){return u(n,i,v)},b=["uiState","uiStateParams","uiStateOpts"],y=b.reduce((function(e,t){return e[t]=s.noop,e}),{});function x(){var e=m();g&&g(),h&&(g=h.$$addStateInfo(e.uiState,e.uiStateParams)),null!=e.href&&o.$set(c.attr,e.href)}b.forEach((function(e){v[e]=o[e]?r.$eval(o[e]):null,o.$observe(e,(function(t){y[e](),y[e]=r.$watch(t,(function(t){v[e]=t,x()}),!0)}))})),x(),r.$on("$destroy",e.stateRegistry.onStatesChanged(x)),r.$on("$destroy",e.transitionService.onSuccess({},x)),c.clickable&&(l=f(i,n,t,c,m),p(i,r,l,v.uiStateOpts))}}}],o=["$state","$stateParams","$interpolate","$uiRouter",function(e,t,n,r){return{restrict:"A",controller:["$scope","$element","$attrs",function(t,i,o){var a,u,d,f,p,h=[];a=n(o.uiSrefActiveEq||"",!1)(t);try{u=t.$eval(o.uiSrefActive)}catch(e){}function g(e){e.promise.then(y,s.noop)}function v(){m(u)}function m(e){Object(s.isObject)(e)&&(h=[],Object(s.forEach)(e,(function(e,n){var r=function(e,n){var r=l(e);b(r.state,t.$eval(r.paramExpr),n)};Object(s.isString)(e)?r(e,n):Object(s.isArray)(e)&&Object(s.forEach)(e,(function(e){r(e,n)}))})))}function b(t,n,r){var o={state:e.get(t,c(i))||{name:t},params:n,activeClass:r};return h.push(o),function(){Object(s.removeFrom)(h)(o)}}function y(){var n=function(e){return e.split(/\s/).filter(s.identity)},r=function(e){return e.map((function(e){return e.activeClass})).map(n).reduce(s.unnestR,[])},o=r(h).concat(n(a)).reduce(s.uniqR,[]),l=r(h.filter((function(t){return e.includes(t.state.name,t.params)}))),c=!!h.filter((function(t){return e.is(t.state.name,t.params)})).length?n(a):[],u=l.concat(c).reduce(s.uniqR,[]),d=o.filter((function(e){return!Object(s.inArray)(u,e)}));t.$evalAsync((function(){u.forEach((function(e){return i.addClass(e)})),d.forEach((function(e){return i.removeClass(e)}))}))}m(u=u||n(o.uiSrefActive||"",!1)(t)),this.$$addStateInfo=function(e,t){if(!(Object(s.isObject)(u)&&h.length>0)){var n=b(e,t,u);return y(),n}},t.$on("$destroy",(d=r.stateRegistry.onStatesChanged(v),f=r.transitionService.onStart({},g),p=t.$on("$stateChangeSuccess",y),function(){d(),f(),p()})),r.globals.transition&&g(r.globals.transition),y()}]}}],a.a.module("ui.router.state").directive("uiSref",r).directive("uiSrefActive",o).directive("uiSrefActiveEq",o).directive("uiState",i)},function(e,t,n){"use strict";var r=n(12);function i(e){var t=function(t,n,r){return e.is(t,n,r)};return t.$stateful=!0,t}function o(e){var t=function(t,n,r){return e.includes(t,n,r)};return t.$stateful=!0,t}i.$inject=["$state"],o.$inject=["$state"],r.a.module("ui.router.state").filter("isState",i).filter("includedByState",o)},function(e,t,n){"use strict";var r,i=n(2),o=n(12),a=n(113),s=n(55);function l(e,t,n,r,s){var l=Object(i.parse)("viewDecl.controllerAs"),c=Object(i.parse)("viewDecl.resolveAs");return{restrict:"ECA",priority:-400,compile:function(r){var u=r.html();return r.empty(),function(r,f){var p=f.data("$uiView");if(!p)return f.html(u),void e(f.contents())(r);var h=p.$cfg||{viewDecl:{},getTemplate:i.noop},g=h.path&&new i.ResolveContext(h.path);f.html(h.getTemplate(f,g)||u),i.trace.traceUIViewFill(p.$uiView,f.html());var v=e(f.contents()),m=h.controller,b=l(h),y=c(h),x=g&&Object(a.a)(g);if(r[y]=x,m){var w=t(m,Object(i.extend)({},x,{$scope:r,$element:f}));b&&(r[b]=w,r[b][y]=x),f.data("$ngControllerController",w),f.children().data("$ngControllerController",w),d(s,n,w,r,h)}if(Object(i.isString)(h.component))var k=Object(i.kebobString)(h.component),A=new RegExp("^(x-|data-)?"+k+"$","i"),E=r.$watch((function(){var e=[].slice.call(f[0].children).filter((function(e){return e&&e.tagName&&A.exec(e.tagName)}));return e&&o.a.element(e).data("$"+h.component+"Controller")}),(function(e){e&&(d(s,n,e,r,h),E())}));v(r)}}}}r=["$view","$animate","$uiViewScroll","$interpolate","$q",function(e,t,n,r,a){var l={$cfg:{viewDecl:{$context:e._pluginapi._rootViewContext()}},$uiView:{}},c={count:0,restrict:"ECA",terminal:!0,priority:400,transclude:"element",compile:function(u,d,f){return function(u,d,p){var h,g,v,m,b=p.onload||"",y=p.autoscroll,x={enter:function(e,n,r){o.a.version.minor>2?t.enter(e,null,n).then(r):t.enter(e,null,n,r)},leave:function(e,n){o.a.version.minor>2?t.leave(e).then(n):t.leave(e,n)}},w=d.inheritedData("$uiView")||l,k=r(p.uiView||p.name||"")(u)||"$default",A={$type:"ng1",id:c.count++,name:k,fqn:w.$uiView.fqn?w.$uiView.fqn+"."+k:k,config:null,configUpdated:function(e){if(e&&!(e instanceof s.a))return;if(t=m,n=e,t===n)return;var t,n;i.trace.traceUIViewConfigUpdated(A,e&&e.viewDecl&&e.viewDecl.$context),m=e,S(e)},get creationContext(){var e=Object(i.parse)("$cfg.viewDecl.$context")(w),t=Object(i.parse)("$uiView.creationContext")(w);return e||t}};i.trace.traceUIViewEvent("Linking",A),d.data("$uiView",{$uiView:A}),S();var E=e.registerUIView(A);function S(e){var t=u.$new(),r=a.defer(),o=a.defer(),s={$cfg:e,$uiView:A},l={$animEnter:r.promise,$animLeave:o.promise,$$animLeave:o};t.$emit("$viewContentLoading",k);var c=f(t,(function(e){e.data("$uiViewAnim",l),e.data("$uiView",s),x.enter(e,d,(function(){r.resolve(),v&&v.$emit("$viewContentAnimationEnded"),(Object(i.isDefined)(y)&&!y||u.$eval(y))&&n(e)})),function(){if(h&&(i.trace.traceUIViewEvent("Removing (previous) el",h.data("$uiView")),h.remove(),h=null),v&&(i.trace.traceUIViewEvent("Destroying scope",A),v.$destroy(),v=null),g){var e=g.data("$uiViewAnim");i.trace.traceUIViewEvent("Animate out",e),x.leave(g,(function(){e.$$animLeave.resolve(),h=null})),h=g,g=null}}()}));g=c,(v=t).$emit("$viewContentLoaded",e||m),v.$eval(b)}u.$on("$destroy",(function(){i.trace.traceUIViewEvent("Destroying/Unregistering",A),E()}))}}};return c}],l.$inject=["$compile","$controller","$transitions","$view","$q"];var c="function"==typeof o.a.module("ui.router").component,u=0;function d(e,t,n,r,o){!Object(i.isFunction)(n.$onInit)||(o.viewDecl.component||o.viewDecl.componentProvider)&&c||n.$onInit();var a=Object(i.tail)(o.path).state.self,s={bind:n};if(Object(i.isFunction)(n.uiOnParamsChanged)){var l=new i.ResolveContext(o.path).getResolvable("$transition$").data;r.$on("$destroy",t.onSuccess({},(function(e){if(e!==l&&-1===e.exiting().indexOf(a)){var t=e.params("to"),r=e.params("from"),o=function(e){return e.paramSchema},s=e.treeChanges("to").map(o).reduce(i.unnestR,[]),c=e.treeChanges("from").map(o).reduce(i.unnestR,[]),u=s.filter((function(e){var n=c.indexOf(e);return-1===n||!c[n].type.equals(t[e.id],r[e.id])}));if(u.length){var d=u.map((function(e){return e.id})),f=Object(i.filter)(t,(function(e,t){return-1!==d.indexOf(t)}));n.uiOnParamsChanged(f,e)}}}),s))}if(Object(i.isFunction)(n.uiCanExit)){var d=u++,f=function(e){return!!e&&(e._uiCanExitIds&&!0===e._uiCanExitIds[d]||f(e.redirectedFrom()))},p={exiting:a.name};r.$on("$destroy",t.onBefore(p,(function(t){var r,i=t._uiCanExitIds=t._uiCanExitIds||{};return f(t)||(r=e.when(n.uiCanExit(t))).then((function(e){return i[d]=!1!==e})),r}),s))}}o.a.module("ui.router.state").directive("uiView",r),o.a.module("ui.router.state").directive("uiView",l)},function(e,t,n){"use strict";n(12).a.module("ui.router.state").provider("$uiViewScroll",(function(){var e=!1;this.useAnchorScroll=function(){e=!0},this.$get=["$anchorScroll","$timeout",function(t,n){return e?t:function(e){return n((function(){e[0].scrollIntoView()}),0,!1)}}]}))},function(e,t,n){n(226),e.exports="ngRoute"},function(e,t){ /** * @license AngularJS v1.8.2 * (c) 2010-2020 Google LLC. http://angularjs.org @@ -90,13 +90,13 @@ https://github.com/jquery/jquery/blob/master/src/event.js */var r=function(e,t){this.recycle(e,t)};function i(){return!1}function o(){return!0}r.prototype={instanceString:function(){return"event"},recycle:function(e,t){if(this.isImmediatePropagationStopped=this.isPropagationStopped=this.isDefaultPrevented=i,null!=e&&e.preventDefault?(this.type=e.type,this.isDefaultPrevented=e.defaultPrevented?o:i):null!=e&&e.type?t=e:this.type=e,null!=t&&(this.originalEvent=t.originalEvent,this.type=null!=t.type?t.type:this.type,this.cy=t.cy,this.target=t.target,this.position=t.position,this.renderedPosition=t.renderedPosition,this.namespace=t.namespace,this.layout=t.layout),null!=this.cy&&null!=this.position&&null==this.renderedPosition){var n=this.position,r=this.cy.zoom(),a=this.cy.pan();this.renderedPosition={x:n.x*r+a.x,y:n.y*r+a.y}}this.timeStamp=e&&e.timeStamp||Date.now()},preventDefault:function(){this.isDefaultPrevented=o;var e=this.originalEvent;e&&e.preventDefault&&e.preventDefault()},stopPropagation:function(){this.isPropagationStopped=o;var e=this.originalEvent;e&&e.stopPropagation&&e.stopPropagation()},stopImmediatePropagation:function(){this.isImmediatePropagationStopped=o,this.stopPropagation()},isDefaultPrevented:i,isPropagationStopped:i,isImmediatePropagationStopped:i},e.exports=r},function(e,t,n){"use strict";var r=n(1);e.exports=function(e,t){var n=e.cy().hasCompoundNodes();function i(e){var t=e.pstyle("z-compound-depth");return"auto"===t.value?n?e.zDepth():0:"bottom"===t.value?-1:"top"===t.value?r.MAX_INT:0}var o=i(e)-i(t);if(0!==o)return o;function a(e){return"auto"===e.pstyle("z-index-compare").value&&e.isNode()?1:0}var s=a(e)-a(t);if(0!==s)return s;var l=e.pstyle("z-index").value-t.pstyle("z-index").value;return 0!==l?l:e.poolIndex()-t.poolIndex()}},function(e,t,n){"use strict";var r=n(0),i=n(1),o=n(6),a=function e(t){if(!(this instanceof e))return new e(t);r.core(t)?(this._private={cy:t,coreStyle:{}},this.length=0,this.resetToDefault()):i.error("A style must have a core reference")},s=a.prototype;s.instanceString=function(){return"style"},s.clear=function(){for(var e=0;e<this.length;e++)this[e]=void 0;return this.length=0,this._private.newStyle=!0,this},s.resetToDefault=function(){return this.clear(),this.addDefaultStylesheet(),this},s.core=function(){return this._private.coreStyle},s.selector=function(e){var t="core"===e?null:new o(e),n=this.length++;return this[n]={selector:t,properties:[],mappedProperties:[],index:n},this},s.css=function(){var e=this,t=arguments;switch(t.length){case 1:for(var n=t[0],r=0;r<e.properties.length;r++){var o=e.properties[r],a=n[o.name];void 0===a&&(a=n[i.dash2camel(o.name)]),void 0!==a&&this.cssRule(o.name,a)}break;case 2:this.cssRule(t[0],t[1])}return this},s.style=s.css,s.cssRule=function(e,t){var n=this.parse(e,t);if(n){var r=this.length-1;this[r].properties.push(n),this[r].properties[n.name]=n,n.name.match(/pie-(\d+)-background-size/)&&n.value&&(this._private.hasPie=!0),n.mapped&&this[r].mappedProperties.push(n),!this[r].selector&&(this._private.coreStyle[n.name]=n)}return this},s.append=function(e){return r.stylesheet(e)?e.appendToStyle(this):r.array(e)?this.appendFromJson(e):r.string(e)&&this.appendFromString(e),this},a.fromJson=function(e,t){var n=new a(e);return n.fromJson(t),n},a.fromString=function(e,t){return new a(e).fromString(t)},[n(85),n(86),n(87),n(88),n(89),n(90),n(91),n(92)].forEach((function(e){i.extend(s,e)})),a.types=s.types,a.properties=s.properties,e.exports=a},function(e,t,n){"use strict";var r=n(1);e.exports={setupDequeueing:function(e){return function(){var t=this,n=this.renderer;if(!t.dequeueingSetup){t.dequeueingSetup=!0;var i=r.debounce((function(){n.redrawHint("eles",!0),n.redrawHint("drag",!0),n.redraw()}),e.deqRedrawThreshold),o=e.priority||r.noop;n.beforeRender((function(o,a){for(var s=r.performanceNow(),l=n.averageRedrawTime,c=n.lastRedrawTime,u=[],d=n.cy.extent(),f=n.getPixelRatio();;){var p=r.performanceNow(),h=p-s,g=p-a;if(c<1e3/60){var v=1e3/60-(o?l:0);if(g>=e.deqFastCost*v)break}else if(o){if(h>=e.deqCost*c||h>=e.deqAvgCost*l)break}else if(g>=e.deqNoDrawCost*(1e3/60))break;var m=e.deq(t,f,d);if(!(m.length>0))break;for(var b=0;b<m.length;b++)u.push(m[b])}u.length>0&&(e.onDeqd(t,u),!o&&e.shouldRedraw(t,u,f,d)&&i())}),o(t))}}}}},function(e,t,n){"use strict";var r=n(0),i=n(12),o=n(94),a=n(136),s=function(e){return void 0===e&&(e={}),r.plainObject(e)?new i(e):r.string(e)?o.apply(o,arguments):void 0};s.use=function(e){var t=Array.prototype.slice.call(arguments,1);return t.unshift(s),e.apply(null,t),this},s.version=n(137),s.stylesheet=s.Stylesheet=a,e.exports=s},function(e,t,n){"use strict";var r=n(0);e.exports={hex2tuple:function(e){if((4===e.length||7===e.length)&&"#"===e[0]){var t=void 0,n=void 0,r=void 0;return 4===e.length?(t=parseInt(e[1]+e[1],16),n=parseInt(e[2]+e[2],16),r=parseInt(e[3]+e[3],16)):(t=parseInt(e[1]+e[2],16),n=parseInt(e[3]+e[4],16),r=parseInt(e[5]+e[6],16)),[t,n,r]}},hsl2tuple:function(e){var t=void 0,n=void 0,r=void 0,i=void 0,o=void 0,a=void 0,s=void 0,l=void 0;function c(e,t,n){return n<0&&(n+=1),n>1&&(n-=1),n<1/6?e+6*(t-e)*n:n<.5?t:n<2/3?e+(t-e)*(2/3-n)*6:e}var u=new RegExp("^"+this.regex.hsla+"$").exec(e);if(u){if((n=parseInt(u[1]))<0?n=(360- -1*n%360)%360:n>360&&(n%=360),n/=360,(r=parseFloat(u[2]))<0||r>100)return;if(r/=100,(i=parseFloat(u[3]))<0||i>100)return;if(i/=100,void 0!==(o=u[4])&&((o=parseFloat(o))<0||o>1))return;if(0===r)a=s=l=Math.round(255*i);else{var d=i<.5?i*(1+r):i+r-i*r,f=2*i-d;a=Math.round(255*c(f,d,n+1/3)),s=Math.round(255*c(f,d,n)),l=Math.round(255*c(f,d,n-1/3))}t=[a,s,l,o]}return t},rgb2tuple:function(e){var t=void 0,n=new RegExp("^"+this.regex.rgba+"$").exec(e);if(n){t=[];for(var r=[],i=1;i<=3;i++){var o=n[i];if("%"===o[o.length-1]&&(r[i]=!0),o=parseFloat(o),r[i]&&(o=o/100*255),o<0||o>255)return;t.push(Math.floor(o))}var a=r[1]||r[2]||r[3],s=r[1]&&r[2]&&r[3];if(a&&!s)return;var l=n[4];if(void 0!==l){if((l=parseFloat(l))<0||l>1)return;t.push(l)}}return t},colorname2tuple:function(e){return this.colors[e.toLowerCase()]},color2tuple:function(e){return(r.array(e)?e:null)||this.colorname2tuple(e)||this.hex2tuple(e)||this.rgb2tuple(e)||this.hsl2tuple(e)},colors:{transparent:[0,0,0,0],aliceblue:[240,248,255],antiquewhite:[250,235,215],aqua:[0,255,255],aquamarine:[127,255,212],azure:[240,255,255],beige:[245,245,220],bisque:[255,228,196],black:[0,0,0],blanchedalmond:[255,235,205],blue:[0,0,255],blueviolet:[138,43,226],brown:[165,42,42],burlywood:[222,184,135],cadetblue:[95,158,160],chartreuse:[127,255,0],chocolate:[210,105,30],coral:[255,127,80],cornflowerblue:[100,149,237],cornsilk:[255,248,220],crimson:[220,20,60],cyan:[0,255,255],darkblue:[0,0,139],darkcyan:[0,139,139],darkgoldenrod:[184,134,11],darkgray:[169,169,169],darkgreen:[0,100,0],darkgrey:[169,169,169],darkkhaki:[189,183,107],darkmagenta:[139,0,139],darkolivegreen:[85,107,47],darkorange:[255,140,0],darkorchid:[153,50,204],darkred:[139,0,0],darksalmon:[233,150,122],darkseagreen:[143,188,143],darkslateblue:[72,61,139],darkslategray:[47,79,79],darkslategrey:[47,79,79],darkturquoise:[0,206,209],darkviolet:[148,0,211],deeppink:[255,20,147],deepskyblue:[0,191,255],dimgray:[105,105,105],dimgrey:[105,105,105],dodgerblue:[30,144,255],firebrick:[178,34,34],floralwhite:[255,250,240],forestgreen:[34,139,34],fuchsia:[255,0,255],gainsboro:[220,220,220],ghostwhite:[248,248,255],gold:[255,215,0],goldenrod:[218,165,32],gray:[128,128,128],grey:[128,128,128],green:[0,128,0],greenyellow:[173,255,47],honeydew:[240,255,240],hotpink:[255,105,180],indianred:[205,92,92],indigo:[75,0,130],ivory:[255,255,240],khaki:[240,230,140],lavender:[230,230,250],lavenderblush:[255,240,245],lawngreen:[124,252,0],lemonchiffon:[255,250,205],lightblue:[173,216,230],lightcoral:[240,128,128],lightcyan:[224,255,255],lightgoldenrodyellow:[250,250,210],lightgray:[211,211,211],lightgreen:[144,238,144],lightgrey:[211,211,211],lightpink:[255,182,193],lightsalmon:[255,160,122],lightseagreen:[32,178,170],lightskyblue:[135,206,250],lightslategray:[119,136,153],lightslategrey:[119,136,153],lightsteelblue:[176,196,222],lightyellow:[255,255,224],lime:[0,255,0],limegreen:[50,205,50],linen:[250,240,230],magenta:[255,0,255],maroon:[128,0,0],mediumaquamarine:[102,205,170],mediumblue:[0,0,205],mediumorchid:[186,85,211],mediumpurple:[147,112,219],mediumseagreen:[60,179,113],mediumslateblue:[123,104,238],mediumspringgreen:[0,250,154],mediumturquoise:[72,209,204],mediumvioletred:[199,21,133],midnightblue:[25,25,112],mintcream:[245,255,250],mistyrose:[255,228,225],moccasin:[255,228,181],navajowhite:[255,222,173],navy:[0,0,128],oldlace:[253,245,230],olive:[128,128,0],olivedrab:[107,142,35],orange:[255,165,0],orangered:[255,69,0],orchid:[218,112,214],palegoldenrod:[238,232,170],palegreen:[152,251,152],paleturquoise:[175,238,238],palevioletred:[219,112,147],papayawhip:[255,239,213],peachpuff:[255,218,185],peru:[205,133,63],pink:[255,192,203],plum:[221,160,221],powderblue:[176,224,230],purple:[128,0,128],red:[255,0,0],rosybrown:[188,143,143],royalblue:[65,105,225],saddlebrown:[139,69,19],salmon:[250,128,114],sandybrown:[244,164,96],seagreen:[46,139,87],seashell:[255,245,238],sienna:[160,82,45],silver:[192,192,192],skyblue:[135,206,235],slateblue:[106,90,205],slategray:[112,128,144],slategrey:[112,128,144],snow:[255,250,250],springgreen:[0,255,127],steelblue:[70,130,180],tan:[210,180,140],teal:[0,128,128],thistle:[216,191,216],tomato:[255,99,71],turquoise:[64,224,208],violet:[238,130,238],wheat:[245,222,179],white:[255,255,255],whitesmoke:[245,245,245],yellow:[255,255,0],yellowgreen:[154,205,50]}}},function(e,t,n){"use strict";var r=n(0);e.exports={mapEmpty:function(e){return null==e||0===Object.keys(e).length},pushMap:function(e){var t=this.getMap(e);null==t?this.setMap(this.extend({},e,{value:[e.value]})):t.push(e.value)},setMap:function(e){for(var t=e.map,n=e.keys,i=n.length,o=0;o<i;o++){var a=n[o];r.plainObject(a)&&this.error("Tried to set map with object key"),o<n.length-1?(null==t[a]&&(t[a]={}),t=t[a]):t[a]=e.value}},getMap:function(e){for(var t=e.map,n=e.keys,i=n.length,o=0;o<i;o++){var a=n[o];if(r.plainObject(a)&&this.error("Tried to get map with object key"),null==(t=t[a]))return t}return t},deleteMap:function(e){for(var t=e.map,n=e.keys,i=n.length,o=e.keepChildren,a=0;a<i;a++){var s=n[a];if(r.plainObject(s)&&this.error("Tried to delete map with object key"),a===e.keys.length-1)if(o)for(var l=Object.keys(t),c=0;c<l.length;c++){var u=l[c];o[u]||(t[u]=void 0)}else t[s]=void 0;else t=t[s]}}}},function(e,t,n){"use strict";var r="(?:[-+]?(?:(?:\\d+|\\d*\\.\\d+)(?:[Ee][+-]?\\d+)?))";e.exports={regex:{number:r,rgba:"rgb[a]?\\(((?:[-+]?(?:(?:\\d+|\\d*\\.\\d+)(?:[Ee][+-]?\\d+)?))[%]?)\\s*,\\s*((?:[-+]?(?:(?:\\d+|\\d*\\.\\d+)(?:[Ee][+-]?\\d+)?))[%]?)\\s*,\\s*((?:[-+]?(?:(?:\\d+|\\d*\\.\\d+)(?:[Ee][+-]?\\d+)?))[%]?)(?:\\s*,\\s*((?:[-+]?(?:(?:\\d+|\\d*\\.\\d+)(?:[Ee][+-]?\\d+)?))))?\\)",rgbaNoBackRefs:"rgb[a]?\\((?:(?:[-+]?(?:(?:\\d+|\\d*\\.\\d+)(?:[Ee][+-]?\\d+)?))[%]?)\\s*,\\s*(?:(?:[-+]?(?:(?:\\d+|\\d*\\.\\d+)(?:[Ee][+-]?\\d+)?))[%]?)\\s*,\\s*(?:(?:[-+]?(?:(?:\\d+|\\d*\\.\\d+)(?:[Ee][+-]?\\d+)?))[%]?)(?:\\s*,\\s*(?:(?:[-+]?(?:(?:\\d+|\\d*\\.\\d+)(?:[Ee][+-]?\\d+)?))))?\\)",hsla:"hsl[a]?\\(((?:[-+]?(?:(?:\\d+|\\d*\\.\\d+)(?:[Ee][+-]?\\d+)?)))\\s*,\\s*((?:[-+]?(?:(?:\\d+|\\d*\\.\\d+)(?:[Ee][+-]?\\d+)?))[%])\\s*,\\s*((?:[-+]?(?:(?:\\d+|\\d*\\.\\d+)(?:[Ee][+-]?\\d+)?))[%])(?:\\s*,\\s*((?:[-+]?(?:(?:\\d+|\\d*\\.\\d+)(?:[Ee][+-]?\\d+)?))))?\\)",hslaNoBackRefs:"hsl[a]?\\((?:(?:[-+]?(?:(?:\\d+|\\d*\\.\\d+)(?:[Ee][+-]?\\d+)?)))\\s*,\\s*(?:(?:[-+]?(?:(?:\\d+|\\d*\\.\\d+)(?:[Ee][+-]?\\d+)?))[%])\\s*,\\s*(?:(?:[-+]?(?:(?:\\d+|\\d*\\.\\d+)(?:[Ee][+-]?\\d+)?))[%])(?:\\s*,\\s*(?:(?:[-+]?(?:(?:\\d+|\\d*\\.\\d+)(?:[Ee][+-]?\\d+)?))))?\\)",hex3:"\\#[0-9a-fA-F]{3}",hex6:"\\#[0-9a-fA-F]{6}"}}},function(e,t,n){"use strict";var r=n(13),i=n(0);e.exports={camel2dash:r((function(e){return e.replace(/([A-Z])/g,(function(e){return"-"+e.toLowerCase()}))})),dash2camel:r((function(e){return e.replace(/(-\w)/g,(function(e){return e[1].toUpperCase()}))})),prependCamel:r((function(e,t){return e+t[0].toUpperCase()+t.substring(1)}),(function(e,t){return e+"$"+t})),capitalize:function(e){return i.emptyString(e)?e:e.charAt(0).toUpperCase()+e.substring(1)}}},function(e,t,n){"use strict";var r=n(3),i=r?r.performance:null,o={},a=i&&i.now?function(){return i.now()}:function(){return Date.now()},s=function(){if(r){if(r.requestAnimationFrame)return function(e){r.requestAnimationFrame(e)};if(r.mozRequestAnimationFrame)return function(e){r.mozRequestAnimationFrame(e)};if(r.webkitRequestAnimationFrame)return function(e){r.webkitRequestAnimationFrame(e)};if(r.msRequestAnimationFrame)return function(e){r.msRequestAnimationFrame(e)}}return function(e){e&&setTimeout((function(){e(a())}),1e3/60)}}();o.requestAnimationFrame=function(e){s(e)},o.performanceNow=a,o.debounce=n(26),o.now=function(){return Date.now()},e.exports=o},function(t,n){t.exports=e},function(e,t,n){"use strict";function r(e,t){return e<t?-1:e>t?1:0}e.exports={sort:{ascending:r,descending:function(e,t){return-1*r(e,t)}}}},function(e,t,n){"use strict";function r(){this._obj={}}var i=r.prototype;i.set=function(e,t){this._obj[e]=t},i.delete=function(e){this._obj[e]=null},i.has=function(e){return null!=this._obj[e]},i.get=function(e){return this._obj[e]},e.exports=r},function(e,t,n){"use strict";var r=n(1),i={};[n(30),n(31),n(33),n(34),n(35),n(36),n(37),n(38),n(39),n(40),n(41)].forEach((function(e){r.extend(i,e)})),e.exports=i},function(e,t,n){"use strict";var r=n(0),i=function(e){return e={bfs:e.bfs||!e.dfs,dfs:e.dfs||!e.bfs},function(t,n,i){var o;r.plainObject(t)&&!r.elementOrCollection(t)&&(t=(o=t).roots||o.root,n=o.visit,i=o.directed),i=2!==arguments.length||r.fn(n)?i:n,n=r.fn(n)?n:function(){};for(var a,s=this._private.cy,l=t=r.string(t)?this.filter(t):t,c=[],u=[],d={},f={},p={},h=0,g=this.nodes(),v=this.edges(),m=0;m<l.length;m++)l[m].isNode()&&(c.unshift(l[m]),e.bfs&&(p[l[m].id()]=!0,u.push(l[m])),f[l[m].id()]=0);for(;0!==c.length;){if(l=e.bfs?c.shift():c.pop(),e.dfs){if(p[l.id()])continue;p[l.id()]=!0,u.push(l)}var b,y=f[l.id()],x=d[l.id()],w=null==x?void 0:x.connectedNodes().not(l)[0];if(!0===(b=n(l,x,w,h++,y))){a=l;break}if(!1===b)break;var k=l.connectedEdges(i?function(e){return e.data("source")===l.id()}:void 0).intersect(v);for(m=0;m<k.length;m++){var A=k[m],E=A.connectedNodes((function(e){return e.id()!==l.id()})).intersect(g);0===E.length||p[E.id()]||(E=E[0],c.push(E),e.bfs&&(p[E.id()]=!0,u.push(E)),d[E.id()]=A,f[E.id()]=f[l.id()]+1)}}var S=[];for(m=0;m<u.length;m++){var C=u[m],$=d[C.id()];$&&S.push($),S.push(C)}return{path:s.collection(S,{unique:!0}),found:s.collection(a)}}},o={breadthFirstSearch:i({bfs:!0}),depthFirstSearch:i({dfs:!0})};o.bfs=o.breadthFirstSearch,o.dfs=o.depthFirstSearch,e.exports=o},function(e,t,n){"use strict";var r=n(0),i=n(9),o={dijkstra:function(e,t,n){var o;r.plainObject(e)&&!r.elementOrCollection(e)&&(e=(o=e).root,t=o.weight,n=o.directed);var a=this._private.cy;t=r.fn(t)?t:function(){return 1};for(var s=r.string(e)?this.filter(e)[0]:e[0],l={},c={},u={},d=this.edges().filter((function(e){return!e.isLoop()})),f=this.nodes(),p=function(e){return l[e.id()]},h=function(e,t){l[e.id()]=t,g.updateItem(e)},g=new i((function(e,t){return p(e)-p(t)})),v=0;v<f.length;v++){var m=f[v];l[m.id()]=m.same(s)?0:1/0,g.push(m)}for(var b=function(e,r){for(var i,o=(n?e.edgesTo(r):e.edgesWith(r)).intersect(d),a=1/0,s=0;s<o.length;s++){var l=o[s],c=t(l);(c<a||!i)&&(a=c,i=l)}return{edge:i,dist:a}};g.size()>0;){var y=g.pop(),x=p(y),w=y.id();if(u[w]=x,x!==1/0){var k=y.neighborhood().intersect(f);for(v=0;v<k.length;v++){var A=k[v],E=A.id(),S=b(y,A),C=x+S.dist;C<p(A)&&(h(A,C),c[E]={node:y,edge:S.edge})}}}return{distanceTo:function(e){var t=r.string(e)?f.filter(e)[0]:e[0];return u[t.id()]},pathTo:function(e){var t=r.string(e)?f.filter(e)[0]:e[0],n=[],i=t;if(t.length>0)for(n.unshift(t);c[i.id()];){var o=c[i.id()];n.unshift(o.edge),n.unshift(o.node),i=o.node}return a.collection(n)}}}};e.exports=o},function(e,t){e.exports=n},function(e,t,n){"use strict";var r=n(0),i={kruskal:function(e){var t=this.cy();function n(e){for(var t=0;t<o.length;t++){var n=o[t];if(n.anySame(e))return{eles:n,index:t}}}e=r.fn(e)?e:function(){return 1};for(var i=t.collection(t,[]),o=[],a=this.nodes(),s=0;s<a.length;s++)o.push(a[s].collection());var l=this.edges().toArray().sort((function(t,n){return e(t)-e(n)}));for(s=0;s<l.length;s++){var c=l[s],u=c.source()[0],d=c.target()[0],f=n(u),p=n(d);f.index!==p.index&&(i=i.add(c),o[f.index]=f.eles.add(p.eles),o.splice(p.index,1))}return a.add(i)}};e.exports=i},function(e,t,n){"use strict";var r=n(0),i={aStar:function(e){e=e||{};var t=function e(t,n,r,o){if(t==n)return o.unshift(i.getElementById(n)),o;if(n in r){var a=r[n],s=g[n];return o.unshift(i.getElementById(s)),o.unshift(i.getElementById(n)),e(t,a,r,o)}},n=function(e,t){if(0!==e.length){for(var n=0,r=t[e[0]],i=1;i<e.length;i++){var o=t[e[i]];o<r&&(r=o,n=i)}return n}},i=this._private.cy;if(null!=e&&null!=e.root){var o=r.string(e.root)?this.filter(e.root)[0]:e.root[0];if(null!=e.goal){var a=r.string(e.goal)?this.filter(e.goal)[0]:e.goal[0];if(null!=e.heuristic&&r.fn(e.heuristic))var s=e.heuristic;else s=function(){return 0};if(null!=e.weight&&r.fn(e.weight))var l=e.weight;else l=function(e){return 1};if(null!=e.directed)var c=e.directed;else c=!1;var u=o.id(),d=a.id(),f=[],p=[u],h={},g={},v={},m={};v[u]=0,m[u]=s(o);for(var b=0;p.length>0;){var y=n(p,m),x=i.getElementById(p[y]),w=x.id();if(b++,w==d){var k=t(u,d,h,[]);return{found:!0,distance:v[w],path:this.spawn(k),steps:b}}f.push(w),p.splice(y,1);for(var A=x._private.edges,E=0;E<A.length;E++){var S=A[E];if(this.hasElementWithId(S.id())&&(!c||S.data("source")===w)){var C=S.source(),$=S.target(),O=C.id()!==w?C:$,_=O.id();if(this.hasElementWithId(_)&&-1==f.indexOf(_)){var T=v[w]+l(S);-1!=p.indexOf(_)?T<v[_]&&(v[_]=T,m[_]=T+s(O),h[_]=w):(v[_]=T,m[_]=T+s(O),p.push(_),h[_]=w,g[_]=S.id())}}}}return{found:!1,distance:void 0,path:void 0,steps:b}}}}};e.exports=i},function(e,t,n){"use strict";var r=n(0),i={floydWarshall:function(e){e=e||{};var t=this.cy();if(null!=e.weight&&r.fn(e.weight))var n=e.weight;else n=function(e){return 1};if(null!=e.directed)var i=e.directed;else i=!1;for(var o=this.edges().stdFilter((function(e){return!e.isLoop()})),a=this.nodes(),s=a.length,l={},c=0;c<s;c++)l[a[c].id()]=c;var u=[];for(c=0;c<s;c++){for(var d=new Array(s),f=0;f<s;f++)d[f]=c==f?0:1/0;u.push(d)}var p=[],h=[],g=function(e){for(var t=0;t<s;t++){for(var n=new Array(s),r=0;r<s;r++)n[r]=void 0;e.push(n)}};for(g(p),g(h),c=0;c<o.length;c++){var v=l[o[c].source().id()],m=l[o[c].target().id()],b=n(o[c]);u[v][m]>b&&(u[v][m]=b,p[v][m]=m,h[v][m]=o[c])}if(!i)for(c=0;c<o.length;c++)v=l[o[c].target().id()],m=l[o[c].source().id()],b=n(o[c]),u[v][m]>b&&(u[v][m]=b,p[v][m]=m,h[v][m]=o[c]);for(var y=0;y<s;y++)for(c=0;c<s;c++)for(f=0;f<s;f++)u[c][y]+u[y][f]<u[c][f]&&(u[c][f]=u[c][y]+u[y][f],p[c][f]=p[c][y]);var x=[];for(c=0;c<s;c++)x.push(a[c].id());return{distance:function(e,n){if(r.string(e))var i=t.filter(e)[0].id();else i=e.id();if(r.string(n))var o=t.filter(n)[0].id();else o=n.id();return u[l[i]][l[o]]},path:function(e,n){if(r.string(e))var i=t.filter(e)[0].id();else i=e.id();if(r.string(n))var o=t.filter(n)[0].id();else o=n.id();var a=function(e,n,r,i,o){if(e===n)return t.getElementById(i[e]);if(void 0!==r[e][n]){for(var a=[t.getElementById(i[e])],s=e;e!==n;){s=e,e=r[e][n];var l=o[s][e];a.push(l),a.push(t.getElementById(i[e]))}return a}}(l[i],l[o],p,x,h);return t.collection(a)}}}};e.exports=i},function(e,t,n){"use strict";var r=n(0),i=n(1),o={bellmanFord:function(e){var t=this;if(null!=(e=e||{}).weight&&r.fn(e.weight))var n=e.weight;else n=function(e){return 1};if(null!=e.directed)var o=e.directed;else o=!1;if(null!=e.root){if(r.string(e.root))var a=this.filter(e.root)[0];else a=e.root[0];for(var s=this._private.cy,l=this.edges().stdFilter((function(e){return!e.isLoop()})),c=this.nodes(),u=c.length,d={},f=0;f<u;f++)d[c[f].id()]=f;var p=[],h=[],g=[];for(f=0;f<u;f++)c[f].id()===a.id()?p[f]=0:p[f]=1/0,h[f]=void 0;var v=!1;for(f=1;f<u;f++){v=!1;for(var m=0;m<l.length;m++){var b,y=d[l[m].source().id()],x=d[l[m].target().id()],w=n(l[m]);(b=p[y]+w)<p[x]&&(p[x]=b,h[x]=y,g[x]=l[m],v=!0),o||(b=p[x]+w)<p[y]&&(p[y]=b,h[y]=x,g[y]=l[m],v=!0)}if(!v)break}if(v)for(m=0;m<l.length;m++)if(y=d[l[m].source().id()],x=d[l[m].target().id()],w=n(l[m]),p[y]+w<p[x])return i.error("Graph contains a negative weight cycle for Bellman-Ford"),{pathTo:void 0,distanceTo:void 0,hasNegativeWeightCycle:!0};var k=[];for(f=0;f<u;f++)k.push(c[f].id());return{distanceTo:function(e){if(r.string(e))var t=s.filter(e)[0].id();else t=e.id();return p[d[t]]},pathTo:function(e){if(r.string(e))var n=s.filter(e)[0].id();else n=e.id();var i=function(e,t,n,r,i,o){for(;;){if(i.push(s.getElementById(r[n])),i.push(o[n]),t===n)return i;var a=e[n];if(void 0===a)return;n=a}}(h,d[a.id()],d[n],k,[],g);return null!=i&&i.reverse(),t.spawn(i)},hasNegativeWeightCycle:!1}}}};e.exports=o},function(e,t,n){"use strict";var r=n(1),i={kargerStein:function(e){e=e||{};var t=function e(t,n,r,i){return r<=i?n:e(t,function(e,t,n){for(var r=n[e],i=r[1],o=r[2],a=t[i],s=t[o],l=n.filter((function(e){return!(t[e[1]]===a&&t[e[2]]===s||t[e[1]]===s&&t[e[2]]===a)})),c=0;c<l.length;c++){var u=l[c];u[1]===s?(l[c]=u.slice(0),l[c][1]=a):u[2]===s&&(l[c]=u.slice(0),l[c][2]=a)}for(c=0;c<t.length;c++)t[c]===s&&(t[c]=a);return l}(Math.floor(Math.random()*n.length),t,n),r-1,i)},n=this._private.cy,i=this.edges().stdFilter((function(e){return!e.isLoop()})),o=this.nodes(),a=o.length,s=i.length,l=Math.ceil(Math.pow(Math.log(a)/Math.LN2,2)),c=Math.floor(a/Math.sqrt(2));if(!(a<2)){for(var u={},d=0;d<a;d++)u[o[d].id()]=d;var f=[];for(d=0;d<s;d++){var p=i[d];f.push([d,u[p.source().id()],u[p.target().id()]])}var h,g=1/0,v=[];for(d=0;d<a;d++)v.push(d);for(var m=0;m<=l;m++){var b=v.slice(0),y=t(b,f,a,c),x=b.slice(0),w=t(b,y,c,2),k=t(x,y,c,2);w.length<=k.length&&w.length<g?(g=w.length,h=[w,b]):k.length<=w.length&&k.length<g&&(g=k.length,h=[k,x])}var A=h[0].map((function(e){return i[e[0]]})),E=[],S=[],C=h[1][0];for(d=0;d<h[1].length;d++)h[1][d]===C?E.push(o[d]):S.push(o[d]);return{cut:this.spawn(n,A),partition1:this.spawn(E),partition2:this.spawn(S)}}r.error("At least 2 nodes are required for Karger-Stein algorithm")}};e.exports=i},function(e,t,n){"use strict";var r=n(0),i={pageRank:function(e){var t=function(e){for(var t=e.length,n=0,r=0;r<t;r++)n+=e[r];for(r=0;r<t;r++)e[r]=e[r]/n};if(null!=(e=e||{})&&null!=e.dampingFactor)var n=e.dampingFactor;else n=.8;if(null!=e&&null!=e.precision)var i=e.precision;else i=1e-6;if(null!=e&&null!=e.iterations)var o=e.iterations;else o=200;if(null!=e&&null!=e.weight&&r.fn(e.weight))var a=e.weight;else a=function(e){return 1};for(var s=this._private.cy,l=this.edges().stdFilter((function(e){return!e.isLoop()})),c=this.nodes(),u=c.length,d=l.length,f={},p=0;p<u;p++)f[c[p].id()]=p;var h=[],g=[],v=(1-n)/u;for(p=0;p<u;p++){for(var m=[],b=0;b<u;b++)m.push(0);h.push(m),g.push(0)}for(p=0;p<d;p++){var y=l[p],x=f[y.source().id()],w=f[y.target().id()],k=a(y);h[w][x]+=k,g[x]+=k}var A=1/u+v;for(b=0;b<u;b++)if(0===g[b])for(p=0;p<u;p++)h[p][b]=A;else for(p=0;p<u;p++)h[p][b]=h[p][b]/g[b]+v;var E,S=[],C=[];for(p=0;p<u;p++)S.push(1),C.push(0);for(var $=0;$<o;$++){var O=C.slice(0);for(p=0;p<u;p++)for(b=0;b<u;b++)O[p]+=h[p][b]*S[b];t(O),E=S,S=O;var _=0;for(p=0;p<u;p++)_+=Math.pow(E[p]-S[p],2);if(_<i)break}return{rank:function(e){if(r.string(e))var t=s.filter(e)[0].id();else t=e.id();return S[f[t]]}}}};e.exports=i},function(e,t,n){"use strict";var r=n(0),i=n(1),o={degreeCentralityNormalized:function(e){e=e||{};var t=this.cy();if(null!=e.directed)var n=e.directed;else n=!1;var o=this.nodes(),a=o.length;if(n){var s={},l={},c=0,u=0;for(p=0;p<a;p++)h=o[p],g=this.degreeCentrality(i.extend({},e,{root:h})),c<g.indegree&&(c=g.indegree),u<g.outdegree&&(u=g.outdegree),s[h.id()]=g.indegree,l[h.id()]=g.outdegree;return{indegree:function(e){return 0==c?0:(e=r.string(e)?t.filter(e)[0].id():e.id(),s[e]/c)},outdegree:function(e){return 0==u?0:(e=r.string(e)?t.filter(e)[0].id():e.id(),l[e]/u)}}}for(var d={},f=0,p=0;p<a;p++){var h=o[p],g=this.degreeCentrality(i.extend({},e,{root:h}));f<g.degree&&(f=g.degree),d[h.id()]=g.degree}return{degree:function(e){return 0==f?0:(e=r.string(e)?t.filter(e)[0].id():e.id(),d[e]/f)}}},degreeCentrality:function(e){if(null!=(e=e||{})&&null!=e.root){var t=r.string(e.root)?this.filter(e.root)[0]:e.root[0];if(null!=e.weight&&r.fn(e.weight))var n=e.weight;else n=function(e){return 1};if(null!=e.directed)var i=e.directed;else i=!1;if(null!=e.alpha&&r.number(e.alpha))var o=e.alpha;else o=0;if(i){var a=t.connectedEdges('edge[target = "'+t.id()+'"]').intersection(this),s=t.connectedEdges('edge[source = "'+t.id()+'"]').intersection(this),l=a.length,c=s.length,u=0,d=0;for(g=0;g<a.length;g++)u+=n(a[g]);for(g=0;g<s.length;g++)d+=n(s[g]);return{indegree:Math.pow(l,1-o)*Math.pow(u,o),outdegree:Math.pow(c,1-o)*Math.pow(d,o)}}for(var f=t.connectedEdges().intersection(this),p=f.length,h=0,g=0;g<f.length;g++)h+=n(f[g]);return{degree:Math.pow(p,1-o)*Math.pow(h,o)}}}};o.dc=o.degreeCentrality,o.dcn=o.degreeCentralityNormalised=o.degreeCentralityNormalized,e.exports=o},function(e,t,n){"use strict";var r=n(0),i={closenessCentralityNormalized:function(e){e=e||{};var t=this.cy(),n=e.harmonic;void 0===n&&(n=!0);for(var i={},o=0,a=this.nodes(),s=this.floydWarshall({weight:e.weight,directed:e.directed}),l=0;l<a.length;l++){for(var c=0,u=0;u<a.length;u++)if(l!=u){var d=s.distance(a[l],a[u]);c+=n?1/d:d}n||(c=1/c),o<c&&(o=c),i[a[l].id()]=c}return{closeness:function(e){return 0==o?0:(e=r.string(e)?t.filter(e)[0].id():e.id(),i[e]/o)}}},closenessCentrality:function(e){if(null!=(e=e||{}).root){if(r.string(e.root))var t=this.filter(e.root)[0];else t=e.root[0];if(null!=e.weight&&r.fn(e.weight))var n=e.weight;else n=function(){return 1};if(null!=e.directed&&r.bool(e.directed))var i=e.directed;else i=!1;var o=e.harmonic;void 0===o&&(o=!0);for(var a=this.dijkstra({root:t,weight:n,directed:i}),s=0,l=this.nodes(),c=0;c<l.length;c++)if(l[c].id()!=t.id()){var u=a.distanceTo(l[c]);s+=o?1/u:u}return o?s:1/s}}};i.cc=i.closenessCentrality,i.ccn=i.closenessCentralityNormalised=i.closenessCentralityNormalized,e.exports=i},function(e,t,n){"use strict";var r=n(0),i=n(9),o={betweennessCentrality:function(e){var t,n;e=e||{},r.fn(e.weight)?(n=e.weight,t=!0):t=!1;for(var o=null!=e.directed&&e.directed,a=this._private.cy,s=this.nodes(),l={},c={},u=0,d=function(e,t){c[e]=t,t>u&&(u=t)},f=function(e){return c[e]},p=0;p<s.length;p++)l[w=(k=s[p]).id()]=o?k.outgoers().nodes():k.openNeighborhood().nodes(),d(w,0);for(var h=0;h<s.length;h++){var g=s[h].id(),v=[],m={},b={},y={},x=new i((function(e,t){return y[e]-y[t]}));for(p=0;p<s.length;p++){var w;m[w=s[p].id()]=[],b[w]=0,y[w]=1/0}for(b[g]=1,y[g]=0,x.push(g);!x.empty();){var k=x.pop();if(v.push(k),t)for(var A=0;A<l[k].length;A++){var E=l[k][A],S=a.getElementById(k),C=n(S.edgesTo(E).length>0?S.edgesTo(E)[0]:E.edgesTo(S)[0]);E=E.id(),y[E]>y[k]+C&&(y[E]=y[k]+C,x.nodes.indexOf(E)<0?x.push(E):x.updateItem(E),b[E]=0,m[E]=[]),y[E]==y[k]+C&&(b[E]=b[E]+b[k],m[E].push(k))}else for(A=0;A<l[k].length;A++)E=l[k][A].id(),y[E]==1/0&&(x.push(E),y[E]=y[k]+1),y[E]==y[k]+1&&(b[E]=b[E]+b[k],m[E].push(k))}var $={};for(p=0;p<s.length;p++)$[s[p].id()]=0;for(;v.length>0;)for(E=v.pop(),A=0;A<m[E].length;A++)$[k=m[E][A]]=$[k]+b[k]/b[E]*(1+$[E]),E!=s[h].id()&&d(E,f(E)+$[E])}var O={betweenness:function(e){return e=r.string(e)?a.filter(e).id():e.id(),f(e)},betweennessNormalized:function(e){return 0==u?0:(e=r.string(e)?a.filter(e).id():e.id(),f(e)/u)}};return O.betweennessNormalised=O.betweennessNormalized,O}};o.bc=o.betweennessCentrality,e.exports=o},function(e,t,n){"use strict";var r=n(4),i={animate:r.animate(),animation:r.animation(),animated:r.animated(),clearQueue:r.clearQueue(),delay:r.delay(),delayAnimation:r.delayAnimation(),stop:r.stop()};e.exports=i},function(e,t,n){"use strict";var r=n(1),i=n(44),o=n(2),a=n(0),s={animated:function(){return function(){var e=void 0!==this.length?this:[this];if(!(this._private.cy||this).styleEnabled())return!1;var t=e[0];return t?t._private.animation.current.length>0:void 0}},clearQueue:function(){return function(){var e=void 0!==this.length?this:[this];if(!(this._private.cy||this).styleEnabled())return this;for(var t=0;t<e.length;t++)e[t]._private.animation.queue=[];return this}},delay:function(){return function(e,t){return(this._private.cy||this).styleEnabled()?this.animate({delay:e,duration:e,complete:t}):this}},delayAnimation:function(){return function(e,t){return(this._private.cy||this).styleEnabled()?this.animation({delay:e,duration:e,complete:t}):this}},animation:function(){return function(e,t){var n=void 0!==this.length,s=n?this:[this],l=this._private.cy||this,c=!n,u=!c;if(!l.styleEnabled())return this;var d=l.style();if(e=r.assign({},e,t),0===Object.keys(e).length)return new i(s[0],e);switch(void 0===e.duration&&(e.duration=400),e.duration){case"slow":e.duration=600;break;case"fast":e.duration=200}if(u&&(e.style=d.getPropsList(e.style||e.css),e.css=void 0),u&&null!=e.renderedPosition){var f=e.renderedPosition,p=l.pan(),h=l.zoom();e.position=o.renderedToModelPosition(f,h,p)}if(c&&null!=e.panBy){var g=e.panBy,v=l.pan();e.pan={x:v.x+g.x,y:v.y+g.y}}var m=e.center||e.centre;if(c&&null!=m){var b=l.getCenterPan(m.eles,e.zoom);null!=b&&(e.pan=b)}if(c&&null!=e.fit){var y=e.fit,x=l.getFitViewport(y.eles||y.boundingBox,y.padding);null!=x&&(e.pan=x.pan,e.zoom=x.zoom)}if(c&&a.plainObject(e.zoom)){var w=l.getZoomedViewport(e.zoom);null!=w&&(w.zoomed&&(e.zoom=w.zoom),w.panned&&(e.pan=w.pan))}return new i(s[0],e)}},animate:function(){return function(e,t){var n=void 0!==this.length?this:[this];if(!(this._private.cy||this).styleEnabled())return this;t&&(e=r.extend({},e,t));for(var i=0;i<n.length;i++){var o=n[i],a=o.animated()&&(void 0===e.queue||e.queue);o.animation(e,a?{queue:!0}:void 0).play()}return this}},stop:function(){return function(e,t){var n=void 0!==this.length?this:[this],r=this._private.cy||this;if(!r.styleEnabled())return this;for(var i=0;i<n.length;i++){for(var o=n[i]._private,a=o.animation.current,s=0;s<a.length;s++){var l=a[s]._private;t&&(l.duration=0)}e&&(o.animation.queue=[]),t||(o.animation.current=[])}return r.notify({eles:this,type:"draw"}),this}}};e.exports=s},function(e,t,n){"use strict";var r=n(1),i=n(0),o=n(5),a=function(e,t,n){var o=this._private=r.extend({duration:1e3},t,n);o.target=e,o.style=o.style||o.css,o.started=!1,o.playing=!1,o.hooked=!1,o.applying=!1,o.progress=0,o.completes=[],o.frames=[],o.complete&&i.fn(o.complete)&&o.completes.push(o.complete),this.length=1,this[0]=this},s=a.prototype;r.extend(s,{instanceString:function(){return"animation"},hook:function(){var e=this._private;if(!e.hooked){var t=e.target._private.animation;(e.queue?t.queue:t.current).push(this),i.elementOrCollection(e.target)&&e.target.cy().addToAnimationPool(e.target),e.hooked=!0}return this},play:function(){var e=this._private;return 1===e.progress&&(e.progress=0),e.playing=!0,e.started=!1,e.stopped=!1,this.hook(),this},playing:function(){return this._private.playing},apply:function(){var e=this._private;return e.applying=!0,e.started=!1,e.stopped=!1,this.hook(),this},applying:function(){return this._private.applying},pause:function(){var e=this._private;return e.playing=!1,e.started=!1,this},stop:function(){var e=this._private;return e.playing=!1,e.started=!1,e.stopped=!0,this},rewind:function(){return this.progress(0)},fastforward:function(){return this.progress(1)},time:function(e){var t=this._private;return void 0===e?t.progress*t.duration:this.progress(e/t.duration)},progress:function(e){var t=this._private,n=t.playing;return void 0===e?t.progress:(n&&this.pause(),t.progress=e,t.started=!1,n&&this.play(),this)},completed:function(){return 1===this._private.progress},reverse:function(){var e=this._private,t=e.playing;t&&this.pause(),e.progress=1-e.progress,e.started=!1;var n=function(t,n){var r=e[t];null!=r&&(e[t]=e[n],e[n]=r)};if(n("zoom","startZoom"),n("pan","startPan"),n("position","startPosition"),e.style)for(var r=0;r<e.style.length;r++){var i=e.style[r],o=i.name,a=e.startStyle[o];e.startStyle[o]=i,e.style[r]=a}return t&&this.play(),this},promise:function(e){var t=this._private,n=void 0;switch(e){case"frame":n=t.frames;break;default:case"complete":case"completed":n=t.completes}return new o((function(e,t){n.push((function(){e()}))}))}}),s.complete=s.completed,e.exports=a},function(e,t,n){"use strict";var r=n(1),i=n(0),o={data:function(e){return e=r.extend({},{field:"data",bindingEvent:"data",allowBinding:!1,allowSetting:!1,allowGetting:!1,settingEvent:"data",settingTriggersEvent:!1,triggerFnName:"trigger",immutableKeys:{},updateStyle:!1,beforeGet:function(e){},beforeSet:function(e,t){},onSet:function(e){},canSet:function(e){return!0}},e),function(t,n){var r=e,o=void 0!==this.length,a=o?this:[this],s=o?this[0]:this;if(i.string(t)){if(r.allowGetting&&void 0===n){var l=void 0;return s&&(r.beforeGet(s),l=s._private[r.field][t]),l}if(r.allowSetting&&void 0!==n&&!r.immutableKeys[t]){var c=function(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}({},t,n);r.beforeSet(this,c);for(var u=0,d=a.length;u<d;u++){var f=a[u];r.canSet(f)&&(f._private[r.field][t]=n)}r.updateStyle&&this.updateStyle(),r.onSet(this),r.settingTriggersEvent&&this[r.triggerFnName](r.settingEvent)}}else if(r.allowSetting&&i.plainObject(t)){var p=t,h=void 0,g=void 0,v=Object.keys(p);r.beforeSet(this,p);for(var m=0;m<v.length;m++)if(g=p[h=v[m]],!r.immutableKeys[h])for(var b=0;b<a.length;b++){var y=a[b];r.canSet(y)&&(y._private[r.field][h]=g)}r.updateStyle&&this.updateStyle(),r.onSet(this),r.settingTriggersEvent&&this[r.triggerFnName](r.settingEvent)}else if(r.allowBinding&&i.fn(t)){var x=t;this.on(r.bindingEvent,x)}else if(r.allowGetting&&void 0===t){var w=void 0;return s&&(r.beforeGet(s),w=s._private[r.field]),w}return this}},removeData:function(e){return e=r.extend({},{field:"data",event:"data",triggerFnName:"trigger",triggerEvent:!1,immutableKeys:{}},e),function(t){var n=e,r=void 0!==this.length?this:[this];if(i.string(t)){for(var o=t.split(/\s+/),a=o.length,s=0;s<a;s++){var l=o[s];if(!i.emptyString(l)&&!n.immutableKeys[l])for(var c=0,u=r.length;c<u;c++)r[c]._private[n.field][l]=void 0}n.triggerEvent&&this[n.triggerFnName](n.event)}else if(void 0===t){for(var d=0,f=r.length;d<f;d++)for(var p=r[d]._private[n.field],h=Object.keys(p),g=0;g<h.length;g++){var v=h[g];!n.immutableKeys[v]&&(p[v]=void 0)}n.triggerEvent&&this[n.triggerFnName](n.event)}return this}}};e.exports=o},function(e,t,n){"use strict";var r=n(5),i={eventAliasesOn:function(e){var t=e;t.addListener=t.listen=t.bind=t.on,t.unlisten=t.unbind=t.off=t.removeListener,t.trigger=t.emit,t.pon=t.promiseOn=function(e,t){var n=this,i=Array.prototype.slice.call(arguments,0);return new r((function(e,t){var r=i.concat([function(t){n.off.apply(n,o),e(t)}]),o=r.concat([]);n.on.apply(n,r)}))}}};e.exports=i},function(e,t,n){"use strict";var r=n(8),i={classes:function(e){e=(e||"").match(/\S+/g)||[];for(var t=this,n=[],i=new r(e),o=function(e){var o=t[e],a=o._private,s=a.classes,l=!1;i.forEach((function(e){s.has(e)||(l=!0)})),l||s.forEach((function(e){i.has(e)||(l=!0)})),l&&(a.classes=new r(i),n.push(o))},a=0;a<t.length;a++)o(a);return n.length>0&&this.spawn(n).updateStyle().emit("class"),t},addClass:function(e){return this.toggleClass(e,!0)},hasClass:function(e){var t=this[0];return null!=t&&t._private.classes.has(e)},toggleClass:function(e,t){for(var n=e.match(/\S+/g)||[],r=[],i=0,o=this.length;i<o;i++)for(var a=this[i],s=!1,l=0;l<n.length;l++){var c=n[l],u=a._private.classes,d=u.has(c);t||void 0===t&&!d?(u.add(c),d||s||(r.push(a),s=!0)):(u.delete(c),d&&!s&&(r.push(a),s=!0))}return r.length>0&&this.spawn(r).updateStyle().emit("class"),this},removeClass:function(e){return this.toggleClass(e,!1)},flashClass:function(e,t){var n=this;if(null==t)t=250;else if(0===t)return n;return n.addClass(e),setTimeout((function(){n.removeClass(e)}),t),n}};e.exports=i},function(e,t,n){"use strict";n(0);var r=n(6),i={allAre:function(e){var t=new r(e);return this.every((function(e){return t.matches(e)}))},is:function(e){var t=new r(e);return this.some((function(e){return t.matches(e)}))},some:function(e,t){for(var n=0;n<this.length;n++)if(t?e.apply(t,[this[n],n,this]):e(this[n],n,this))return!0;return!1},every:function(e,t){for(var n=0;n<this.length;n++)if(!(t?e.apply(t,[this[n],n,this]):e(this[n],n,this)))return!1;return!0},same:function(e){return e=this.cy().collection(e),this.length===e.length&&this.every((function(t){return e.hasElementWithId(t.id())}))},anySame:function(e){return e=this.cy().collection(e),this.some((function(t){return e.hasElementWithId(t.id())}))},allAreNeighbors:function(e){e=this.cy().collection(e);var t=this.neighborhood();return e.every((function(e){return t.hasElementWithId(e.id())}))},contains:function(e){e=this.cy().collection(e);var t=this;return e.every((function(e){return t.hasElementWithId(e.id())}))}};i.allAreNeighbours=i.allAreNeighbors,i.has=i.contains,e.exports=i},function(e,t,n){"use strict";var r=n(1),i=n(50),o=n(10),a=function(e){for(var t=void 0,n=void 0,r=void 0,o=0;o<i.length;o++){var a=i[o],s=a.name,l=e.match(a.regexObj);if(null!=l){n=l,t=a,r=s;var c=l[0];e=e.substring(c.length);break}}return{expr:t,match:n,name:r,remaining:e}};e.exports={parse:function(e){var t=this._private.selectorText=e,n=this[0]=o();for(this.length=1,t=function(e){var t=e.match(/^\s+/);if(t){var n=t[0];e=e.substring(n.length)}return e}(t);;){var i=a(t);if(null==i.expr)return r.error("The selector `"+e+"`is invalid"),!1;var s=i.match.slice(1),l=i.expr.populate(this,n,s);if(!1===l)return!1;if(null!=l&&(n=l),(t=i.remaining).match(/^\s*$/))break}for(var c=0;c<this.length;c++){var u=this[c];if(null!=u.subject){for(;u.subject!==u;)if(null!=u.parent){var d=u.parent,f=u;f.parent=null,d.child=f,u=d}else{if(null==u.ancestor)return u.source||u.target||u.connectedNodes?(r.error("The selector `"+this.text()+"` can not contain a subject selector that applies to the source or target of an edge selector"),!1):(r.error("When adjusting references for the selector `"+this.text()+"`, neither parent nor ancestor was found"),!1);var p=u.ancestor,h=u;h.ancestor=null,p.descendant=h,u=p}this[c]=u.subject}}return!0}}},function(e,t,n){"use strict";var r=function(e,t){if(Array.isArray(e))return e;if(Symbol.iterator in Object(e))return function(e,t){var n=[],r=!0,i=!1,o=void 0;try{for(var a,s=e[Symbol.iterator]();!(r=(a=s.next()).done)&&(n.push(a.value),!t||n.length!==t);r=!0);}catch(e){i=!0,o=e}finally{try{!r&&s.return&&s.return()}finally{if(i)throw o}}return n}(e,t);throw new TypeError("Invalid attempt to destructure non-iterable instance")},i=n(15).stateSelectorRegex,o=n(51),a=n(1),s=n(10),l=function(e){return e.replace(new RegExp("\\\\("+o.metaChar+")","g"),(function(e,t){return t}))},c=function(e,t,n){t===e[e.length-1]&&(e[e.length-1]=n)},u=[{name:"group",query:!0,regex:"("+o.group+")",populate:function(e,t,n){var i=r(n,1)[0];t.group="*"===i?i:i+"s"}},{name:"state",query:!0,regex:i,populate:function(e,t,n){var i=r(n,1)[0];t.colonSelectors.push(i)}},{name:"id",query:!0,regex:"\\#("+o.id+")",populate:function(e,t,n){var i=r(n,1)[0];t.ids.push(l(i))}},{name:"className",query:!0,regex:"\\.("+o.className+")",populate:function(e,t,n){var i=r(n,1)[0];t.classes.push(l(i))}},{name:"dataExists",query:!0,regex:"\\[\\s*("+o.variable+")\\s*\\]",populate:function(e,t,n){var i=r(n,1)[0];t.data.push({field:l(i)})}},{name:"dataCompare",query:!0,regex:"\\[\\s*("+o.variable+")\\s*("+o.comparatorOp+")\\s*("+o.value+")\\s*\\]",populate:function(e,t,n){var i=r(n,3),a=i[0],s=i[1],c=i[2];c=null!=new RegExp("^"+o.string+"$").exec(c)?c.substring(1,c.length-1):parseFloat(c),t.data.push({field:l(a),operator:s,value:c})}},{name:"dataBool",query:!0,regex:"\\[\\s*("+o.boolOp+")\\s*("+o.variable+")\\s*\\]",populate:function(e,t,n){var i=r(n,2),o=i[0],a=i[1];t.data.push({field:l(a),operator:o})}},{name:"metaCompare",query:!0,regex:"\\[\\[\\s*("+o.meta+")\\s*("+o.comparatorOp+")\\s*("+o.number+")\\s*\\]\\]",populate:function(e,t,n){var i=r(n,3),o=i[0],a=i[1],s=i[2];t.meta.push({field:l(o),operator:a,value:parseFloat(s)})}},{name:"nextQuery",separator:!0,regex:o.separator,populate:function(e){var t=e[e.length++]=s();return e.currentSubject=null,t}},{name:"directedEdge",separator:!0,regex:o.directedEdge,populate:function(e,t){var n=s(),r=t,i=s();return n.group="edges",n.target=i,n.source=r,n.subject=e.currentSubject,c(e,t,n),i}},{name:"undirectedEdge",separator:!0,regex:o.undirectedEdge,populate:function(e,t){var n=s(),r=t,i=s();return n.group="edges",n.connectedNodes=[r,i],n.subject=e.currentSubject,c(e,t,n),i}},{name:"child",separator:!0,regex:o.child,populate:function(e,t){var n=s();return n.parent=t,n.subject=e.currentSubject,c(e,t,n),n}},{name:"descendant",separator:!0,regex:o.descendant,populate:function(e,t){var n=s();return n.ancestor=t,n.subject=e.currentSubject,c(e,t,n),n}},{name:"subject",modifier:!0,regex:o.subject,populate:function(e,t){if(null!=e.currentSubject&&t.subject!=t)return a.error("Redefinition of subject in selector `"+e.toString()+"`"),!1;e.currentSubject=t,t.subject=t,e[e.length-1].subject=t}}];u.forEach((function(e){return e.regexObj=new RegExp("^"+e.regex)})),e.exports=u},function(e,t,n){"use strict";var r={metaChar:"[\\!\\\"\\#\\$\\%\\&\\'\\(\\)\\*\\+\\,\\.\\/\\:\\;\\<\\=\\>\\?\\@\\[\\]\\^\\`\\{\\|\\}\\~]",comparatorOp:"=|\\!=|>|>=|<|<=|\\$=|\\^=|\\*=",boolOp:"\\?|\\!|\\^",string:"\"(?:\\\\\"|[^\"])*\"|'(?:\\\\'|[^'])*'",number:n(1).regex.number,meta:"degree|indegree|outdegree",separator:"\\s*,\\s*",descendant:"\\s+",child:"\\s+>\\s+",subject:"\\$",group:"node|edge|\\*",directedEdge:"\\s+->\\s+",undirectedEdge:"\\s+<->\\s+"};r.variable="(?:[\\w-]|(?:\\\\"+r.metaChar+"))+",r.value=r.string+"|"+r.number,r.className=r.variable,r.id=r.variable,function(){var e=void 0,t=void 0,n=void 0;for(e=r.comparatorOp.split("|"),n=0;n<e.length;n++)t=e[n],r.comparatorOp+="|@"+t;for(e=r.comparatorOp.split("|"),n=0;n<e.length;n++)(t=e[n]).indexOf("!")>=0||"="!==t&&(r.comparatorOp+="|\\!"+t)}(),e.exports=r},function(e,t,n){"use strict";var r=n(15).stateSelectorMatches,i=n(0),o=function(e,t){for(var n=!0,r=0;r<e[t.name].length;r++){var o=e[t.name][r],a=o.operator,s=o.value,l=o.field,c=void 0,u=t.fieldValue(l);if(null!=a&&null!=s){var d=i.string(u)||i.number(u)?""+u:"",f=""+s,p=!1;a.indexOf("@")>=0&&(d=d.toLowerCase(),f=f.toLowerCase(),a=a.replace("@",""),p=!0);var h=!1;a.indexOf("!")>=0&&(a=a.replace("!",""),h=!0),p&&(s=f.toLowerCase(),u=d.toLowerCase());var g=!1;switch(a){case"*=":c=d.indexOf(f)>=0;break;case"$=":c=d.indexOf(f,d.length-f.length)>=0;break;case"^=":c=0===d.indexOf(f);break;case"=":c=u===s;break;case">":g=!0,c=u>s;break;case">=":g=!0,c=u>=s;break;case"<":g=!0,c=u<s;break;case"<=":g=!0,c=u<=s;break;default:c=!1}!h||null==u&&g||(c=!c)}else if(null!=a)switch(a){case"?":c=!!u;break;case"!":c=!u;break;case"^":c=void 0===u}else c=void 0!==u;if(!c){n=!1;break}}return n},a=function(e,t,n){if(null!=e){var r=!1;if(!t)return!1;n=n();for(var i=0;i<n.length;i++)if(s(e,n[i])){r=!0;break}return r}return!0},s=function(e,t){if(e.groupOnly)return"*"===e.group||e.group===t.group();if(null!=e.group&&"*"!=e.group&&e.group!=t.group())return!1;var n=t.cy(),i=void 0,s=!0;for(i=0;i<e.colonSelectors.length;i++){var l=e.colonSelectors[i];if(!(s=r(l,t)))break}if(!s)return!1;var c=!0;for(i=0;i<e.ids.length;i++){var u=e.ids[i],d=t.id();if(!(c=c&&u==d))break}if(!c)return!1;var f=!0;for(i=0;i<e.classes.length;i++){var p=e.classes[i];if(!(f=f&&t.hasClass(p)))break}if(!f)return!1;if(!o(e,{name:"data",fieldValue:function(e){return t.data(e)}}))return!1;if(!o(e,{name:"meta",fieldValue:function(e){return t[e]()}}))return!1;if(null!=e.collection&&!e.collection.hasElementWithId(t.id()))return!1;if(null!=e.filter&&t.collection().some(e.filter))return!1;var h=n.hasCompoundNodes(),g=function(){return t.source()},v=function(){return t.target()};if(!a(e.parent,h,(function(){return t.parent()})))return!1;if(!a(e.ancestor,h,(function(){return t.parents()})))return!1;if(!a(e.child,h,(function(){return t.children()})))return!1;if(!a(e.descendant,h,(function(){return t.descendants()})))return!1;if(!a(e.source,!0,g))return!1;if(!a(e.target,!0,v))return!1;if(e.connectedNodes){var m=e.connectedNodes[0],b=e.connectedNodes[1];if(a(m,!0,g)&&a(b,!0,v));else if(!a(m,!0,v)||!a(b,!0,g))return!1}return!0};e.exports={matches:function(e){if(this.invalid())return!1;for(var t=0;t<this.length;t++){var n=this[t];if(s(n,e))return!0}return!1},filter:function(e){var t=this,n=e.cy();if(t.invalid())return n.collection();if(1===t.length&&1===t[0].length&&1===t[0].ids.length)return e.getElementById(t[0].ids[0]).collection();var r=function(e){for(var n=0;n<t.length;n++){var r=t[n];if(s(r,e))return!0}return!1};return null==t.text()&&(r=function(){return!0}),e.filter(r)}}},function(e,t,n){"use strict";var r=n(8),i={parent:function(e){var t=[];if(1===this.length){var n=this[0]._private.parent;if(n)return n}for(var r=0;r<this.length;r++){var i=this[r]._private.parent;i&&t.push(i)}return this.spawn(t,{unique:!0}).filter(e)},parents:function(e){for(var t=[],n=this.parent();n.nonempty();){for(var r=0;r<n.length;r++){var i=n[r];t.push(i)}n=n.parent()}return this.spawn(t,{unique:!0}).filter(e)},commonAncestors:function(e){for(var t=void 0,n=0;n<this.length;n++){var r=this[n].parents();t=(t=t||r).intersect(r)}return t.filter(e)},orphans:function(e){return this.stdFilter((function(e){return e.isOrphan()})).filter(e)},nonorphans:function(e){return this.stdFilter((function(e){return e.isChild()})).filter(e)},children:function(e){for(var t=[],n=0;n<this.length;n++){var r=this[n];t=t.concat(r._private.children)}return this.spawn(t,{unique:!0}).filter(e)},siblings:function(e){return this.parent().children().not(this).filter(e)},isParent:function(){var e=this[0];if(e)return e.isNode()&&0!==e._private.children.length},isChildless:function(){var e=this[0];if(e)return e.isNode()&&0===e._private.children.length},isChild:function(){var e=this[0];if(e)return e.isNode()&&null!=e._private.parent},isOrphan:function(){var e=this[0];if(e)return e.isNode()&&null==e._private.parent},descendants:function(e){var t=[];return function e(n){for(var r=0;r<n.length;r++){var i=n[r];t.push(i),i.children().nonempty()&&e(i.children())}}(this.children()),this.spawn(t,{unique:!0}).filter(e)}};function o(e,t,n,i){for(var o=[],a=new r,s=e.cy().hasCompoundNodes(),l=0;l<e.length;l++){var c=e[l];n?o.push(c):s&&i(o,a,c)}for(;o.length>0;){var u=o.shift();t(u),a.add(u.id()),s&&i(o,a,u)}return e}function a(e,t,n){if(n.isParent())for(var r=n._private.children,i=0;i<r.length;i++){var o=r[i];t.has(o.id())||e.push(o)}}function s(e,t,n){if(n.isChild()){var r=n._private.parent;t.has(r.id())||e.push(r)}}function l(e,t,n){s(e,t,n),a(e,t,n)}i.forEachDown=function(e){var t=!(arguments.length>1&&void 0!==arguments[1])||arguments[1];return o(this,e,t,a)},i.forEachUp=function(e){var t=!(arguments.length>1&&void 0!==arguments[1])||arguments[1];return o(this,e,t,s)},i.forEachUpAndDown=function(e){var t=!(arguments.length>1&&void 0!==arguments[1])||arguments[1];return o(this,e,t,l)},i.ancestors=i.parents,e.exports=i},function(e,t,n){"use strict";var r,i=n(4),o=void 0;(o=r={data:i.data({field:"data",bindingEvent:"data",allowBinding:!0,allowSetting:!0,settingEvent:"data",settingTriggersEvent:!0,triggerFnName:"trigger",allowGetting:!0,immutableKeys:{id:!0,source:!0,target:!0,parent:!0},updateStyle:!0}),removeData:i.removeData({field:"data",event:"data",triggerFnName:"trigger",triggerEvent:!0,immutableKeys:{id:!0,source:!0,target:!0,parent:!0},updateStyle:!0}),scratch:i.data({field:"scratch",bindingEvent:"scratch",allowBinding:!0,allowSetting:!0,settingEvent:"scratch",settingTriggersEvent:!0,triggerFnName:"trigger",allowGetting:!0,updateStyle:!0}),removeScratch:i.removeData({field:"scratch",event:"scratch",triggerFnName:"trigger",triggerEvent:!0,updateStyle:!0}),rscratch:i.data({field:"rscratch",allowBinding:!1,allowSetting:!0,settingTriggersEvent:!1,allowGetting:!0}),removeRscratch:i.removeData({field:"rscratch",triggerEvent:!1}),id:function(){var e=this[0];if(e)return e._private.data.id}}).attr=o.data,o.removeAttr=o.removeData,e.exports=r},function(e,t,n){"use strict";var r=n(1),i={};function o(e){return function(t){if(void 0===t&&(t=!0),0!==this.length&&this.isNode()&&!this.removed()){for(var n=0,r=this[0],i=r._private.edges,o=0;o<i.length;o++){var a=i[o];!t&&a.isLoop()||(n+=e(r,a))}return n}}}function a(e,t){return function(n){for(var r=void 0,i=this.nodes(),o=0;o<i.length;o++){var a=i[o][e](n);void 0===a||void 0!==r&&!t(a,r)||(r=a)}return r}}r.extend(i,{degree:o((function(e,t){return t.source().same(t.target())?2:1})),indegree:o((function(e,t){return t.target().same(e)?1:0})),outdegree:o((function(e,t){return t.source().same(e)?1:0}))}),r.extend(i,{minDegree:a("degree",(function(e,t){return e<t})),maxDegree:a("degree",(function(e,t){return e>t})),minIndegree:a("indegree",(function(e,t){return e<t})),maxIndegree:a("indegree",(function(e,t){return e>t})),minOutdegree:a("outdegree",(function(e,t){return e<t})),maxOutdegree:a("outdegree",(function(e,t){return e>t}))}),r.extend(i,{totalDegree:function(e){for(var t=0,n=this.nodes(),r=0;r<n.length;r++)t+=n[r].degree(e);return t}}),e.exports=i},function(e,t,n){"use strict";var r=n(1),i=n(57),o=n(58),a=n(59),s=n(60);e.exports=r.assign({},i,o,a,s)},function(e,t,n){"use strict";var r,i=n(4),o=n(0),a=n(2),s=void 0,l=function(e,t){for(var n=0;n<e.length;n++){var r=e[n];if(r.isParent()&&!r.locked()){var i=r._private.position,o={x:t.x-i.x,y:t.y-i.y};e.children().shift(o)}}};(s=r={position:i.data({field:"position",bindingEvent:"position",allowBinding:!0,allowSetting:!0,settingEvent:"position",settingTriggersEvent:!0,triggerFnName:"emitAndNotify",allowGetting:!0,validKeys:["x","y"],beforeGet:function(e){e.updateCompoundBounds()},beforeSet:l,onSet:function(e){e.dirtyCompoundBoundsCache()},canSet:function(e){return!e.locked()}}),silentPosition:i.data({field:"position",bindingEvent:"position",allowBinding:!1,allowSetting:!0,settingEvent:"position",settingTriggersEvent:!1,triggerFnName:"trigger",allowGetting:!1,validKeys:["x","y"],beforeSet:l,onSet:function(e){e.dirtyCompoundBoundsCache()},canSet:function(e){return!e.locked()}}),positions:function(e,t){if(o.plainObject(e))t?this.silentPosition(e):this.position(e);else if(o.fn(e)){var n=e,r=this.cy();r.startBatch();for(var i=0;i<this.length;i++){var a,s=this[i];(a=n(s,i))&&(t?s.silentPosition(a):s.position(a))}r.endBatch()}return this},silentPositions:function(e){return this.positions(e,!0)},shift:function(e,t){var n=void 0;if(o.plainObject(e)?n=e:o.string(e)&&o.number(t)&&((n={x:0,y:0})[e]=t),null!=n)for(var r=0;r<this.length;r++){var i=this[r],a=i.position();i.position({x:a.x+n.x,y:a.y+n.y})}return this},renderedPosition:function(e,t){var n=this[0],r=this.cy(),i=r.zoom(),s=r.pan(),l=o.plainObject(e)?e:void 0,c=void 0!==l||void 0!==t&&o.string(e);if(n&&n.isNode()){if(!c){var u=n.position();return l=a.modelToRenderedPosition(u,i,s),void 0===e?l:l[e]}for(var d=0;d<this.length;d++){var f=this[d];void 0!==t?f.position(e,(t-s[e])/i):void 0!==l&&f.position(a.renderedToModelPosition(l,i,s))}}else if(!c)return;return this},relativePosition:function(e,t){var n=this[0],r=this.cy(),i=o.plainObject(e)?e:void 0,a=void 0!==i||void 0!==t&&o.string(e),s=r.hasCompoundNodes();if(n&&n.isNode()){if(!a){var l=n.position(),c=s?n.parent():null,u=c&&c.length>0,d=u;u&&(c=c[0]);var f=d?c.position():{x:0,y:0};return i={x:l.x-f.x,y:l.y-f.y},void 0===e?i:i[e]}for(var p=0;p<this.length;p++){var h=this[p],g=s?h.parent():null,v=g&&g.length>0,m=v;v&&(g=g[0]);var b=m?g.position():{x:0,y:0};void 0!==t?h.position(e,t+b[e]):void 0!==i&&h.position({x:i.x+b.x,y:i.y+b.y})}}else if(!a)return;return this}}).modelPosition=s.point=s.position,s.modelPositions=s.points=s.positions,s.renderedPoint=s.renderedPosition,s.relativePoint=s.relativePosition,e.exports=r},function(e,t,n){"use strict";var r=n(0),i=n(1),o=n(2),a=void 0,s=void 0;a=s={},s.renderedBoundingBox=function(e){var t=this.boundingBox(e),n=this.cy(),r=n.zoom(),i=n.pan(),o=t.x1*r+i.x,a=t.x2*r+i.x,s=t.y1*r+i.y,l=t.y2*r+i.y;return{x1:o,x2:a,y1:s,y2:l,w:a-o,h:l-s}},s.dirtyCompoundBoundsCache=function(){var e=this.cy();return e.styleEnabled()&&e.hasCompoundNodes()?(this.forEachUp((function(e){e._private.compoundBoundsClean=!1,e.isParent()&&e.emit("bounds")})),this):this},s.updateCompoundBounds=function(){var e=this.cy();if(!e.styleEnabled()||!e.hasCompoundNodes())return this;if(e.batching())return this;var t=[];function n(e){if(e.isParent()){var n=e._private,r=e.children(),i="include"===e.pstyle("compound-sizing-wrt-labels").value,o={width:{val:e.pstyle("min-width").pfValue,left:e.pstyle("min-width-bias-left"),right:e.pstyle("min-width-bias-right")},height:{val:e.pstyle("min-height").pfValue,top:e.pstyle("min-height-bias-top"),bottom:e.pstyle("min-height-bias-bottom")}},a=r.boundingBox({includeLabels:i,includeOverlays:!1,useCache:!1}),s=n.position;0!==a.w&&0!==a.h||((a={w:e.pstyle("width").pfValue,h:e.pstyle("height").pfValue}).x1=s.x-a.w/2,a.x2=s.x+a.w/2,a.y1=s.y-a.h/2,a.y2=s.y+a.h/2);var l=o.width.left.value;"px"===o.width.left.units&&o.width.val>0&&(l=100*l/o.width.val);var c=o.width.right.value;"px"===o.width.right.units&&o.width.val>0&&(c=100*c/o.width.val);var u=o.height.top.value;"px"===o.height.top.units&&o.height.val>0&&(u=100*u/o.height.val);var d=o.height.bottom.value;"px"===o.height.bottom.units&&o.height.val>0&&(d=100*d/o.height.val);var f=b(o.width.val-a.w,l,c),p=f.biasDiff,h=f.biasComplementDiff,g=b(o.height.val-a.h,u,d),v=g.biasDiff,m=g.biasComplementDiff;n.autoPadding=function(e,t,n,r){if("%"!==n.units)return"px"===n.units?n.pfValue:0;switch(r){case"width":return e>0?n.pfValue*e:0;case"height":return t>0?n.pfValue*t:0;case"average":return e>0&&t>0?n.pfValue*(e+t)/2:0;case"min":return e>0&&t>0?e>t?n.pfValue*t:n.pfValue*e:0;case"max":return e>0&&t>0?e>t?n.pfValue*e:n.pfValue*t:0;default:return 0}}(a.w,a.h,e.pstyle("padding"),e.pstyle("padding-relative-to").value),n.autoWidth=Math.max(a.w,o.width.val),s.x=(-p+a.x1+a.x2+h)/2,n.autoHeight=Math.max(a.h,o.height.val),s.y=(-v+a.y1+a.y2+m)/2,t.push(e)}function b(e,t,n){var r=0,i=0,o=t+n;return e>0&&o>0&&(r=t/o*e,i=n/o*e),{biasDiff:r,biasComplementDiff:i}}}for(var r=0;r<this.length;r++){var i=this[r],o=i._private;o.compoundBoundsClean||(n(i),e._private.batchingStyle||(o.compoundBoundsClean=!0))}return this};var l=function(e){return e===1/0||e===-1/0?0:e},c=function(e,t,n,r,i){r-t!=0&&i-n!=0&&null!=t&&null!=n&&null!=r&&null!=i&&(e.x1=t<e.x1?t:e.x1,e.x2=r>e.x2?r:e.x2,e.y1=n<e.y1?n:e.y1,e.y2=i>e.y2?i:e.y2)},u=function(e,t,n){return i.getPrefixedProperty(e,t,n)},d=function(e,t,n){if(!t.cy().headless()){var r=t._private.rstyle,i=r.arrowWidth/2,o=void 0,a=void 0;"none"!==t.pstyle(n+"-arrow-shape").value&&("source"===n?(o=r.srcX,a=r.srcY):"target"===n?(o=r.tgtX,a=r.tgtY):(o=r.midX,a=r.midY),c(e,o-i,a-i,o+i,a+i))}},f=function(e,t,n){if(!t.cy().headless()){var r=void 0;r=n?n+"-":"";var i=t._private,o=i.rstyle;if(t.pstyle(r+"label").strValue){var a=t.pstyle("text-halign"),s=t.pstyle("text-valign"),l=u(o,"labelWidth",n),d=u(o,"labelHeight",n),f=u(o,"labelX",n),p=u(o,"labelY",n),h=t.pstyle(r+"text-margin-x").pfValue,g=t.pstyle(r+"text-margin-y").pfValue,v=t.isEdge(),m=t.pstyle(r+"text-rotation"),b=t.pstyle("text-outline-width").pfValue,y=t.pstyle("text-border-width").pfValue/2,x=t.pstyle("text-background-padding").pfValue,w=d+2*x,k=l+2*x,A=k/2,E=w/2,S=void 0,C=void 0,$=void 0,O=void 0;if(v)S=f-A,C=f+A,$=p-E,O=p+E;else{switch(a.value){case"left":S=f-k,C=f;break;case"center":S=f-A,C=f+A;break;case"right":S=f,C=f+k}switch(s.value){case"top":$=p-w,O=p;break;case"center":$=p-E,O=p+E;break;case"bottom":$=p,O=p+w}}var _=v&&"autorotate"===m.strValue,T=null!=m.pfValue&&0!==m.pfValue;if(_||T){var j=_?u(i.rstyle,"labelAngle",n):m.pfValue,P=Math.cos(j),D=Math.sin(j),R=function(e,t){return{x:(e-=f)*P-(t-=p)*D+f,y:e*D+t*P+p}},I=R(S,$),N=R(S,O),M=R(C,$),z=R(C,O);S=Math.min(I.x,N.x,M.x,z.x),C=Math.max(I.x,N.x,M.x,z.x),$=Math.min(I.y,N.y,M.y,z.y),O=Math.max(I.y,N.y,M.y,z.y)}S+=h-Math.max(b,y),C+=h+Math.max(b,y),$+=g-Math.max(b,y),O+=g+Math.max(b,y),c(e,S,$,C,O)}return e}},p=function(e){return e?"t":"f"},h=function(e){var t="";return t+=p(e.incudeNodes),t+=p(e.includeEdges),t+=p(e.includeLabels),t+=p(e.includeOverlays)},g=function(e,t){var n=e._private,r=void 0,i=e.cy().headless(),a=t===v?m:h(t);return t.useCache&&!i&&n.bbCache&&n.bbCache[a]?r=n.bbCache[a]:(r=function(e,t){var n=e._private.cy,r=n.styleEnabled(),i=n.headless(),a={x1:1/0,y1:1/0,x2:-1/0,y2:-1/0},s=e._private,u=r?e.pstyle("display").value:"element",p=e.isNode(),h=e.isEdge(),g=void 0,v=void 0,m=void 0,b=void 0,y=void 0,x=void 0,w="none"!==u;if(w){var k=0;r&&t.includeOverlays&&0!==e.pstyle("overlay-opacity").value&&(k=e.pstyle("overlay-padding").value);var A=0;if(r&&(A=e.pstyle("width").pfValue/2),p&&t.includeNodes){var E=e.position();y=E.x,x=E.y;var S=e.outerWidth()/2,C=e.outerHeight()/2;c(a,g=y-S-k,m=x-C-k,v=y+S+k,b=x+C+k)}else if(h&&t.includeEdges){var $=s.rstyle||{};if(r&&!i&&(g=Math.min($.srcX,$.midX,$.tgtX),v=Math.max($.srcX,$.midX,$.tgtX),m=Math.min($.srcY,$.midY,$.tgtY),b=Math.max($.srcY,$.midY,$.tgtY),c(a,g-=A,m-=A,v+=A,b+=A)),r&&!i&&"haystack"===e.pstyle("curve-style").strValue){var O=$.haystackPts||[];if(g=O[0].x,m=O[0].y,g>(v=O[1].x)){var _=g;g=v,v=_}if(m>(b=O[1].y)){var T=m;m=b,b=T}c(a,g-A,m-A,v+A,b+A)}else{for(var j=$.bezierPts||$.linePts||[],P=0;P<j.length;P++){var D=j[P];g=D.x-A,v=D.x+A,m=D.y-A,b=D.y+A,c(a,g,m,v,b)}if(0===j.length){var R=e.source().position(),I=e.target().position();if((g=R.x)>(v=I.x)){var N=g;g=v,v=N}if((m=R.y)>(b=I.y)){var M=m;m=b,b=M}c(a,g-=A,m-=A,v+=A,b+=A)}}}if(r&&t.includeEdges&&h&&(d(a,e,"mid-source"),d(a,e,"mid-target"),d(a,e,"source"),d(a,e,"target")),r&&"yes"===e.pstyle("ghost").value){var z=e.pstyle("ghost-offset-x").pfValue,L=e.pstyle("ghost-offset-y").pfValue;c(a,a.x1+z,a.y1+L,a.x2+z,a.y2+L)}r&&(g=a.x1,v=a.x2,m=a.y1,b=a.y2,c(a,g-k,m-k,v+k,b+k)),r&&t.includeLabels&&(f(a,e,null),h&&(f(a,e,"source"),f(a,e,"target")))}return a.x1=l(a.x1),a.y1=l(a.y1),a.x2=l(a.x2),a.y2=l(a.y2),a.w=l(a.x2-a.x1),a.h=l(a.y2-a.y1),a.w>0&&a.h>0&&w&&o.expandBoundingBox(a,1),a}(e,t),i||(n.bbCache=n.bbCache||{},n.bbCache[a]=r)),r},v={includeNodes:!0,includeEdges:!0,includeLabels:!0,includeOverlays:!0,useCache:!0},m=h(v);function b(e){return{includeNodes:i.default(e.includeNodes,v.includeNodes),includeEdges:i.default(e.includeEdges,v.includeEdges),includeLabels:i.default(e.includeLabels,v.includeLabels),includeOverlays:i.default(e.includeOverlays,v.includeOverlays),useCache:i.default(e.useCache,v.useCache)}}s.boundingBox=function(e){if(1===this.length&&this[0]._private.bbCache&&(void 0===e||void 0===e.useCache||!0===e.useCache))return e=void 0===e?v:b(e),g(this[0],e);var t={x1:1/0,y1:1/0,x2:-1/0,y2:-1/0},n=b(e=e||i.staticEmptyObject()),r=this.cy().styleEnabled();r&&this.recalculateRenderedStyle(n.useCache),this.updateCompoundBounds();for(var o,a,s={},u=0;u<this.length;u++){var d=this[u];if(r&&d.isEdge()&&"bezier"===d.pstyle("curve-style").strValue&&!s[d.id()]){for(var f=d.parallelEdges(),p=0;p<f.length;p++)s[f[p].id()]=!0;f.recalculateRenderedStyle(n.useCache)}o=t,a=g(d,n),c(o,a.x1,a.y1,a.x2,a.y2)}return t.x1=l(t.x1),t.y1=l(t.y1),t.x2=l(t.x2),t.y2=l(t.y2),t.w=l(t.x2-t.x1),t.h=l(t.y2-t.y1),t},s.boundingBoxAt=function(e){var t=this.nodes();if(r.plainObject(e)){var n=e;e=function(){return n}}for(var i=0;i<t.length;i++){var o=t[i],a=o._private,s=a.position,l=e.call(o,o,i);a.bbAtOldPos={x:s.x,y:s.y},l&&(s.x=l.x,s.y=l.y)}this.emit("dirty"),t.dirtyCompoundBoundsCache().updateCompoundBounds();for(var c=this.boundingBox({useCache:!1}),u=0;u<t.length;u++){var d=t[u],f=d._private,p=d._private.position,h=f.bbAtOldPos;p.x=h.x,p.y=h.y}return t.dirtyCompoundBoundsCache(),this.emit("dirty"),c},a.boundingbox=a.boundingBox,a.renderedBoundingbox=a.renderedBoundingBox,e.exports=s},function(e,t,n){"use strict";var r=n(1),i=void 0,o=void 0;i=o={};var a=function(e){e.uppercaseName=r.capitalize(e.name),e.autoName="auto"+e.uppercaseName,e.labelName="label"+e.uppercaseName,e.outerName="outer"+e.uppercaseName,e.uppercaseOuterName=r.capitalize(e.outerName),i[e.name]=function(){var t=this[0],n=t._private,r=n.cy._private.styleEnabled;if(t){if(!r)return 1;if(t.isParent())return t.updateCompoundBounds(),n[e.autoName]||0;var i=t.pstyle(e.name);switch(i.strValue){case"label":return t.recalculateRenderedStyle(),n.rstyle[e.labelName]||0;default:return i.pfValue}}},i["outer"+e.uppercaseName]=function(){var t=this[0],n=t._private.cy._private.styleEnabled;if(t)return n?t[e.name]()+t.pstyle("border-width").pfValue+2*t.padding():1},i["rendered"+e.uppercaseName]=function(){var t=this[0];if(t)return t[e.name]()*this.cy().zoom()},i["rendered"+e.uppercaseOuterName]=function(){var t=this[0];if(t)return t[e.outerName]()*this.cy().zoom()}};a({name:"width"}),a({name:"height"}),o.padding=function(){var e=this[0],t=e._private;return e.isParent()?(e.updateCompoundBounds(),void 0!==t.autoPadding?t.autoPadding:e.pstyle("padding").pfValue):e.pstyle("padding").pfValue},e.exports=o},function(e,t,n){"use strict";var r=function(e,t){if(e.isEdge())return t(e.renderer())};e.exports={controlPoints:function(){var e=this;return r(this,(function(t){return t.getControlPoints(e)}))},segmentPoints:function(){var e=this;return r(this,(function(t){return t.getSegmentPoints(e)}))},sourceEndpoint:function(){var e=this;return r(this,(function(t){return t.getSourceEndpoint(e)}))},targetEndpoint:function(){var e=this;return r(this,(function(t){return t.getTargetEndpoint(e)}))},midpoint:function(){var e=this;return r(this,(function(t){return t.getEdgeMidpoint(e)}))}}},function(e,t,n){"use strict";var r=n(11),i=n(4),o=n(0),a=n(1),s=n(6),l={qualifierCompare:function(e,t){return null==e||null==t?null==e&&null==t:e.sameText(t)},eventMatches:function(e,t,n){var r=t.qualifier;return null==r||e!==n.target&&o.element(n.target)&&r.matches(n.target)},eventFields:function(e){return{cy:e.cy(),target:e}},callbackContext:function(e,t,n){return null!=t.qualifier?n.target:e},beforeEmit:function(e,t){t.conf&&t.conf.once&&t.conf.onceCollection.removeListener(t.event,t.qualifier,t.callback)},bubble:function(){return!0},parent:function(e){return e.isChild()?e.parent():e.cy()}},c=function(e){return o.string(e)?new s(e):e},u={createEmitter:function(){for(var e=0;e<this.length;e++){var t=this[e],n=t._private;n.emitter||(n.emitter=new r(a.assign({context:t},l)))}return this},emitter:function(){return this._private.emitter},on:function(e,t,n){for(var r=0;r<this.length;r++)this[r].emitter().on(e,c(t),n);return this},removeListener:function(e,t,n){for(var r=0;r<this.length;r++)this[r].emitter().removeListener(e,c(t),n);return this},one:function(e,t,n){for(var r=0;r<this.length;r++)this[r].emitter().one(e,c(t),n);return this},once:function(e,t,n){for(var r=0;r<this.length;r++)this[r].emitter().on(e,c(t),n,{once:!0,onceCollection:this})},emit:function(e,t){for(var n=0;n<this.length;n++)this[n].emitter().emit(e,t);return this},emitAndNotify:function(e,t){if(0!==this.length)return this.cy().notify({type:e,eles:this}),this.emit(e,t),this}};i.eventAliasesOn(u),e.exports=u},function(e,t,n){"use strict";var r=n(0),i=n(6),o={nodes:function(e){return this.filter((function(e){return e.isNode()})).filter(e)},edges:function(e){return this.filter((function(e){return e.isEdge()})).filter(e)},filter:function(e,t){if(void 0===e)return this;if(r.string(e)||r.elementOrCollection(e))return new i(e).filter(this);if(r.fn(e)){for(var n=this.spawn(),o=0;o<this.length;o++){var a=this[o];(t?e.apply(t,[a,o,this]):e(a,o,this))&&n.merge(a)}return n}return this.spawn()},not:function(e){if(e){r.string(e)&&(e=this.filter(e));for(var t=[],n=e._private.map,i=0;i<this.length;i++){var o=this[i];n.has(o.id())||t.push(o)}return this.spawn(t)}return this},absoluteComplement:function(){return this.cy().mutableElements().not(this)},intersect:function(e){if(r.string(e)){var t=e;return this.filter(t)}for(var n=[],i=e,o=this.length<e.length,a=o?i._private.map:this._private.map,s=o?this:i,l=0;l<s.length;l++){var c=s[l]._private.data.id,u=a.get(c);u&&n.push(u.ele)}return this.spawn(n)},xor:function(e){var t=this._private.cy;r.string(e)&&(e=t.$(e));var n=[],i=e,o=function(e,t){for(var r=0;r<e.length;r++){var i=e[r],o=i._private.data.id;t.hasElementWithId(o)||n.push(i)}};return o(this,i),o(i,this),this.spawn(n)},diff:function(e){var t=this._private.cy;r.string(e)&&(e=t.$(e));var n=[],i=[],o=[],a=e,s=function(e,t,n){for(var r=0;r<e.length;r++){var i=e[r],a=i._private.data.id;t.hasElementWithId(a)?o.push(i):n.push(i)}};return s(this,a,n),s(a,this,i),{left:this.spawn(n,{unique:!0}),right:this.spawn(i,{unique:!0}),both:this.spawn(o,{unique:!0})}},add:function(e){var t=this._private.cy;if(!e)return this;if(r.string(e)){var n=e;e=t.mutableElements().filter(n)}for(var i=[],o=0;o<this.length;o++)i.push(this[o]);for(var a=this._private.map,s=0;s<e.length;s++){var l=!a.has(e[s].id());l&&i.push(e[s])}return this.spawn(i)},merge:function(e){var t=this._private,n=t.cy;if(!e)return this;if(e&&r.string(e)){var i=e;e=n.mutableElements().filter(i)}for(var o=t.map,a=0;a<e.length;a++){var s=e[a],l=s._private.data.id;if(o.has(l)){var c=o.get(l).index;this[c]=s,o.set(l,{ele:s,index:c})}else{var u=this.length++;this[u]=s,o.set(l,{ele:s,index:u})}}return this},unmergeOne:function(e){e=e[0];var t=this._private,n=e._private.data.id,r=t.map,i=r.get(n);if(!i)return this;var o=i.index;this[o]=void 0,r.delete(n);var a=o===this.length-1;if(this.length>1&&!a){var s=this.length-1,l=this[s],c=l._private.data.id;this[s]=void 0,this[o]=l,r.set(c,{ele:l,index:o})}return this.length--,this},unmerge:function(e){var t=this._private.cy;if(!e)return this;if(e&&r.string(e)){var n=e;e=t.mutableElements().filter(n)}for(var i=0;i<e.length;i++)this.unmergeOne(e[i]);return this},map:function(e,t){for(var n=[],r=0;r<this.length;r++){var i=this[r],o=t?e.apply(t,[i,r,this]):e(i,r,this);n.push(o)}return n},reduce:function(e,t){for(var n=t,r=0;r<this.length;r++)n=e(n,this[r],r,this);return n},max:function(e,t){for(var n=-1/0,r=void 0,i=0;i<this.length;i++){var o=this[i],a=t?e.apply(t,[o,i,this]):e(o,i,this);a>n&&(n=a,r=o)}return{value:n,ele:r}},min:function(e,t){for(var n=1/0,r=void 0,i=0;i<this.length;i++){var o=this[i],a=t?e.apply(t,[o,i,this]):e(o,i,this);a<n&&(n=a,r=o)}return{value:n,ele:r}}},a=o;a.u=a["|"]=a["+"]=a.union=a.or=a.add,a["\\"]=a["!"]=a["-"]=a.difference=a.relativeComplement=a.subtract=a.not,a.n=a["&"]=a["."]=a.and=a.intersection=a.intersect,a["^"]=a["(+)"]=a["(-)"]=a.symmetricDifference=a.symdiff=a.xor,a.fnFilter=a.filterFn=a.stdFilter=a.filter,a.complement=a.abscomp=a.absoluteComplement,e.exports=o},function(e,t,n){"use strict";e.exports={isNode:function(){return"nodes"===this.group()},isEdge:function(){return"edges"===this.group()},isLoop:function(){return this.isEdge()&&this.source().id()===this.target().id()},isSimple:function(){return this.isEdge()&&this.source().id()!==this.target().id()},group:function(){var e=this[0];if(e)return e._private.group}}},function(e,t,n){"use strict";var r=n(0),i=n(17),o=n(1),a={forEach:function(e,t){if(r.fn(e))for(var n=0;n<this.length;n++){var i=this[n];if(!1===(t?e.apply(t,[i,n,this]):e(i,n,this)))break}return this},toArray:function(){for(var e=[],t=0;t<this.length;t++)e.push(this[t]);return e},slice:function(e,t){var n=[],r=this.length;null==t&&(t=r),null==e&&(e=0),e<0&&(e=r+e),t<0&&(t=r+t);for(var i=e;i>=0&&i<t&&i<r;i++)n.push(this[i]);return this.spawn(n)},size:function(){return this.length},eq:function(e){return this[e]||this.spawn()},first:function(){return this[0]||this.spawn()},last:function(){return this[this.length-1]||this.spawn()},empty:function(){return 0===this.length},nonempty:function(){return!this.empty()},sort:function(e){if(!r.fn(e))return this;var t=this.toArray().sort(e);return this.spawn(t)},sortByZIndex:function(){return this.sort(i)},zDepth:function(){var e=this[0];if(e){var t=e._private;if("nodes"===t.group){var n=t.data.parent?e.parents().size():0;return e.isParent()?n:o.MAX_INT-1}var r=t.source,i=t.target,a=r.zDepth(),s=i.zDepth();return Math.max(a,s,0)}}};a.each=a.forEach,e.exports=a},function(e,t,n){"use strict";var r=n(0),i=n(1),o=n(5),a=n(2),s={layoutDimensions:function(e){if((e=i.assign({nodeDimensionsIncludeLabels:!0},e)).nodeDimensionsIncludeLabels){var t=this.boundingBox();return{w:t.w,h:t.h}}return{w:this.outerWidth(),h:this.outerHeight()}},layoutPositions:function(e,t,n){var s=this.nodes(),l=this.cy(),c=t.eles,u=function(e,t){return e.id()+"$"+t},d=i.memoize(n,u);e.emit({type:"layoutstart",layout:e}),e.animations=[];var f=t.spacingFactor&&1!==t.spacingFactor,p=function(){if(!f)return null;for(var e=a.makeBoundingBox(),t=0;t<s.length;t++){var n=s[t],r=d(n,t);a.expandBoundingBoxByPoint(e,r.x,r.y)}return e}(),h=i.memoize((function(e,n){var i=d(e,n),o=e.position();return r.number(o.x)&&r.number(o.y)||e.silentPosition({x:0,y:0}),f&&(i=function(e,t,n){var r=t.x1+t.w/2,i=t.y1+t.h/2;return{x:r+(n.x-r)*e,y:i+(n.y-i)*e}}(Math.abs(t.spacingFactor),p,i)),null!=t.transform&&(i=t.transform(e,i)),i}),u);if(t.animate){for(var g=0;g<s.length;g++){var v=s[g],m=h(v,g);if(null==t.animateFilter||t.animateFilter(v,g)){var b=v.animation({position:m,duration:t.animationDuration,easing:t.animationEasing});e.animations.push(b),b.play()}else v.position(m)}if(t.fit){var y=l.animation({fit:{boundingBox:c.boundingBoxAt(h),padding:t.padding},duration:t.animationDuration,easing:t.animationEasing});e.animations.push(y),y.play()}else if(void 0!==t.zoom&&void 0!==t.pan){var x=l.animation({zoom:t.zoom,pan:t.pan,duration:t.animationDuration,easing:t.animationEasing});e.animations.push(x),x.play()}e.one("layoutready",t.ready),e.emit({type:"layoutready",layout:e}),o.all(e.animations.map((function(e){return e.promise()}))).then((function(){e.one("layoutstop",t.stop),e.emit({type:"layoutstop",layout:e})}))}else s.positions(h),t.fit&&l.fit(t.eles,t.padding),null!=t.zoom&&l.zoom(t.zoom),t.pan&&l.pan(t.pan),e.one("layoutready",t.ready),e.emit({type:"layoutready",layout:e}),e.one("layoutstop",t.stop),e.emit({type:"layoutstop",layout:e});return this},layout:function(e){return this.cy().makeLayout(i.extend({},e,{eles:this}))}};s.createLayout=s.makeLayout=s.layout,e.exports=s},function(e,t,n){"use strict";var r=n(0);function i(e,t,n){var r,i=n._private,o=i.styleCache=i.styleCache||{};return null!=(r=o[e])?r:r=o[e]=t(n)}function o(e,t){return function(n){return i(e,t,n)}}function a(e,t){var n=function(e){return t.call(e)};return function(){var t=this[0];if(t)return i(e,n,t)}}var s={recalculateRenderedStyle:function(e){var t=this.cy(),n=t.renderer(),r=t.styleEnabled();return n&&r&&n.recalculateRenderedStyle(this,e),this},dirtyStyleCache:function(){var e=this.cy(),t=function(e){return e._private.styleCache={}};if(e.hasCompoundNodes()){var n=void 0;(n=this.spawnSelf().merge(this.descendants()).merge(this.parents())).merge(n.connectedEdges()),n.forEach(t)}else this.forEach((function(e){t(e),e.connectedEdges().forEach(t)}));return this},updateStyle:function(e){var t=this._private.cy;if(!t.styleEnabled())return this;if(t._private.batchingStyle)return t._private.batchStyleEles.merge(this),this;var n=t.hasCompoundNodes(),r=t.style(),i=this;e=!(!e&&void 0!==e),n&&(i=this.spawnSelf().merge(this.descendants()).merge(this.parents()));var o=r.apply(i);return o.dirtyStyleCache(),o.dirtyCompoundBoundsCache(),e?o.emitAndNotify("style"):o.emit("style"),this},updateMappers:function(e){var t=this._private.cy,n=t.style();if(e=!(!e&&void 0!==e),!t.styleEnabled())return this;var r=n.updateMappers(this);return r.dirtyStyleCache(),r.dirtyCompoundBoundsCache(),e?r.emitAndNotify("style"):r.emit("style"),this},parsedStyle:function(e){var t=this[0],n=t.cy();if(n.styleEnabled())return t?t._private.style[e]||n.style().getDefaultProperty(e):void 0},numericStyle:function(e){var t=this[0];if(t.cy().styleEnabled()&&t){var n=t.pstyle(e);return void 0!==n.pfValue?n.pfValue:n.value}},numericStyleUnits:function(e){var t=this[0];if(t.cy().styleEnabled())return t?t.pstyle(e).units:void 0},renderedStyle:function(e){var t=this.cy();if(!t.styleEnabled())return this;var n=this[0];return n?t.style().getRenderedStyle(n,e):void 0},style:function(e,t){var n=this.cy();if(!n.styleEnabled())return this;var i=n.style();if(r.plainObject(e)){var o=e;i.applyBypass(this,o,!1),this.dirtyStyleCache(),this.dirtyCompoundBoundsCache(),this.emitAndNotify("style")}else if(r.string(e)){if(void 0===t){var a=this[0];return a?i.getStylePropertyValue(a,e):void 0}i.applyBypass(this,e,t,!1),this.dirtyStyleCache(),this.dirtyCompoundBoundsCache(),this.emitAndNotify("style")}else if(void 0===e){var s=this[0];return s?i.getRawStyle(s):void 0}return this},removeStyle:function(e){var t=this.cy();if(!t.styleEnabled())return this;var n=t.style();if(void 0===e)for(var r=0;r<this.length;r++){var i=this[r];n.removeAllBypasses(i,!1)}else{e=e.split(/\s+/);for(var o=0;o<this.length;o++){var a=this[o];n.removeBypasses(a,e,!1)}}return this.dirtyStyleCache(),this.dirtyCompoundBoundsCache(),this.emitAndNotify("style"),this},show:function(){return this.css("display","element"),this},hide:function(){return this.css("display","none"),this},effectiveOpacity:function(){var e=this.cy();if(!e.styleEnabled())return 1;var t=e.hasCompoundNodes(),n=this[0];if(n){var r=n._private,i=n.pstyle("opacity").value;if(!t)return i;var o=r.data.parent?n.parents():null;if(o)for(var a=0;a<o.length;a++)i*=o[a].pstyle("opacity").value;return i}},transparent:function(){if(!this.cy().styleEnabled())return!1;var e=this[0],t=e.cy().hasCompoundNodes();return e?t?0===e.effectiveOpacity():0===e.pstyle("opacity").value:void 0},backgrounding:function(){return!!this.cy().styleEnabled()&&!!this[0]._private.backgrounding}};function l(e,t){var n=e._private.data.parent?e.parents():null;if(n)for(var r=0;r<n.length;r++)if(!t(n[r]))return!1;return!0}function c(e){var t=e.ok,n=e.edgeOkViaNode||e.ok,r=e.parentOk||e.ok;return function(){var e=this.cy();if(!e.styleEnabled())return!0;var i=this[0],o=e.hasCompoundNodes();if(i){var a=i._private;if(!t(i))return!1;if(i.isNode())return!o||l(i,r);var s=a.source,c=a.target;return n(s)&&(!o||l(s,n))&&(s===c||n(c)&&(!o||l(c,n)))}}}var u=o("eleTakesUpSpace",(function(e){return"element"===e.pstyle("display").value&&0!==e.width()&&(!e.isNode()||0!==e.height())}));s.takesUpSpace=a("takesUpSpace",c({ok:u}));var d=o("eleInteractive",(function(e){return"yes"===e.pstyle("events").value&&"visible"===e.pstyle("visibility").value&&u(e)})),f=o("parentInteractive",(function(e){return"visible"===e.pstyle("visibility").value&&u(e)}));s.interactive=a("interactive",c({ok:d,parentOk:f,edgeOkViaNode:u})),s.noninteractive=function(){var e=this[0];if(e)return!e.interactive()};var p=o("eleVisible",(function(e){return"visible"===e.pstyle("visibility").value&&0!==e.pstyle("opacity").pfValue&&u(e)})),h=u;s.visible=a("visible",c({ok:p,edgeOkViaNode:h})),s.hidden=function(){var e=this[0];if(e)return!e.visible()},s.bypass=s.css=s.style,s.renderedCss=s.renderedStyle,s.removeBypass=s.removeCss=s.removeStyle,s.pstyle=s.parsedStyle,e.exports=s},function(e,t,n){"use strict";var r={};function i(e){return function(){var t=arguments,n=[];if(2===t.length){var r=t[0],i=t[1];this.on(e.event,r,i)}else if(1===t.length){var o=t[0];this.on(e.event,o)}else if(0===t.length){for(var a=0;a<this.length;a++){var s=this[a],l=!e.ableField||s._private[e.ableField],c=s._private[e.field]!=e.value;if(e.overrideAble){var u=e.overrideAble(s);if(void 0!==u&&(l=u,!u))return this}l&&(s._private[e.field]=e.value,c&&n.push(s))}var d=this.spawn(n);d.updateStyle(),d.emit(e.event)}return this}}function o(e){r[e.field]=function(){var t=this[0];if(t){if(e.overrideField){var n=e.overrideField(t);if(void 0!==n)return n}return t._private[e.field]}},r[e.on]=i({event:e.on,field:e.field,ableField:e.ableField,overrideAble:e.overrideAble,value:!0}),r[e.off]=i({event:e.off,field:e.field,ableField:e.ableField,overrideAble:e.overrideAble,value:!1})}o({field:"locked",overrideField:function(e){return!!e.cy().autolock()||void 0},on:"lock",off:"unlock"}),o({field:"grabbable",overrideField:function(e){return!e.cy().autoungrabify()&&void 0},on:"grabify",off:"ungrabify"}),o({field:"selected",ableField:"selectable",overrideAble:function(e){return!e.cy().autounselectify()&&void 0},on:"select",off:"unselect"}),o({field:"selectable",overrideField:function(e){return!e.cy().autounselectify()&&void 0},on:"selectify",off:"unselectify"}),r.deselect=r.unselect,r.grabbed=function(){var e=this[0];if(e)return e._private.grabbed},o({field:"active",on:"activate",off:"unactivate"}),r.inactive=function(){var e=this[0];if(e)return!e._private.active},e.exports=r},function(e,t,n){"use strict";var r=n(1),i=n(0),o={},a=function(e,t){return function(n,r,o,a){var s=n,l=void 0;if(null==s?l="null":i.elementOrCollection(s)&&1===s.length&&(l="#"+s.id()),1===this.length&&l){var c=this[0]._private,u=c.traversalCache=c.traversalCache||{},d=u[t]=u[t]||{},f=d[l];return f||(d[l]=e.call(this,n,r,o,a))}return e.call(this,n,r,o,a)}},s=function(e){return function(t){for(var n=[],r=0;r<this.length;r++){var i=this[r];if(i.isNode()){for(var o=!1,a=i.connectedEdges(),s=0;s<a.length;s++){var l=a[s],c=l.source(),u=l.target();if(e.noIncomingEdges&&u===i&&c!==i||e.noOutgoingEdges&&c===i&&u!==i){o=!0;break}}o||n.push(i)}}return this.spawn(n,{unique:!0}).filter(t)}},l=function(e){return function(t){for(var n=[],r=0;r<this.length;r++){var i=this[r];if(i.isNode())for(var o=i.connectedEdges(),a=0;a<o.length;a++){var s=o[a],l=s.source(),c=s.target();e.outgoing&&l===i?(n.push(s),n.push(c)):e.incoming&&c===i&&(n.push(s),n.push(l))}}return this.spawn(n,{unique:!0}).filter(t)}},c=function(e){return function(t){for(var n=this,r=[],i={};;){var o=e.outgoing?n.outgoers():n.incomers();if(0===o.length)break;for(var a=!1,s=0;s<o.length;s++){var l=o[s],c=l.id();i[c]||(i[c]=!0,r.push(l),a=!0)}if(!a)break;n=o}return this.spawn(r,{unique:!0}).filter(t)}};function u(e){return function(t){for(var n=[],r=0;r<this.length;r++){var i=this[r]._private[e.attr];i&&n.push(i)}return this.spawn(n,{unique:!0}).filter(t)}}function d(e){return function(t){var n=[],r=this._private.cy,o=e||{};i.string(t)&&(t=r.$(t));for(var a=0;a<t.length;a++)for(var s=t[a]._private.edges,l=0;l<s.length;l++){var c=s[l],u=c._private.data,d=this.hasElementWithId(u.source)&&t.hasElementWithId(u.target),f=t.hasElementWithId(u.source)&&this.hasElementWithId(u.target);if(d||f){if(o.thisIsSrc||o.thisIsTgt){if(o.thisIsSrc&&!d)continue;if(o.thisIsTgt&&!f)continue}n.push(c)}}return this.spawn(n,{unique:!0})}}function f(e){return e=r.extend({},{codirected:!1},e),function(t){for(var n=[],r=this.edges(),i=e,o=0;o<r.length;o++)for(var a=r[o]._private,s=a.source,l=s._private.data.id,c=a.data.target,u=s._private.edges,d=0;d<u.length;d++){var f=u[d],p=f._private.data,h=p.target,g=p.source,v=h===c&&g===l,m=l===h&&c===g;(i.codirected&&v||!i.codirected&&(v||m))&&n.push(f)}return this.spawn(n,{unique:!0}).filter(t)}}o.clearTraversalCache=function(){for(var e=0;e<this.length;e++)this[e]._private.traversalCache=null},r.extend(o,{roots:s({noIncomingEdges:!0}),leaves:s({noOutgoingEdges:!0}),outgoers:a(l({outgoing:!0}),"outgoers"),successors:c({outgoing:!0}),incomers:a(l({incoming:!0}),"incomers"),predecessors:c({incoming:!0})}),r.extend(o,{neighborhood:a((function(e){for(var t=[],n=this.nodes(),r=0;r<n.length;r++)for(var i=n[r],o=i.connectedEdges(),a=0;a<o.length;a++){var s=o[a],l=s.source(),c=s.target(),u=i===l?c:l;u.length>0&&t.push(u[0]),t.push(s[0])}return this.spawn(t,{unique:!0}).filter(e)}),"neighborhood"),closedNeighborhood:function(e){return this.neighborhood().add(this).filter(e)},openNeighborhood:function(e){return this.neighborhood(e)}}),o.neighbourhood=o.neighborhood,o.closedNeighbourhood=o.closedNeighborhood,o.openNeighbourhood=o.openNeighborhood,r.extend(o,{source:a((function(e){var t=this[0],n=void 0;return t&&(n=t._private.source||t.cy().collection()),n&&e?n.filter(e):n}),"source"),target:a((function(e){var t=this[0],n=void 0;return t&&(n=t._private.target||t.cy().collection()),n&&e?n.filter(e):n}),"target"),sources:u({attr:"source"}),targets:u({attr:"target"})}),r.extend(o,{edgesWith:a(d(),"edgesWith"),edgesTo:a(d({thisIsSrc:!0}),"edgesTo")}),r.extend(o,{connectedEdges:a((function(e){for(var t=[],n=0;n<this.length;n++){var r=this[n];if(r.isNode())for(var i=r._private.edges,o=0;o<i.length;o++){var a=i[o];t.push(a)}}return this.spawn(t,{unique:!0}).filter(e)}),"connectedEdges"),connectedNodes:a((function(e){for(var t=[],n=0;n<this.length;n++){var r=this[n];r.isEdge()&&(t.push(r.source()[0]),t.push(r.target()[0]))}return this.spawn(t,{unique:!0}).filter(e)}),"connectedNodes"),parallelEdges:a(f(),"parallelEdges"),codirectedEdges:a(f({codirected:!0}),"codirectedEdges")}),r.extend(o,{components:function(){var e=this,t=e.cy(),n=e.spawn(),r=e.nodes().spawnSelf(),i=[],o=function(e,t){n.merge(e),r.unmerge(e),t.merge(e)};if(r.empty())return e.spawn();var a=function(){var n=t.collection();i.push(n);var a=r[0];o(a,n),e.bfs({directed:!1,roots:a,visit:function(e,t,r,i,a){o(e,n)}})};do{a()}while(r.length>0);return i.map((function(e){var t=e.connectedEdges().stdFilter((function(t){return e.anySame(t.source())&&e.anySame(t.target())}));return e.union(t)}))}}),e.exports=o},function(e,t,n){"use strict";var r=n(0),i=n(1),o=n(7),a=n(14),s={add:function(e){var t=void 0,n=this;if(r.elementOrCollection(e)){var s=e;if(s._private.cy===n)t=s.restore();else{for(var l=[],c=0;c<s.length;c++){var u=s[c];l.push(u.json())}t=new o(n,l)}}else if(r.array(e))t=new o(n,e);else if(r.plainObject(e)&&(r.array(e.nodes)||r.array(e.edges))){for(var d=e,f=[],p=["nodes","edges"],h=0,g=p.length;h<g;h++){var v=p[h],m=d[v];if(r.array(m))for(var b=0,y=m.length;b<y;b++){var x=i.extend({group:v},m[b]);f.push(x)}}t=new o(n,f)}else t=new a(n,e).collection();return t},remove:function(e){if(r.elementOrCollection(e));else if(r.string(e)){var t=e;e=this.$(t)}return e.remove()}};e.exports=s},function(e,t,n){"use strict";var r=n(4),i=n(1),o=n(71),a={animate:r.animate(),animation:r.animation(),animated:r.animated(),clearQueue:r.clearQueue(),delay:r.delay(),delayAnimation:r.delayAnimation(),stop:r.stop(),addToAnimationPool:function(e){this.styleEnabled()&&this._private.aniEles.merge(e)},stopAnimationLoop:function(){this._private.animationsRunning=!1},startAnimationLoop:function(){var e=this;if(e._private.animationsRunning=!0,e.styleEnabled()){var t=e.renderer();t&&t.beforeRender?t.beforeRender((function(t,n){o(n,e)}),t.beforeRenderPriorities.animations):function t(){e._private.animationsRunning&&i.requestAnimationFrame((function(n){o(n,e),t()}))}()}}};e.exports=a},function(e,t,n){"use strict";var r=n(72),i=n(77);e.exports=function(e,t){var n=t._private.aniEles,o=[];function a(t,n){var a=t._private,s=a.animation.current,l=a.animation.queue,c=!1;if(!n&&"none"===t.pstyle("display").value){s=s.splice(0,s.length).concat(l.splice(0,l.length));for(var u=0;u<s.length;u++)s[u].stop()}if(0===s.length){var d=l.shift();d&&s.push(d)}for(var f=function(e){for(var t=e.length-1;t>=0;t--)(0,e[t])();e.splice(0,e.length)},p=s.length-1;p>=0;p--){var h=s[p],g=h._private;g.stopped?(s.splice(p,1),g.hooked=!1,g.playing=!1,g.started=!1,f(g.frames)):(g.playing||g.applying)&&(g.playing&&g.applying&&(g.applying=!1),g.started||i(t,h,e,n),r(t,h,e,n),g.applying&&(g.applying=!1),f(g.frames),h.completed()&&(s.splice(p,1),g.hooked=!1,g.playing=!1,g.started=!1,f(g.completes)),c=!0)}return n||0!==s.length||0!==l.length||o.push(t),c}for(var s=!1,l=0;l<n.length;l++){var c=a(n[l]);s=s||c}var u=a(t,!0);(s||u)&&(n.length>0?(n.dirtyCompoundBoundsCache(),t.notify({type:"draw",eles:n})):t.notify({type:"draw"})),n.unmerge(o),t.emit("step")}},function(e,t,n){"use strict";var r=n(73),i=n(76),o=n(0);function a(e,t){return!!(null!=e&&null!=t&&(o.number(e)&&o.number(t)||e&&t))}e.exports=function(e,t,n,s){var l=!s,c=e._private,u=t._private,d=u.easing,f=u.startTime,p=(s?e:e.cy()).style();if(!u.easingImpl)if(null==d)u.easingImpl=r.linear;else{var h=void 0;h=o.string(d)?p.parse("transition-timing-function",d).value:d;var g=void 0,v=void 0;o.string(h)?(g=h,v=[]):(g=h[1],v=h.slice(2).map((function(e){return+e}))),v.length>0?("spring"===g&&v.push(u.duration),u.easingImpl=r[g].apply(null,v)):u.easingImpl=r[g]}var m=u.easingImpl,b=void 0;if(b=0===u.duration?1:(n-f)/u.duration,u.applying&&(b=u.progress),b<0?b=0:b>1&&(b=1),null==u.delay){var y=u.startPosition,x=u.position;if(x&&l&&!e.locked()){var w=e.position();a(y.x,x.x)&&(w.x=i(y.x,x.x,b,m)),a(y.y,x.y)&&(w.y=i(y.y,x.y,b,m)),e.emit("position")}var k=u.startPan,A=u.pan,E=c.pan,S=null!=A&&s;S&&(a(k.x,A.x)&&(E.x=i(k.x,A.x,b,m)),a(k.y,A.y)&&(E.y=i(k.y,A.y,b,m)),e.emit("pan"));var C=u.startZoom,$=u.zoom,O=null!=$&&s;O&&(a(C,$)&&(c.zoom=i(C,$,b,m)),e.emit("zoom")),(S||O)&&e.emit("viewport");var _=u.style;if(_&&_.length>0&&l){for(var T=0;T<_.length;T++){var j=_[T],P=j.name,D=j,R=u.startStyle[P],I=p.properties[R.name],N=i(R,D,b,m,I);p.overrideBypass(e,P,N)}e.emit("style")}}return u.progress=b,b}},function(e,t,n){"use strict";var r=n(74),i=n(75),o=function(e,t,n,i){var o=r(e,t,n,i);return function(e,t,n){return e+(t-e)*o(n)}},a={linear:function(e,t,n){return e+(t-e)*n},ease:o(.25,.1,.25,1),"ease-in":o(.42,0,1,1),"ease-out":o(0,0,.58,1),"ease-in-out":o(.42,0,.58,1),"ease-in-sine":o(.47,0,.745,.715),"ease-out-sine":o(.39,.575,.565,1),"ease-in-out-sine":o(.445,.05,.55,.95),"ease-in-quad":o(.55,.085,.68,.53),"ease-out-quad":o(.25,.46,.45,.94),"ease-in-out-quad":o(.455,.03,.515,.955),"ease-in-cubic":o(.55,.055,.675,.19),"ease-out-cubic":o(.215,.61,.355,1),"ease-in-out-cubic":o(.645,.045,.355,1),"ease-in-quart":o(.895,.03,.685,.22),"ease-out-quart":o(.165,.84,.44,1),"ease-in-out-quart":o(.77,0,.175,1),"ease-in-quint":o(.755,.05,.855,.06),"ease-out-quint":o(.23,1,.32,1),"ease-in-out-quint":o(.86,0,.07,1),"ease-in-expo":o(.95,.05,.795,.035),"ease-out-expo":o(.19,1,.22,1),"ease-in-out-expo":o(1,0,0,1),"ease-in-circ":o(.6,.04,.98,.335),"ease-out-circ":o(.075,.82,.165,1),"ease-in-out-circ":o(.785,.135,.15,.86),spring:function(e,t,n){if(0===n)return a.linear;var r=i(e,t,n);return function(e,t,n){return e+(t-e)*r(n)}},"cubic-bezier":o};e.exports=a},function(e,t,n){"use strict"; /*! Bezier curve function generator. Copyright Gaetan Renaudeau. MIT License: http://en.wikipedia.org/wiki/MIT_License */e.exports=function(e,t,n,r){var i=4,o=.001,a=1e-7,s=10,l=11,c=1/(l-1),u="undefined"!=typeof Float32Array;if(4!==arguments.length)return!1;for(var d=0;d<4;++d)if("number"!=typeof arguments[d]||isNaN(arguments[d])||!isFinite(arguments[d]))return!1;e=Math.min(e,1),n=Math.min(n,1),e=Math.max(e,0),n=Math.max(n,0);var f=u?new Float32Array(l):new Array(l);function p(e,t){return 1-3*t+3*e}function h(e,t){return 3*t-6*e}function g(e){return 3*e}function v(e,t,n){return((p(t,n)*e+h(t,n))*e+g(t))*e}function m(e,t,n){return 3*p(t,n)*e*e+2*h(t,n)*e+g(t)}function b(t,r){for(var o=0;o<i;++o){var a=m(r,e,n);if(0===a)return r;r-=(v(r,e,n)-t)/a}return r}function y(){for(var t=0;t<l;++t)f[t]=v(t*c,e,n)}function x(t,r,i){var o=void 0,l=void 0,c=0;do{(o=v(l=r+(i-r)/2,e,n)-t)>0?i=l:r=l}while(Math.abs(o)>a&&++c<s);return l}function w(t){for(var r=0,i=1,a=l-1;i!==a&&f[i]<=t;++i)r+=c;--i;var s=r+(t-f[i])/(f[i+1]-f[i])*c,u=m(s,e,n);return u>=o?b(t,s):0===u?s:x(t,r,r+c)}var k=!1;function A(){k=!0,e===t&&n===r||y()}var E=function(i){return k||A(),e===t&&n===r?i:0===i?0:1===i?1:v(w(i),t,r)};E.getControlPoints=function(){return[{x:e,y:t},{x:n,y:r}]};var S="generateBezier("+[e,t,n,r]+")";return E.toString=function(){return S},E}},function(e,t,n){"use strict"; -/*! Runge-Kutta spring physics function generator. Adapted from Framer.js, copyright Koen Bok. MIT License: http://en.wikipedia.org/wiki/MIT_License */var r=function(){function e(e){return-e.tension*e.x-e.friction*e.v}function t(t,n,r){var i={x:t.x+r.dx*n,v:t.v+r.dv*n,tension:t.tension,friction:t.friction};return{dx:i.v,dv:e(i)}}function n(n,r){var i={dx:n.v,dv:e(n)},o=t(n,.5*r,i),a=t(n,.5*r,o),s=t(n,r,a),l=1/6*(i.dx+2*(o.dx+a.dx)+s.dx),c=1/6*(i.dv+2*(o.dv+a.dv)+s.dv);return n.x=n.x+l*r,n.v=n.v+c*r,n}return function e(t,r,i){var o,a={x:-1,v:0,tension:null,friction:null},s=[0],l=0,c=void 0,u=void 0;for(t=parseFloat(t)||500,r=parseFloat(r)||20,i=i||null,a.tension=t,a.friction=r,c=(o=null!==i)?(l=e(t,r))/i*.016:.016;u=n(u||a,c),s.push(1+u.x),l+=16,Math.abs(u.x)>1e-4&&Math.abs(u.v)>1e-4;);return o?function(e){return s[e*(s.length-1)|0]}:l}}();e.exports=r},function(e,t,n){"use strict";var r=n(0);function i(e,t,n,r,i){if(1===r)return n;var o=i(t,n,r);return null==e||((e.roundValue||e.color)&&(o=Math.round(o)),void 0!==e.min&&(o=Math.max(o,e.min)),void 0!==e.max&&(o=Math.min(o,e.max))),o}function o(e,t){return null!=e.pfValue||null!=e.value?null==e.pfValue||null!=t&&"%"===t.type.units?e.value:e.pfValue:e}e.exports=function(e,t,n,a,s){var l=null!=s?s.type:null;n<0?n=0:n>1&&(n=1);var c=o(e,s),u=o(t,s);if(r.number(c)&&r.number(u))return i(l,c,u,n,a);if(r.array(c)&&r.array(u)){for(var d=[],f=0;f<u.length;f++){var p=c[f],h=u[f];if(null!=p&&null!=h){var g=i(l,p,h,n,a);d.push(g)}else d.push(h)}return d}}},function(e,t,n){"use strict";e.exports=function(e,t,n,r){var i=!r,o=e,a=t._private,s=r?e:e.cy(),l=s.style();if(i){var c=o.position();a.startPosition=a.startPosition||{x:c.x,y:c.y},a.startStyle=a.startStyle||l.getAnimationStartStyle(o,a.style)}if(r){var u=s._private.pan;a.startPan=a.startPan||{x:u.x,y:u.y},a.startZoom=null!=a.startZoom?a.startZoom:s._private.zoom}a.started=!0,a.startTime=n-a.progress*a.duration}},function(e,t,n){"use strict";var r=n(11),i=n(4),o=n(0),a=n(1),s=n(6),l={qualifierCompare:function(e,t){return null==e||null==t?null==e&&null==t:e.sameText(t)},eventMatches:function(e,t,n){var r=t.qualifier;return null==r||e!==n.target&&o.element(n.target)&&r.matches(n.target)},eventFields:function(e){return{cy:e,target:e}},callbackContext:function(e,t,n){return null!=t.qualifier?n.target:e}},c=function(e){return o.string(e)?new s(e):e},u={createEmitter:function(){var e=this._private;return e.emitter||(e.emitter=new r(a.assign({context:this},l))),this},emitter:function(){return this._private.emitter},on:function(e,t,n){return this.emitter().on(e,c(t),n),this},removeListener:function(e,t,n){return this.emitter().removeListener(e,c(t),n),this},one:function(e,t,n){return this.emitter().one(e,c(t),n),this},once:function(e,t,n){return this.emitter().one(e,c(t),n),this},emit:function(e,t){return this.emitter().emit(e,t),this}};i.eventAliasesOn(u),e.exports=u},function(e,t,n){"use strict";var r={png:function(e){return e=e||{},this._private.renderer.png(e)},jpg:function(e){var t=this._private.renderer;return(e=e||{}).bg=e.bg||"#fff",t.jpg(e)}};r.jpeg=r.jpg,e.exports=r},function(e,t,n){"use strict";var r=n(1),i=n(0),o={layout:function(e){if(null!=e)if(null!=e.name){var t=e.name,n=this.extension("layout",t);if(null!=n){var o=void 0;o=i.string(e.eles)?this.$(e.eles):null!=e.eles?e.eles:this.$();var a=new n(r.extend({},e,{cy:this,eles:o}));return a}r.error("Can not apply layout: No such layout `"+t+"` found; did you include its JS file?")}else r.error("A `name` must be specified to make a layout");else r.error("Layout options must be specified to make a layout")}};o.createLayout=o.makeLayout=o.layout,e.exports=o},function(e,t,n){"use strict";var r={notify:function(e){var t=this._private;if(t.batchingNotify){var n=t.batchNotifyEles,r=t.batchNotifyTypes;return e.eles&&n.merge(e.eles),void(r.ids[e.type]||(r.push(e.type),r.ids[e.type]=!0))}if(t.notificationsEnabled){var i=this.renderer();!this.isDestroyed()&&i&&i.notify(e)}},notifications:function(e){var t=this._private;if(void 0===e)return t.notificationsEnabled;t.notificationsEnabled=!!e},noNotifications:function(e){this.notifications(!1),e(),this.notifications(!0)},batching:function(){return this._private.batchCount>0},startBatch:function(){var e=this._private;return null==e.batchCount&&(e.batchCount=0),0===e.batchCount&&(e.batchingStyle=e.batchingNotify=!0,e.batchStyleEles=this.collection(),e.batchNotifyEles=this.collection(),e.batchNotifyTypes=[],e.batchNotifyTypes.ids={}),e.batchCount++,this},endBatch:function(){var e=this._private;return e.batchCount--,0===e.batchCount&&(e.batchingStyle=!1,e.batchStyleEles.updateStyle(),e.batchingNotify=!1,this.notify({type:e.batchNotifyTypes,eles:e.batchNotifyEles})),this},batch:function(e){return this.startBatch(),e(),this.endBatch(),this},batchData:function(e){var t=this;return this.batch((function(){for(var n=Object.keys(e),r=0;r<n.length;r++){var i=n[r],o=e[i];t.getElementById(i).data(o)}}))}};e.exports=r},function(e,t,n){"use strict";var r=n(1),i={renderTo:function(e,t,n,r){return this._private.renderer.renderTo(e,t,n,r),this},renderer:function(){return this._private.renderer},forceRender:function(){return this.notify({type:"draw"}),this},resize:function(){return this.invalidateSize(),this.notify({type:"resize"}),this.emit("resize"),this},initRenderer:function(e){var t=this.extension("renderer",e.name);null!=t?(this._private.renderer=new t(r.extend({},e,{cy:this})),this.notify({type:"init"})):r.error("Can not initialise: No such renderer `%s` found; did you include its JS file?",e.name)},destroyRenderer:function(){this.notify({type:"destroy"});var e=this.container();if(e)for(e._cyreg=null;e.childNodes.length>0;)e.removeChild(e.childNodes[0]);this._private.renderer=null},onRender:function(e){return this.on("render",e)},offRender:function(e){return this.off("render",e)}};i.invalidateDimensions=i.resize,e.exports=i},function(e,t,n){"use strict";var r=n(0),i=n(7),o={collection:function(e,t){return r.string(e)?this.$(e):r.elementOrCollection(e)?e.collection():r.array(e)?new i(this,e,t):new i(this)},nodes:function(e){var t=this.$((function(e){return e.isNode()}));return e?t.filter(e):t},edges:function(e){var t=this.$((function(e){return e.isEdge()}));return e?t.filter(e):t},$:function(e){var t=this._private.elements;return e?t.filter(e):t.spawnSelf()},mutableElements:function(){return this._private.elements}};o.elements=o.filter=o.$,e.exports=o},function(e,t,n){"use strict";var r=n(0),i=n(18),o={style:function(e){return e&&this.setStyle(e).update(),this._private.style},setStyle:function(e){var t=this._private;return r.stylesheet(e)?t.style=e.generateStyle(this):r.array(e)?t.style=i.fromJson(this,e):r.string(e)?t.style=i.fromString(this,e):t.style=i(this),t.style}};e.exports=o},function(e,t,n){"use strict";var r=n(1),i=n(0),o=n(5),a={apply:function(e){var t=this._private,n=t.cy.collection();t.newStyle&&(t.contextStyles={},t.propDiffs={},this.cleanElements(e,!0));for(var r=0;r<e.length;r++){var i=e[r],o=this.getContextMeta(i);if(!o.empty){n.merge(i);var a=this.getContextStyle(o),s=this.applyContextStyle(o,a,i);t.newStyle||this.updateTransitions(i,s.diffProps),this.updateStyleHints(i)}}return t.newStyle=!1,n},getPropertiesDiff:function(e,t){var n=this._private.propDiffs=this._private.propDiffs||{},r=e+"-"+t,i=n[r];if(i)return i;for(var o=[],a={},s=0;s<this.length;s++){var l=this[s],c="t"===e[s]!=("t"===t[s]),u=l.mappedProperties.length>0;if(c||u){var d=void 0;c&&u||c?d=l.properties:u&&(d=l.mappedProperties);for(var f=0;f<d.length;f++){for(var p=d[f],h=p.name,g=!1,v=s+1;v<this.length;v++){var m=this[v];if("t"===t[v]&&(g=null!=m.properties[p.name]))break}a[h]||g||(a[h]=!0,o.push(h))}}}return n[r]=o,o},getContextMeta:function(e){var t,n="",r=e._private.styleCxtKey||"";this._private.newStyle&&(r="");for(var i=0;i<this.length;i++){var o=this[i];n+=o.selector&&o.selector.matches(e)?"t":"f"}return t=this.getPropertiesDiff(r,n),e._private.styleCxtKey=n,{key:n,diffPropNames:t,empty:0===t.length}},getContextStyle:function(e){var t=e.key,n=this._private.contextStyles=this._private.contextStyles||{};if(n[t])return n[t];for(var r={_private:{key:t}},i=0;i<this.length;i++){var o=this[i];if("t"===t[i])for(var a=0;a<o.properties.length;a++){var s=o.properties[a];r[s.name]=s}}return n[t]=r,r},applyContextStyle:function(e,t,n){for(var r=e.diffPropNames,i={},o=0;o<r.length;o++){var a=r[o],s=t[a],l=n.pstyle(a);if(!s){if(!l)continue;s=l.bypass?{name:a,deleteBypassed:!0}:{name:a,delete:!0}}if(l!==s){var c=i[a]={prev:l};this.applyParsedProperty(n,s),c.next=n.pstyle(a),c.next&&c.next.bypass&&(c.next=c.next.bypassed)}}return{diffProps:i}},updateStyleHints:function(e){var t=e._private;if(!e.removed()){var n=!1;if("nodes"===t.group)for(var r=1;r<=this.pieBackgroundN;r++)if(e.pstyle("pie-"+r+"-background-size").value>0){n=!0;break}t.hasPie=n;var i=e.pstyle("text-transform").strValue,o=e.pstyle("label").strValue,a=e.pstyle("source-label").strValue,s=e.pstyle("target-label").strValue,l=e.pstyle("font-style").strValue,c=e.pstyle("font-size").pfValue+"px",u=e.pstyle("font-family").strValue,d=e.pstyle("font-weight").strValue,f=l+"$"+c+"$"+u+"$"+d+"$"+i+"$"+e.pstyle("text-valign").strValue+"$"+e.pstyle("text-valign").strValue+"$"+e.pstyle("text-outline-width").pfValue+"$"+e.pstyle("text-wrap").strValue+"$"+e.pstyle("text-max-width").pfValue;t.labelStyleKey=f,t.sourceLabelKey=f+"$"+a,t.targetLabelKey=f+"$"+s,t.labelKey=f+"$"+o,t.fontKey=l+"$"+d+"$"+c+"$"+u,t.styleKey=Date.now()}},applyParsedProperty:function(e,t){var n=this,o=t,a=e._private.style,s=void 0,l=n.types,c=n.properties[o.name].type,u=o.bypass,d=a[o.name],f=d&&d.bypass,p=e._private,h=function(){n.checkZOrderTrigger(e,o.name,d?d.value:null,o.value)};if("curve-style"===t.name&&"haystack"===t.value&&e.isEdge()&&(e.isLoop()||e.source().isParent()||e.target().isParent())&&(o=t=this.parse(t.name,"bezier",u)),o.delete)return a[o.name]=void 0,h(),!0;if(o.deleteBypassed)return d?!!d.bypass&&(d.bypassed=void 0,h(),!0):(h(),!0);if(o.deleteBypass)return d?!!d.bypass&&(a[o.name]=d.bypassed,h(),!0):(h(),!0);var g=function(){r.error("Do not assign mappings to elements without corresponding data (e.g. ele `"+e.id()+"` for property `"+o.name+"` with data field `"+o.field+"`); try a `["+o.field+"]` selector to limit scope to elements with `"+o.field+"` defined")};switch(o.mapped){case l.mapData:for(var v=o.field.split("."),m=p.data,b=0;b<v.length&&m;b++)m=m[v[b]];var y=void 0;if((y=i.number(m)?(m-o.fieldMin)/(o.fieldMax-o.fieldMin):0)<0?y=0:y>1&&(y=1),c.color){var x=o.valueMin[0],w=o.valueMax[0],k=o.valueMin[1],A=o.valueMax[1],E=o.valueMin[2],S=o.valueMax[2],C=null==o.valueMin[3]?1:o.valueMin[3],$=null==o.valueMax[3]?1:o.valueMax[3],O=[Math.round(x+(w-x)*y),Math.round(k+(A-k)*y),Math.round(E+(S-E)*y),Math.round(C+($-C)*y)];s={bypass:o.bypass,name:o.name,value:O,strValue:"rgb("+O[0]+", "+O[1]+", "+O[2]+")"}}else{if(!c.number)return!1;var _=o.valueMin+(o.valueMax-o.valueMin)*y;s=this.parse(o.name,_,o.bypass,"mapping")}s||(s=this.parse(o.name,d.strValue,o.bypass,"mapping")),s||g(),s.mapping=o,o=s;break;case l.data:var T=o.field.split("."),j=p.data;if(j)for(var P=0;P<T.length;P++)j=j[T[P]];if(!(s=this.parse(o.name,j,o.bypass,"mapping"))){var D=d?d.strValue:"";s=this.parse(o.name,D,o.bypass,"mapping")}s||g(),s.mapping=o,o=s;break;case l.fn:var R=(0,o.value)(e);(s=this.parse(o.name,R,o.bypass,"mapping")).mapping=o,o=s;break;case void 0:break;default:return!1}return u?(o.bypassed=f?d.bypassed:d,a[o.name]=o):f?d.bypassed=o:a[o.name]=o,h(),!0},cleanElements:function(e,t){for(var n=this.properties,r=0;r<e.length;r++){var i=e[r];if(t)for(var o=i._private.style,a=0;a<n.length;a++){var s=n[a],l=o[s.name];l&&(l.bypass?l.bypassed=null:o[s.name]=null)}else i._private.style={}}},update:function(){this._private.cy.mutableElements().updateStyle()},updateMappers:function(e){for(var t=this._private.cy.collection(),n=0;n<e.length;n++){for(var r=e[n],i=r._private.style,o=!1,a=0;a<this.properties.length;a++){var s=i[this.properties[a].name];if(s&&s.mapping){var l=s.mapping;this.applyParsedProperty(r,l),o=!0}}o&&(this.updateStyleHints(r),t.merge(r))}return t},updateTransitions:function(e,t,n){var r=this,a=e._private,s=e.pstyle("transition-property").value,l=e.pstyle("transition-duration").pfValue,c=e.pstyle("transition-delay").pfValue;if(s.length>0&&l>0){for(var u={},d=!1,f=0;f<s.length;f++){var p=s[f],h=e.pstyle(p),g=t[p];if(g){var v=g.prev,m=null!=g.next?g.next:h,b=!1,y=void 0;v&&(i.number(v.pfValue)&&i.number(m.pfValue)?(b=m.pfValue-v.pfValue,y=v.pfValue+1e-6*b):i.number(v.value)&&i.number(m.value)?(b=m.value-v.value,y=v.value+1e-6*b):i.array(v.value)&&i.array(m.value)&&(b=v.value[0]!==m.value[0]||v.value[1]!==m.value[1]||v.value[2]!==m.value[2],y=v.strValue),b&&(u[p]=m.strValue,this.applyBypass(e,p,y),d=!0))}}if(!d)return;a.transitioning=!0,new o((function(t){c>0?e.delayAnimation(c).play().promise().then(t):t()})).then((function(){return e.animation({style:u,duration:l,easing:e.pstyle("transition-timing-function").value,queue:!1}).play().promise()})).then((function(){r.removeBypasses(e,s),e.emitAndNotify("style"),a.transitioning=!1}))}else a.transitioning&&(this.removeBypasses(e,s),e.emitAndNotify("style"),a.transitioning=!1)},checkZOrderTrigger:function(e,t,n,r){var i=this.properties[t];null==i.triggersZOrder||null!=n&&!i.triggersZOrder(n,r)||this._private.cy.notify({type:"zorder",eles:e})}};e.exports=a},function(e,t,n){"use strict";var r=n(0),i=n(1),o={applyBypass:function(e,t,n,o){var a=[];if("*"===t||"**"===t){if(void 0!==n)for(var s=0;s<this.properties.length;s++){var l=this.properties[s].name,c=this.parse(l,n,!0);c&&a.push(c)}}else if(r.string(t)){var u=this.parse(t,n,!0);u&&a.push(u)}else{if(!r.plainObject(t))return!1;var d=t;o=n;for(var f=Object.keys(d),p=0;p<f.length;p++){var h=f[p],g=(this.properties[h],d[h]);if(void 0===g&&(g=d[i.dash2camel(h)]),void 0!==g){var v=this.parse(h,g,!0);v&&a.push(v)}}}if(0===a.length)return!1;for(var m=!1,b=0;b<e.length;b++){for(var y=e[b],x={},w=void 0,k=0;k<a.length;k++){var A=a[k];if(o){var E=y.pstyle(A.name);w=x[A.name]={prev:E}}m=this.applyParsedProperty(y,A)||m,o&&(w.next=y.pstyle(A.name))}m&&this.updateStyleHints(y),o&&this.updateTransitions(y,x,!0)}return m},overrideBypass:function(e,t,n){t=i.camel2dash(t);for(var r=0;r<e.length;r++){var o=e[r],a=o._private.style[t],s=this.properties[t].type,l=s.color,c=s.mutiple;if(a&&a.bypass){var u=null!=a.pfValue?a.pfValue:a.value;a.value=n,null!=a.pfValue&&(a.pfValue=n),a.strValue=l?"rgb("+n.join(",")+")":c?n.join(" "):""+n,this.checkZOrderTrigger(o,t,u,n)}else this.applyBypass(o,t,n)}},removeAllBypasses:function(e,t){return this.removeBypasses(e,this.propertyNames,t)},removeBypasses:function(e,t,n){for(var r=0;r<e.length;r++){for(var i=e[r],o={},a=0;a<t.length;a++){var s=t[a],l=this.properties[s],c=i.pstyle(l.name);if(c&&c.bypass){var u=this.parse(s,"",!0),d=o[l.name]={prev:c};this.applyParsedProperty(i,u),d.next=i.pstyle(l.name)}}this.updateStyleHints(i),n&&this.updateTransitions(i,o,!0)}}};e.exports=o},function(e,t,n){"use strict";var r=n(3),i={getEmSizeInPixels:function(){var e=this.containerCss("font-size");return null!=e?parseFloat(e):1},containerCss:function(e){var t=this._private.cy.container();if(r&&t&&r.getComputedStyle)return r.getComputedStyle(t).getPropertyValue(e)}};e.exports=i},function(e,t,n){"use strict";var r=n(1),i=n(0),o={getRenderedStyle:function(e,t){return t?this.getStylePropertyValue(e,t,!0):this.getRawStyle(e,!0)},getRawStyle:function(e,t){if(e=e[0]){for(var n={},i=0;i<this.properties.length;i++){var o=this.properties[i],a=this.getStylePropertyValue(e,o.name,t);null!=a&&(n[o.name]=a,n[r.dash2camel(o.name)]=a)}return n}},getIndexedStyle:function(e,t,n,r){var i=e.pstyle(t)[n][r];return null!=i?i:e.cy().style().getDefaultProperty(t)[n][0]},getStylePropertyValue:function(e,t,n){if(e=e[0]){var r=this.properties[t];r.alias&&(r=r.pointsTo);var i=r.type,o=e.pstyle(r.name),a=e.cy().zoom();if(o){var s=o.units?i.implicitUnits||"px":null;return s?[].concat(o.pfValue).map((function(e){return e*(n?a:1)+s})).join(" "):o.strValue}}},getAnimationStartStyle:function(e,t){for(var n={},r=0;r<t.length;r++){var o=t[r].name,a=e.pstyle(o);void 0!==a&&(a=i.plainObject(a)?this.parse(o,a.strValue):this.parse(o,a)),a&&(n[o]=a)}return n},getPropsList:function(e){var t=[],n=e,i=this.properties;if(n)for(var o=Object.keys(n),a=0;a<o.length;a++){var s=o[a],l=n[s],c=i[s]||i[r.camel2dash(s)],u=this.parse(c.name,l);u&&t.push(u)}return t}};e.exports=o},function(e,t,n){"use strict";var r={appendFromJson:function(e){for(var t=0;t<e.length;t++){var n=e[t],r=n.selector,i=n.style||n.css,o=Object.keys(i);this.selector(r);for(var a=0;a<o.length;a++){var s=o[a],l=i[s];this.css(s,l)}}return this},fromJson:function(e){return this.resetToDefault(),this.appendFromJson(e),this},json:function(){for(var e=[],t=this.defaultLength;t<this.length;t++){for(var n=this[t],r=n.selector,i=n.properties,o={},a=0;a<i.length;a++){var s=i[a];o[s.name]=s.strValue}e.push({selector:r?r.toString():"core",style:o})}return e}};e.exports=r},function(e,t,n){"use strict";var r=n(1),i=n(6),o={appendFromString:function(e){var t=""+e,n=void 0,o=void 0,a=void 0;function s(){t=t.length>n.length?t.substr(n.length):""}function l(){o=o.length>a.length?o.substr(a.length):""}for(t=t.replace(/[/][*](\s|.)+?[*][/]/g,"");!t.match(/^\s*$/);){var c=t.match(/^\s*((?:.|\s)+?)\s*\{((?:.|\s)+?)\}/);if(!c){r.error("Halting stylesheet parsing: String stylesheet contains more to parse but no selector and block found in: "+t);break}n=c[0];var u=c[1];if("core"!==u&&new i(u)._private.invalid)r.error("Skipping parsing of block: Invalid selector found in string stylesheet: "+u),s();else{var d=c[2],f=!1;o=d;for(var p=[];!o.match(/^\s*$/);){var h=o.match(/^\s*(.+?)\s*:\s*(.+?)\s*;/);if(!h){r.error("Skipping parsing of block: Invalid formatting of style property and value definitions found in:"+d),f=!0;break}a=h[0];var g=h[1],v=h[2];this.properties[g]?this.parse(g,v)?(p.push({name:g,val:v}),l()):(r.error("Skipping property: Invalid property definition in: "+a),l()):(r.error("Skipping property: Invalid property name in: "+a),l())}if(f){s();break}this.selector(u);for(var m=0;m<p.length;m++){var b=p[m];this.css(b.name,b.val)}s()}}return this},fromString:function(e){return this.resetToDefault(),this.appendFromString(e),this}};e.exports=o},function(e,t,n){"use strict";var r=n(1),i=n(0),o={};!function(){var e=r.regex.number,t=r.regex.rgbaNoBackRefs,n=r.regex.hslaNoBackRefs,a=r.regex.hex3,s=r.regex.hex6,l=function(e){return"^"+e+"\\s*\\(\\s*([\\w\\.]+)\\s*\\)$"},c=function(r){var i=e+"|\\w+|"+t+"|"+n+"|"+a+"|"+s;return"^"+r+"\\s*\\(([\\w\\.]+)\\s*\\,\\s*("+e+")\\s*\\,\\s*("+e+")\\s*,\\s*("+i+")\\s*\\,\\s*("+i+")\\)$"},u=["^url\\s*\\(\\s*['\"]?(.+?)['\"]?\\s*\\)$","^(none)$","^(.+)$"];o.types={time:{number:!0,min:0,units:"s|ms",implicitUnits:"ms"},percent:{number:!0,min:0,max:100,units:"%",implicitUnits:"%"},zeroOneNumber:{number:!0,min:0,max:1,unitless:!0},zeroOneNumbers:{number:!0,min:0,max:1,unitless:!0,multiple:!0},nOneOneNumber:{number:!0,min:-1,max:1,unitless:!0},nonNegativeInt:{number:!0,min:0,integer:!0,unitless:!0},position:{enums:["parent","origin"]},nodeSize:{number:!0,min:0,enums:["label"]},number:{number:!0,unitless:!0},numbers:{number:!0,unitless:!0,multiple:!0},positiveNumber:{number:!0,unitless:!0,min:0,strictMin:!0},size:{number:!0,min:0},bidirectionalSize:{number:!0},bidirectionalSizes:{number:!0,multiple:!0},sizeMaybePercent:{number:!0,min:0,allowPercent:!0},paddingRelativeTo:{enums:["width","height","average","min","max"]},bgWH:{number:!0,min:0,allowPercent:!0,enums:["auto"],multiple:!0},bgPos:{number:!0,allowPercent:!0,multiple:!0},bgRelativeTo:{enums:["inner","include-padding"],multiple:!0},bgRepeat:{enums:["repeat","repeat-x","repeat-y","no-repeat"],multiple:!0},bgFit:{enums:["none","contain","cover"],multiple:!0},bgCrossOrigin:{enums:["anonymous","use-credentials"],multiple:!0},bgClip:{enums:["none","node"]},color:{color:!0},bool:{enums:["yes","no"]},lineStyle:{enums:["solid","dotted","dashed"]},borderStyle:{enums:["solid","dotted","dashed","double"]},curveStyle:{enums:["bezier","unbundled-bezier","haystack","segments"]},fontFamily:{regex:'^([\\w- \\"]+(?:\\s*,\\s*[\\w- \\"]+)*)$'},fontletiant:{enums:["small-caps","normal"]},fontStyle:{enums:["italic","normal","oblique"]},fontWeight:{enums:["normal","bold","bolder","lighter","100","200","300","400","500","600","800","900",100,200,300,400,500,600,700,800,900]},textDecoration:{enums:["none","underline","overline","line-through"]},textTransform:{enums:["none","uppercase","lowercase"]},textWrap:{enums:["none","wrap","ellipsis"]},textBackgroundShape:{enums:["rectangle","roundrectangle"]},nodeShape:{enums:["rectangle","roundrectangle","cutrectangle","bottomroundrectangle","barrel","ellipse","triangle","square","pentagon","hexagon","concavehexagon","heptagon","octagon","tag","star","diamond","vee","rhomboid","polygon"]},compoundIncludeLabels:{enums:["include","exclude"]},arrowShape:{enums:["tee","triangle","triangle-tee","triangle-cross","triangle-backcurve","half-triangle-overshot","vee","square","circle","diamond","none"]},arrowFill:{enums:["filled","hollow"]},display:{enums:["element","none"]},visibility:{enums:["hidden","visible"]},zCompoundDepth:{enums:["bottom","orphan","auto","top"]},zIndexCompare:{enums:["auto","manual"]},valign:{enums:["top","center","bottom"]},halign:{enums:["left","center","right"]},text:{string:!0},data:{mapping:!0,regex:l("data")},layoutData:{mapping:!0,regex:l("layoutData")},scratch:{mapping:!0,regex:l("scratch")},mapData:{mapping:!0,regex:c("mapData")},mapLayoutData:{mapping:!0,regex:c("mapLayoutData")},mapScratch:{mapping:!0,regex:c("mapScratch")},fn:{mapping:!0,fn:!0},url:{regexes:u,singleRegexMatchValue:!0},urls:{regexes:u,singleRegexMatchValue:!0,multiple:!0},propList:{propList:!0},angle:{number:!0,units:"deg|rad",implicitUnits:"rad"},textRotation:{number:!0,units:"deg|rad",implicitUnits:"rad",enums:["none","autorotate"]},polygonPointList:{number:!0,multiple:!0,evenMultiple:!0,min:-1,max:1,unitless:!0},edgeDistances:{enums:["intersection","node-position"]},edgeEndpoint:{number:!0,multiple:!0,units:"%|px|em|deg|rad",implicitUnits:"px",enums:["inside-to-node","outside-to-node","outside-to-line"],singleEnum:!0,validate:function(e,t){switch(e.length){case 2:return"deg"!==t[0]&&"rad"!==t[0]&&"deg"!==t[1]&&"rad"!==t[1];case 1:return i.string(e[0])||"deg"===t[0]||"rad"===t[0];default:return!1}}},easing:{regexes:["^(spring)\\s*\\(\\s*("+e+")\\s*,\\s*("+e+")\\s*\\)$","^(cubic-bezier)\\s*\\(\\s*("+e+")\\s*,\\s*("+e+")\\s*,\\s*("+e+")\\s*,\\s*("+e+")\\s*\\)$"],enums:["linear","ease","ease-in","ease-out","ease-in-out","ease-in-sine","ease-out-sine","ease-in-out-sine","ease-in-quad","ease-out-quad","ease-in-out-quad","ease-in-cubic","ease-out-cubic","ease-in-out-cubic","ease-in-quart","ease-out-quart","ease-in-out-quart","ease-in-quint","ease-out-quint","ease-in-out-quint","ease-in-expo","ease-out-expo","ease-in-out-expo","ease-in-circ","ease-out-circ","ease-in-out-circ"]}};var d={zeroNonZero:function(e,t){return 0===e&&0!==t||0!==e&&0===t},anyDiff:function(e,t){return e!==t}},f=o.types,p=o.properties=[{name:"label",type:f.text},{name:"text-rotation",type:f.textRotation},{name:"text-margin-x",type:f.bidirectionalSize},{name:"text-margin-y",type:f.bidirectionalSize},{name:"source-label",type:f.text},{name:"source-text-rotation",type:f.textRotation},{name:"source-text-margin-x",type:f.bidirectionalSize},{name:"source-text-margin-y",type:f.bidirectionalSize},{name:"source-text-offset",type:f.size},{name:"target-label",type:f.text},{name:"target-text-rotation",type:f.textRotation},{name:"target-text-margin-x",type:f.bidirectionalSize},{name:"target-text-margin-y",type:f.bidirectionalSize},{name:"target-text-offset",type:f.size},{name:"text-valign",type:f.valign},{name:"text-halign",type:f.halign},{name:"color",type:f.color},{name:"text-outline-color",type:f.color},{name:"text-outline-width",type:f.size},{name:"text-outline-opacity",type:f.zeroOneNumber},{name:"text-opacity",type:f.zeroOneNumber},{name:"text-background-color",type:f.color},{name:"text-background-opacity",type:f.zeroOneNumber},{name:"text-background-padding",type:f.size},{name:"text-border-opacity",type:f.zeroOneNumber},{name:"text-border-color",type:f.color},{name:"text-border-width",type:f.size},{name:"text-border-style",type:f.borderStyle},{name:"text-background-shape",type:f.textBackgroundShape},{name:"text-transform",type:f.textTransform},{name:"text-wrap",type:f.textWrap},{name:"text-max-width",type:f.size},{name:"text-events",type:f.bool},{name:"font-family",type:f.fontFamily},{name:"font-style",type:f.fontStyle},{name:"font-weight",type:f.fontWeight},{name:"font-size",type:f.size},{name:"min-zoomed-font-size",type:f.size},{name:"events",type:f.bool},{name:"display",type:f.display,triggersZOrder:d.anyDiff},{name:"visibility",type:f.visibility,triggersZOrder:d.anyDiff},{name:"opacity",type:f.zeroOneNumber,triggersZOrder:d.zeroNonZero},{name:"z-compound-depth",type:f.zCompoundDepth,triggersZOrder:d.anyDiff},{name:"z-index-compare",type:f.zIndexCompare,triggersZOrder:d.anyDiff},{name:"z-index",type:f.nonNegativeInt,triggersZOrder:d.anyDiff},{name:"overlay-padding",type:f.size},{name:"overlay-color",type:f.color},{name:"overlay-opacity",type:f.zeroOneNumber},{name:"transition-property",type:f.propList},{name:"transition-duration",type:f.time},{name:"transition-delay",type:f.time},{name:"transition-timing-function",type:f.easing},{name:"height",type:f.nodeSize},{name:"width",type:f.nodeSize},{name:"shape",type:f.nodeShape},{name:"shape-polygon-points",type:f.polygonPointList},{name:"background-color",type:f.color},{name:"background-opacity",type:f.zeroOneNumber},{name:"background-blacken",type:f.nOneOneNumber},{name:"padding",type:f.sizeMaybePercent},{name:"padding-relative-to",type:f.paddingRelativeTo},{name:"border-color",type:f.color},{name:"border-opacity",type:f.zeroOneNumber},{name:"border-width",type:f.size},{name:"border-style",type:f.borderStyle},{name:"background-image",type:f.urls},{name:"background-image-crossorigin",type:f.bgCrossOrigin},{name:"background-image-opacity",type:f.zeroOneNumbers},{name:"background-position-x",type:f.bgPos},{name:"background-position-y",type:f.bgPos},{name:"background-width-relative-to",type:f.bgRelativeTo},{name:"background-height-relative-to",type:f.bgRelativeTo},{name:"background-repeat",type:f.bgRepeat},{name:"background-fit",type:f.bgFit},{name:"background-clip",type:f.bgClip},{name:"background-width",type:f.bgWH},{name:"background-height",type:f.bgWH},{name:"position",type:f.position},{name:"compound-sizing-wrt-labels",type:f.compoundIncludeLabels},{name:"min-width",type:f.size},{name:"min-width-bias-left",type:f.sizeMaybePercent},{name:"min-width-bias-right",type:f.sizeMaybePercent},{name:"min-height",type:f.size},{name:"min-height-bias-top",type:f.sizeMaybePercent},{name:"min-height-bias-bottom",type:f.sizeMaybePercent},{name:"line-style",type:f.lineStyle},{name:"line-color",type:f.color},{name:"curve-style",type:f.curveStyle},{name:"haystack-radius",type:f.zeroOneNumber},{name:"source-endpoint",type:f.edgeEndpoint},{name:"target-endpoint",type:f.edgeEndpoint},{name:"control-point-step-size",type:f.size},{name:"control-point-distances",type:f.bidirectionalSizes},{name:"control-point-weights",type:f.numbers},{name:"segment-distances",type:f.bidirectionalSizes},{name:"segment-weights",type:f.numbers},{name:"edge-distances",type:f.edgeDistances},{name:"arrow-scale",type:f.positiveNumber},{name:"loop-direction",type:f.angle},{name:"loop-sweep",type:f.angle},{name:"source-distance-from-node",type:f.size},{name:"target-distance-from-node",type:f.size},{name:"ghost",type:f.bool},{name:"ghost-offset-x",type:f.bidirectionalSize},{name:"ghost-offset-y",type:f.bidirectionalSize},{name:"ghost-opacity",type:f.zeroOneNumber},{name:"selection-box-color",type:f.color},{name:"selection-box-opacity",type:f.zeroOneNumber},{name:"selection-box-border-color",type:f.color},{name:"selection-box-border-width",type:f.size},{name:"active-bg-color",type:f.color},{name:"active-bg-opacity",type:f.zeroOneNumber},{name:"active-bg-size",type:f.size},{name:"outside-texture-bg-color",type:f.color},{name:"outside-texture-bg-opacity",type:f.zeroOneNumber}],h=o.aliases=[{name:"content",pointsTo:"label"},{name:"control-point-distance",pointsTo:"control-point-distances"},{name:"control-point-weight",pointsTo:"control-point-weights"},{name:"edge-text-rotation",pointsTo:"text-rotation"},{name:"padding-left",pointsTo:"padding"},{name:"padding-right",pointsTo:"padding"},{name:"padding-top",pointsTo:"padding"},{name:"padding-bottom",pointsTo:"padding"}];o.pieBackgroundN=16,p.push({name:"pie-size",type:f.sizeMaybePercent});for(var g=1;g<=o.pieBackgroundN;g++)p.push({name:"pie-"+g+"-background-color",type:f.color}),p.push({name:"pie-"+g+"-background-size",type:f.percent}),p.push({name:"pie-"+g+"-background-opacity",type:f.zeroOneNumber});var v=o.arrowPrefixes=["source","mid-source","target","mid-target"];[{name:"arrow-shape",type:f.arrowShape},{name:"arrow-color",type:f.color},{name:"arrow-fill",type:f.arrowFill}].forEach((function(e){v.forEach((function(t){var n=t+"-"+e.name,r=e.type;p.push({name:n,type:r})}))}),{}),o.propertyNames=p.map((function(e){return e.name}));for(var m=0;m<p.length;m++){var b=p[m];p[b.name]=b}for(var y=0;y<h.length;y++){var x=h[y],w=p[x.pointsTo],k={name:x.name,alias:!0,pointsTo:w};p.push(k),p[x.name]=k}}(),o.getDefaultProperty=function(e){return this.getDefaultProperties()[e]},o.getDefaultProperties=r.memoize((function(){for(var e=r.extend({events:"yes","text-events":"no","text-valign":"top","text-halign":"center",color:"#000","text-outline-color":"#000","text-outline-width":0,"text-outline-opacity":1,"text-opacity":1,"text-decoration":"none","text-transform":"none","text-wrap":"none","text-max-width":9999,"text-background-color":"#000","text-background-opacity":0,"text-background-shape":"rectangle","text-background-padding":0,"text-border-opacity":0,"text-border-width":0,"text-border-style":"solid","text-border-color":"#000","font-family":"Helvetica Neue, Helvetica, sans-serif","font-style":"normal","font-weight":"normal","font-size":16,"min-zoomed-font-size":0,"text-rotation":"none","source-text-rotation":"none","target-text-rotation":"none",visibility:"visible",display:"element",opacity:1,"z-compound-depth":"auto","z-index-compare":"auto","z-index":0,label:"","text-margin-x":0,"text-margin-y":0,"source-label":"","source-text-offset":0,"source-text-margin-x":0,"source-text-margin-y":0,"target-label":"","target-text-offset":0,"target-text-margin-x":0,"target-text-margin-y":0,"overlay-opacity":0,"overlay-color":"#000","overlay-padding":10,"transition-property":"none","transition-duration":0,"transition-delay":0,"transition-timing-function":"linear","background-blacken":0,"background-color":"#999","background-opacity":1,"background-image":"none","background-image-crossorigin":"anonymous","background-image-opacity":1,"background-position-x":"50%","background-position-y":"50%","background-width-relative-to":"include-padding","background-height-relative-to":"include-padding","background-repeat":"no-repeat","background-fit":"none","background-clip":"node","background-width":"auto","background-height":"auto","border-color":"#000","border-opacity":1,"border-width":0,"border-style":"solid",height:30,width:30,shape:"ellipse","shape-polygon-points":"-1, -1, 1, -1, 1, 1, -1, 1",ghost:"no","ghost-offset-y":0,"ghost-offset-x":0,"ghost-opacity":0,padding:0,"padding-relative-to":"width",position:"origin","compound-sizing-wrt-labels":"include","min-width":0,"min-width-bias-left":0,"min-width-bias-right":0,"min-height":0,"min-height-bias-top":0,"min-height-bias-bottom":0},{"pie-size":"100%"},[{name:"pie-{{i}}-background-color",value:"black"},{name:"pie-{{i}}-background-size",value:"0%"},{name:"pie-{{i}}-background-opacity",value:1}].reduce((function(e,t){for(var n=1;n<=o.pieBackgroundN;n++){var r=t.name.replace("{{i}}",n),i=t.value;e[r]=i}return e}),{}),{"line-style":"solid","line-color":"#999","control-point-step-size":40,"control-point-weights":.5,"segment-weights":.5,"segment-distances":20,"edge-distances":"intersection","curve-style":"bezier","haystack-radius":0,"arrow-scale":1,"loop-direction":"-45deg","loop-sweep":"-90deg","source-distance-from-node":0,"target-distance-from-node":0,"source-endpoint":"outside-to-node","target-endpoint":"outside-to-node"},[{name:"arrow-shape",value:"none"},{name:"arrow-color",value:"#999"},{name:"arrow-fill",value:"filled"}].reduce((function(e,t){return o.arrowPrefixes.forEach((function(n){var r=n+"-"+t.name,i=t.value;e[r]=i})),e}),{})),t={},n=0;n<this.properties.length;n++){var i=this.properties[n];if(!i.pointsTo){var a=i.name,s=e[a],l=this.parse(a,s);t[a]=l}}return t})),o.addDefaultStylesheet=function(){this.selector("$node > node").css({shape:"rectangle",padding:10,"background-color":"#eee","border-color":"#ccc","border-width":1}).selector("edge").css({width:3,"curve-style":"haystack"}).selector(":parent <-> node").css({"curve-style":"bezier","source-endpoint":"outside-to-line","target-endpoint":"outside-to-line"}).selector(":selected").css({"background-color":"#0169D9","line-color":"#0169D9","source-arrow-color":"#0169D9","target-arrow-color":"#0169D9","mid-source-arrow-color":"#0169D9","mid-target-arrow-color":"#0169D9"}).selector("node:parent:selected").css({"background-color":"#CCE1F9","border-color":"#aec8e5"}).selector(":active").css({"overlay-color":"black","overlay-padding":10,"overlay-opacity":.25}).selector("core").css({"selection-box-color":"#ddd","selection-box-opacity":.65,"selection-box-border-color":"#aaa","selection-box-border-width":1,"active-bg-color":"black","active-bg-opacity":.15,"active-bg-size":30,"outside-texture-bg-color":"#000","outside-texture-bg-opacity":.125}),this.defaultLength=this.length},e.exports=o},function(e,t,n){"use strict";var r=n(1),i=n(0),o=n(2),a={parse:function(e,t,n,o){if(i.fn(t))return this.parseImplWarn(e,t,n,o);var a=[e,t,n,"mapping"===o||!0===o||!1===o||null==o?"dontcare":o].join("$"),s=this.propCache=this.propCache||{},l=void 0;return(l=s[a])||(l=s[a]=this.parseImplWarn(e,t,n,o)),(n||"mapping"===o)&&(l=r.copy(l))&&(l.value=r.copy(l.value)),l},parseImplWarn:function(e,t,n,i){var o=this.parseImpl(e,t,n,i);return o||null==t||r.error("The style property `%s: %s` is invalid",e,t),o},parseImpl:function(e,t,n,a){e=r.camel2dash(e);var s=this.properties[e],l=t,c=this.types;if(!s)return null;if(void 0===t)return null;s.alias&&(s=s.pointsTo,e=s.name);var u=i.string(t);u&&(t=t.trim());var d=s.type;if(!d)return null;if(n&&(""===t||null===t))return{name:e,value:t,bypass:!0,deleteBypass:!0};if(i.fn(t))return{name:e,value:t,strValue:"fn",mapped:c.fn,bypass:n};var f=void 0,p=void 0;if(!u||a);else{if(f=new RegExp(c.data.regex).exec(t)){if(n)return!1;var h=c.data;return{name:e,value:f,strValue:""+t,mapped:h,field:f[1],bypass:n}}if(p=new RegExp(c.mapData.regex).exec(t)){if(n)return!1;if(d.multiple)return!1;var g=c.mapData;if(!d.color&&!d.number)return!1;var v=this.parse(e,p[4]);if(!v||v.mapped)return!1;var m=this.parse(e,p[5]);if(!m||m.mapped)return!1;if(v.value===m.value)return!1;if(d.color){var b=v.value,y=m.value;if(!(b[0]!==y[0]||b[1]!==y[1]||b[2]!==y[2]||b[3]!==y[3]&&(null!=b[3]&&1!==b[3]||null!=y[3]&&1!==y[3])))return!1}return{name:e,value:p,strValue:""+t,mapped:g,field:p[1],fieldMin:parseFloat(p[2]),fieldMax:parseFloat(p[3]),valueMin:v.value,valueMax:m.value,bypass:n}}}if(d.multiple&&"multiple"!==a){var x=void 0;if(x=u?t.split(/\s+/):i.array(t)?t:[t],d.evenMultiple&&x.length%2!=0)return null;for(var w=[],k=[],A=[],E=!1,S=0;S<x.length;S++){var C=this.parse(e,x[S],n,"multiple");E=E||i.string(C.value),w.push(C.value),A.push(null!=C.pfValue?C.pfValue:C.value),k.push(C.units)}return d.validate&&!d.validate(w,k)?null:d.singleEnum&&E?1===w.length&&i.string(w[0])?{name:e,value:w[0],strValue:w[0],bypass:n}:null:{name:e,value:w,pfValue:A,strValue:w.map((function(e,t){return e+(k[t]||"")})).join(" "),bypass:n,units:k}}var $=function(){for(var r=0;r<d.enums.length;r++)if(d.enums[r]===t)return{name:e,value:t,strValue:""+t,bypass:n};return null};if(d.number){var O=void 0,_="px";if(d.units&&(O=d.units),d.implicitUnits&&(_=d.implicitUnits),!d.unitless)if(u){var T="px|em"+(d.allowPercent?"|\\%":"");O&&(T=O);var j=t.match("^("+r.regex.number+")("+T+")?$");j&&(t=j[1],O=j[2]||_)}else O&&!d.implicitUnits||(O=_);if(t=parseFloat(t),isNaN(t)&&void 0===d.enums)return null;if(isNaN(t)&&void 0!==d.enums)return t=l,$();if(d.integer&&!i.integer(t))return null;if(void 0!==d.min&&(t<d.min||d.strictMin&&t===d.min)||void 0!==d.max&&(t>d.max||d.strictMax&&t===d.max))return null;var P={name:e,value:t,strValue:""+t+(O||""),units:O,bypass:n};return d.unitless||"px"!==O&&"em"!==O?P.pfValue=t:P.pfValue="px"!==O&&O?this.getEmSizeInPixels()*t:t,"ms"!==O&&"s"!==O||(P.pfValue="ms"===O?t:1e3*t),"deg"!==O&&"rad"!==O||(P.pfValue="rad"===O?t:o.deg2rad(t)),"%"===O&&(P.pfValue=t/100),P}if(d.propList){var D=[],R=""+t;if("none"===R);else{for(var I=R.split(","),N=0;N<I.length;N++){var M=I[N].trim();this.properties[M]&&D.push(M)}if(0===D.length)return null}return{name:e,value:D,strValue:0===D.length?"none":D.join(", "),bypass:n}}if(d.color){var z=r.color2tuple(t);return z?{name:e,value:z,pfValue:z,strValue:""+t,bypass:n}:null}if(d.regex||d.regexes){if(d.enums){var L=$();if(L)return L}for(var B=d.regexes?d.regexes:[d.regex],F=0;F<B.length;F++){var q=new RegExp(B[F]).exec(t);if(q)return{name:e,value:d.singleRegexMatchValue?q[1]:q,strValue:""+t,bypass:n}}return null}return d.string?{name:e,value:""+t,strValue:""+t,bypass:n}:d.enums?$():null}};e.exports=a},function(e,t,n){"use strict";var r=n(0),i=n(3),o=n(2),a={autolock:function(e){return void 0===e?this._private.autolock:(this._private.autolock=!!e,this)},autoungrabify:function(e){return void 0===e?this._private.autoungrabify:(this._private.autoungrabify=!!e,this)},autounselectify:function(e){return void 0===e?this._private.autounselectify:(this._private.autounselectify=!!e,this)},panningEnabled:function(e){return void 0===e?this._private.panningEnabled:(this._private.panningEnabled=!!e,this)},userPanningEnabled:function(e){return void 0===e?this._private.userPanningEnabled:(this._private.userPanningEnabled=!!e,this)},zoomingEnabled:function(e){return void 0===e?this._private.zoomingEnabled:(this._private.zoomingEnabled=!!e,this)},userZoomingEnabled:function(e){return void 0===e?this._private.userZoomingEnabled:(this._private.userZoomingEnabled=!!e,this)},boxSelectionEnabled:function(e){return void 0===e?this._private.boxSelectionEnabled:(this._private.boxSelectionEnabled=!!e,this)},pan:function(){var e=arguments,t=this._private.pan,n=void 0,i=void 0,o=void 0,a=void 0,s=void 0;switch(e.length){case 0:return t;case 1:if(r.string(e[0]))return t[n=e[0]];if(r.plainObject(e[0])){if(!this._private.panningEnabled)return this;a=(o=e[0]).x,s=o.y,r.number(a)&&(t.x=a),r.number(s)&&(t.y=s),this.emit("pan viewport")}break;case 2:if(!this._private.panningEnabled)return this;n=e[0],i=e[1],"x"!==n&&"y"!==n||!r.number(i)||(t[n]=i),this.emit("pan viewport")}return this.notify({type:"viewport"}),this},panBy:function(e,t){var n=arguments,i=this._private.pan,o=void 0,a=void 0,s=void 0,l=void 0,c=void 0;if(!this._private.panningEnabled)return this;switch(n.length){case 1:r.plainObject(e)&&(l=(s=n[0]).x,c=s.y,r.number(l)&&(i.x+=l),r.number(c)&&(i.y+=c),this.emit("pan viewport"));break;case 2:a=t,"x"!==(o=e)&&"y"!==o||!r.number(a)||(i[o]+=a),this.emit("pan viewport")}return this.notify({type:"viewport"}),this},fit:function(e,t){var n=this.getFitViewport(e,t);if(n){var r=this._private;r.zoom=n.zoom,r.pan=n.pan,this.emit("pan zoom viewport"),this.notify({type:"viewport"})}return this},getFitViewport:function(e,t){if(r.number(e)&&void 0===t&&(t=e,e=void 0),this._private.panningEnabled&&this._private.zoomingEnabled){var n=void 0;if(r.string(e)){var i=e;e=this.$(i)}else if(r.boundingBox(e)){var o=e;(n={x1:o.x1,y1:o.y1,x2:o.x2,y2:o.y2}).w=n.x2-n.x1,n.h=n.y2-n.y1}else r.elementOrCollection(e)||(e=this.mutableElements());if(!r.elementOrCollection(e)||!e.empty()){n=n||e.boundingBox();var a=this.width(),s=this.height(),l=void 0;if(t=r.number(t)?t:0,!isNaN(a)&&!isNaN(s)&&a>0&&s>0&&!isNaN(n.w)&&!isNaN(n.h)&&n.w>0&&n.h>0)return{zoom:l=(l=(l=Math.min((a-2*t)/n.w,(s-2*t)/n.h))>this._private.maxZoom?this._private.maxZoom:l)<this._private.minZoom?this._private.minZoom:l,pan:{x:(a-l*(n.x1+n.x2))/2,y:(s-l*(n.y1+n.y2))/2}}}}},minZoom:function(e){return void 0===e?this._private.minZoom:(r.number(e)&&(this._private.minZoom=e),this)},maxZoom:function(e){return void 0===e?this._private.maxZoom:(r.number(e)&&(this._private.maxZoom=e),this)},getZoomedViewport:function(e){var t=this._private,n=t.pan,i=t.zoom,a=void 0,s=void 0,l=!1;if(t.zoomingEnabled||(l=!0),r.number(e)?s=e:r.plainObject(e)&&(s=e.level,null!=e.position?a=o.modelToRenderedPosition(e.position,i,n):null!=e.renderedPosition&&(a=e.renderedPosition),null==a||t.panningEnabled||(l=!0)),s=(s=s>t.maxZoom?t.maxZoom:s)<t.minZoom?t.minZoom:s,l||!r.number(s)||s===i||null!=a&&(!r.number(a.x)||!r.number(a.y)))return null;if(null!=a){var c=n,u=i,d=s;return{zoomed:!0,panned:!0,zoom:d,pan:{x:-d/u*(a.x-c.x)+a.x,y:-d/u*(a.y-c.y)+a.y}}}return{zoomed:!0,panned:!1,zoom:s,pan:n}},zoom:function(e){if(void 0===e)return this._private.zoom;var t=this.getZoomedViewport(e),n=this._private;return null!=t&&t.zoomed?(n.zoom=t.zoom,t.panned&&(n.pan.x=t.pan.x,n.pan.y=t.pan.y),this.emit("zoom"+(t.panned?" pan":"")+" viewport"),this.notify({type:"viewport"}),this):this},viewport:function(e){var t=this._private,n=!0,i=!0,o=[],a=!1,s=!1;if(!e)return this;if(r.number(e.zoom)||(n=!1),r.plainObject(e.pan)||(i=!1),!n&&!i)return this;if(n){var l=e.zoom;l<t.minZoom||l>t.maxZoom||!t.zoomingEnabled?a=!0:(t.zoom=l,o.push("zoom"))}if(i&&(!a||!e.cancelOnFailedZoom)&&t.panningEnabled){var c=e.pan;r.number(c.x)&&(t.pan.x=c.x,s=!1),r.number(c.y)&&(t.pan.y=c.y,s=!1),s||o.push("pan")}return o.length>0&&(o.push("viewport"),this.emit(o.join(" ")),this.notify({type:"viewport"})),this},center:function(e){var t=this.getCenterPan(e);return t&&(this._private.pan=t,this.emit("pan viewport"),this.notify({type:"viewport"})),this},getCenterPan:function(e,t){if(this._private.panningEnabled){if(r.string(e)){var n=e;e=this.mutableElements().filter(n)}else r.elementOrCollection(e)||(e=this.mutableElements());if(0!==e.length){var i=e.boundingBox(),o=this.width(),a=this.height();return{x:(o-(t=void 0===t?this._private.zoom:t)*(i.x1+i.x2))/2,y:(a-t*(i.y1+i.y2))/2}}}},reset:function(){return this._private.panningEnabled&&this._private.zoomingEnabled?(this.viewport({pan:{x:0,y:0},zoom:1}),this):this},invalidateSize:function(){this._private.sizeCache=null},size:function(){var e,t,n=this._private,r=n.container;return n.sizeCache=n.sizeCache||(r?(e=i.getComputedStyle(r),t=function(t){return parseFloat(e.getPropertyValue(t))},{width:r.clientWidth-t("padding-left")-t("padding-right"),height:r.clientHeight-t("padding-top")-t("padding-bottom")}):{width:1,height:1})},width:function(){return this.size().width},height:function(){return this.size().height},extent:function(){var e=this._private.pan,t=this._private.zoom,n=this.renderedExtent(),r={x1:(n.x1-e.x)/t,x2:(n.x2-e.x)/t,y1:(n.y1-e.y)/t,y2:(n.y2-e.y)/t};return r.w=r.x2-r.x1,r.h=r.y2-r.y1,r},renderedExtent:function(){var e=this.width(),t=this.height();return{x1:0,y1:0,x2:e,y2:t,w:e,h:t}}};a.centre=a.center,a.autolockNodes=a.autolock,a.autoungrabifyNodes=a.autoungrabify,e.exports=a},function(e,t,n){"use strict";var r=n(1),i=n(4),o=n(7),a=n(12),s=n(95),l=n(0),c=n(11),u={},d={};function f(e,t,n){var s=n,d=function(n){r.error("Can not register `"+t+"` for `"+e+"` since `"+n+"` already exists in the prototype and can not be overridden")};if("core"===e){if(a.prototype[t])return d(t);a.prototype[t]=n}else if("collection"===e){if(o.prototype[t])return d(t);o.prototype[t]=n}else if("layout"===e){for(var f=function(e){this.options=e,n.call(this,e),l.plainObject(this._private)||(this._private={}),this._private.cy=e.cy,this._private.listeners=[],this.createEmitter()},h=f.prototype=Object.create(n.prototype),g=[],v=0;v<g.length;v++){var m=g[v];h[m]=h[m]||function(){return this}}h.start&&!h.run?h.run=function(){return this.start(),this}:!h.start&&h.run&&(h.start=function(){return this.run(),this});var b=n.prototype.stop;h.stop=function(){var e=this.options;if(e&&e.animate){var t=this.animations;if(t)for(var n=0;n<t.length;n++)t[n].stop()}return b?b.call(this):this.emit("layoutstop"),this},h.destroy||(h.destroy=function(){return this}),h.cy=function(){return this._private.cy};var y=function(e){return e._private.cy};r.assign(h,{createEmitter:function(){return this._private.emitter=new c({eventFields:function(e){return{layout:e,cy:y(e),target:e}},bubble:function(){return!0},parent:function(e){return y(e)},context:this}),this},emitter:function(){return this._private.emitter},on:function(e,t){return this.emitter().on(e,t),this},one:function(e,t){return this.emitter().one(e,t),this},once:function(e,t){return this.emitter().one(e,t),this},removeListener:function(e,t){return this.emitter().removeListener(e,t),this},emit:function(e,t){return this.emitter().emit(e,t),this}}),i.eventAliasesOn(h),s=f}else if("renderer"===e&&"null"!==t&&"base"!==t){var x=p("renderer","base"),w=x.prototype,k=n,A=n.prototype,E=function(){x.apply(this,arguments),k.apply(this,arguments)},S=E.prototype;for(var C in w){var $=w[C];if(null!=A[C])return d(C);S[C]=$}for(var O in A)S[O]=A[O];w.clientFunctions.forEach((function(e){S[e]=S[e]||function(){r.error("Renderer does not implement `renderer."+e+"()` on its prototype")}})),s=E}return r.setMap({map:u,keys:[e,t],value:s})}function p(e,t){return r.getMap({map:u,keys:[e,t]})}function h(e,t,n,i,o){return r.setMap({map:d,keys:[e,t,n,i],value:o})}function g(e,t,n,i){return r.getMap({map:d,keys:[e,t,n,i]})}var v=function(){return 2===arguments.length?p.apply(null,arguments):3===arguments.length?f.apply(null,arguments):4===arguments.length?g.apply(null,arguments):5===arguments.length?h.apply(null,arguments):void r.error("Invalid extension access syntax")};a.prototype.extension=v,s.forEach((function(e){e.extensions.forEach((function(t){f(e.type,t.name,t.impl)}))})),e.exports=v},function(e,t,n){"use strict";e.exports=[{type:"layout",extensions:n(96)},{type:"renderer",extensions:n(105)}]},function(e,t,n){"use strict";e.exports=[{name:"breadthfirst",impl:n(97)},{name:"circle",impl:n(98)},{name:"concentric",impl:n(99)},{name:"cose",impl:n(100)},{name:"grid",impl:n(101)},{name:"null",impl:n(102)},{name:"preset",impl:n(103)},{name:"random",impl:n(104)}]},function(e,t,n){"use strict";var r=n(1),i=n(2),o=n(0),a={fit:!0,directed:!1,padding:30,circle:!1,spacingFactor:1.75,boundingBox:void 0,avoidOverlap:!0,nodeDimensionsIncludeLabels:!1,roots:void 0,maximalAdjustments:0,animate:!1,animationDuration:500,animationEasing:void 0,animateFilter:function(e,t){return!0},ready:void 0,stop:void 0,transform:function(e,t){return t}};function s(e){this.options=r.extend({},a,e)}s.prototype.run=function(){var e=this.options,t=e,n=e.cy,r=t.eles,a=r.nodes().not(":parent"),s=r,l=i.makeBoundingBox(t.boundingBox?t.boundingBox:{x1:0,y1:0,w:n.width(),h:n.height()}),c=void 0;if(o.elementOrCollection(t.roots))c=t.roots;else if(o.array(t.roots)){for(var u=[],d=0;d<t.roots.length;d++){var f=t.roots[d],p=n.getElementById(f);u.push(p)}c=n.collection(u)}else if(o.string(t.roots))c=n.$(t.roots);else if(t.directed)c=a.roots();else{for(var h=[],g=a,v=function(){var e=n.collection();r.bfs({roots:g[0],visit:function(t,n,r,i,o){e=e.add(t)},directed:!1}),g=g.not(e),h.push(e)};g.length>0;)v();c=n.collection();for(var m=function(e){var t=h[e],n=t.maxDegree(!1),r=t.filter((function(e){return e.degree(!1)===n}));c=c.add(r)},b=0;b<h.length;b++)m(b)}var y=[],x={},w={},k={},A={},E={};s.bfs({roots:c,directed:t.directed,visit:function(e,t,n,r,i){var o=e[0],a=o.id();if(y[i]||(y[i]=[]),y[i].push(o),x[a]=!0,w[a]=i,k[a]=n,A[a]=t,n){var s=n.id();(E[s]=E[s]||[]).push(e)}}});for(var S=[],C=0;C<a.length;C++){var $=a[C];x[$.id()]||S.push($)}for(var O=3*S.length,_=0;0!==S.length&&_<O;){for(var T=S.shift(),j=T.neighborhood().nodes(),P=!1,D=0;D<j.length;D++){var R=w[j[D].id()];if(void 0!==R){y[R].push(T),P=!0;break}}P||S.push(T),_++}for(;0!==S.length;){var I=S.shift();0===y.length&&y.push([]),y[0].push(I)}var N=function(){for(var e=0;e<y.length;e++)for(var t=y[e],n=0;n<t.length;n++){var r=t[n];null!=r?r._private.scratch.breadthfirst={depth:e,index:n}:(t.splice(n,1),n--)}};N();for(var M=function(e){for(var t=e.connectedEdges((function(t){return t.data("target")===e.id()})),n=e._private.scratch.breadthfirst,r=0,i=void 0,o=0;o<t.length;o++){var a=t[o].source()[0],s=a._private.scratch.breadthfirst;n.depth<=s.depth&&r<s.depth&&(r=s.depth,i=a)}return i},z=0;z<t.maximalAdjustments;z++){for(var L=y.length,B=[],F=0;F<L;F++)for(var q=y[F],V=q.length,U=0;U<V;U++){var H=q[U],G=H._private.scratch.breadthfirst,W=M(H);W&&(G.intEle=W,B.push(H))}for(var Y=0;Y<B.length;Y++){var X=B[Y],Z=X._private.scratch.breadthfirst,Q=Z.intEle._private.scratch.breadthfirst;y[Z.depth][Z.index]=null;for(var J=Q.depth+1;J>y.length-1;)y.push([]);y[J].push(X),Z.depth=J,Z.index=y[J].length-1}N()}var K=0;if(t.avoidOverlap)for(var ee=0;ee<a.length;ee++){var te=a[ee].layoutDimensions(t),ne=te.w,re=te.h;K=Math.max(K,ne,re)}for(var ie={},oe=function(e){if(ie[e.id()])return ie[e.id()];for(var t=e._private.scratch.breadthfirst.depth,n=e.neighborhood().nodes().not(":parent").intersection(a),r=0,i=0,o=0;o<n.length;o++){var s=n[o]._private.scratch.breadthfirst,l=s.index,c=s.depth,u=y[c].length;(t>c||0===t)&&(r+=l/u,i++)}return r/=i=Math.max(1,i),0===i&&(r=void 0),ie[e.id()]=r,r},ae=function(e,t){return oe(e)-oe(t)},se=0;se<3;se++){for(var le=0;le<y.length;le++)y[le]=y[le].sort(ae);N()}for(var ce=0,ue=0;ue<y.length;ue++)ce=Math.max(y[ue].length,ce);for(var de=l.x1+l.w/2,fe=l.x1+l.h/2,pe=function(e,n){var r=e._private.scratch.breadthfirst,i=r.depth,o=r.index,a=y[i].length,s=Math.max(l.w/(a+1),K),c=Math.max(l.h/(y.length+1),K),u=Math.min(l.w/2/y.length,l.h/2/y.length);if(u=Math.max(u,K),t.circle){if(t.circle){var d=u*i+u-(y.length>0&&y[0].length<=3?u/2:0),f=2*Math.PI/y[i].length*o;return 0===i&&1===y[0].length&&(d=1),{x:de+d*Math.cos(f),y:fe+d*Math.sin(f)}}return{x:de+(o+1-(a+1)/2)*s,y:(i+1)*c}}var p={x:de+(o+1-(a+1)/2)*s,y:(i+1)*c};return p},he={},ge=y.length-1;ge>=0;ge--)for(var ve=y[ge],me=0;me<ve.length;me++){var be=ve[me];he[be.id()]=pe(be,y.length)}return a.layoutPositions(this,t,(function(e){return he[e.id()]})),this},e.exports=s},function(e,t,n){"use strict";var r=n(1),i=n(2),o=n(0),a={fit:!0,padding:30,boundingBox:void 0,avoidOverlap:!0,nodeDimensionsIncludeLabels:!1,spacingFactor:void 0,radius:void 0,startAngle:1.5*Math.PI,sweep:void 0,clockwise:!0,sort:void 0,animate:!1,animationDuration:500,animationEasing:void 0,animateFilter:function(e,t){return!0},ready:void 0,stop:void 0,transform:function(e,t){return t}};function s(e){this.options=r.extend({},a,e)}s.prototype.run=function(){var e=this.options,t=e,n=e.cy,r=t.eles,a=void 0!==t.counterclockwise?!t.counterclockwise:t.clockwise,s=r.nodes().not(":parent");t.sort&&(s=s.sort(t.sort));for(var l=i.makeBoundingBox(t.boundingBox?t.boundingBox:{x1:0,y1:0,w:n.width(),h:n.height()}),c=l.x1+l.w/2,u=l.y1+l.h/2,d=(void 0===t.sweep?2*Math.PI-2*Math.PI/s.length:t.sweep)/Math.max(1,s.length-1),f=void 0,p=0,h=0;h<s.length;h++){var g=s[h].layoutDimensions(t),v=g.w,m=g.h;p=Math.max(p,v,m)}if(f=o.number(t.radius)?t.radius:s.length<=1?0:Math.min(l.h,l.w)/2-p,s.length>1&&t.avoidOverlap){p*=1.75;var b=Math.cos(d)-Math.cos(0),y=Math.sin(d)-Math.sin(0),x=Math.sqrt(p*p/(b*b+y*y));f=Math.max(x,f)}return s.layoutPositions(this,t,(function(e,n){var r=t.startAngle+n*d*(a?1:-1),i=f*Math.cos(r),o=f*Math.sin(r);return{x:c+i,y:u+o}})),this},e.exports=s},function(e,t,n){"use strict";var r=n(1),i=n(2),o={fit:!0,padding:30,startAngle:1.5*Math.PI,sweep:void 0,clockwise:!0,equidistant:!1,minNodeSpacing:10,boundingBox:void 0,avoidOverlap:!0,nodeDimensionsIncludeLabels:!1,height:void 0,width:void 0,spacingFactor:void 0,concentric:function(e){return e.degree()},levelWidth:function(e){return e.maxDegree()/4},animate:!1,animationDuration:500,animationEasing:void 0,animateFilter:function(e,t){return!0},ready:void 0,stop:void 0,transform:function(e,t){return t}};function a(e){this.options=r.extend({},o,e)}a.prototype.run=function(){for(var e=this.options,t=e,n=void 0!==t.counterclockwise?!t.counterclockwise:t.clockwise,r=e.cy,o=t.eles.nodes().not(":parent"),a=i.makeBoundingBox(t.boundingBox?t.boundingBox:{x1:0,y1:0,w:r.width(),h:r.height()}),s=a.x1+a.w/2,l=a.y1+a.h/2,c=[],u=(t.startAngle,0),d=0;d<o.length;d++){var f,p=o[d];f=t.concentric(p),c.push({value:f,node:p}),p._private.scratch.concentric=f}o.updateStyle();for(var h=0;h<o.length;h++){var g=o[h].layoutDimensions(t);u=Math.max(u,g.w,g.h)}c.sort((function(e,t){return t.value-e.value}));for(var v=t.levelWidth(o),m=[[]],b=m[0],y=0;y<c.length;y++){var x=c[y];b.length>0&&Math.abs(b[0].value-x.value)>=v&&(b=[],m.push(b)),b.push(x)}var w=u+t.minNodeSpacing;if(!t.avoidOverlap){var k=m.length>0&&m[0].length>1,A=(Math.min(a.w,a.h)/2-w)/(m.length+k?1:0);w=Math.min(w,A)}for(var E=0,S=0;S<m.length;S++){var C=m[S],$=void 0===t.sweep?2*Math.PI-2*Math.PI/C.length:t.sweep,O=C.dTheta=$/Math.max(1,C.length-1);if(C.length>1&&t.avoidOverlap){var _=Math.cos(O)-Math.cos(0),T=Math.sin(O)-Math.sin(0),j=Math.sqrt(w*w/(_*_+T*T));E=Math.max(j,E)}C.r=E,E+=w}if(t.equidistant){for(var P=0,D=0,R=0;R<m.length;R++){var I=m[R].r-D;P=Math.max(P,I)}D=0;for(var N=0;N<m.length;N++){var M=m[N];0===N&&(D=M.r),M.r=D,D+=P}}for(var z={},L=0;L<m.length;L++)for(var B=m[L],F=B.dTheta,q=B.r,V=0;V<B.length;V++){var U=B[V],H=t.startAngle+(n?1:-1)*F*V,G={x:s+q*Math.cos(H),y:l+q*Math.sin(H)};z[U.node.id()]=G}return o.layoutPositions(this,t,(function(e){var t=e.id();return z[t]})),this},e.exports=a},function(e,t,n){"use strict";var r,i=n(1),o=n(2),a=n(0),s=n(5),l={ready:function(){},stop:function(){},animate:!0,animationEasing:void 0,animationDuration:void 0,animateFilter:function(e,t){return!0},animationThreshold:250,refresh:20,fit:!0,padding:30,boundingBox:void 0,nodeDimensionsIncludeLabels:!1,randomize:!1,componentSpacing:40,nodeRepulsion:function(e){return 2048},nodeOverlap:4,idealEdgeLength:function(e){return 32},edgeElasticity:function(e){return 32},nestingFactor:1.2,gravity:1,numIter:1e3,initialTemp:1e3,coolingFactor:.99,minTemp:1,weaver:!1};function c(e){this.options=i.extend({},l,e),this.options.layout=this}c.prototype.run=function(){var e=this.options,t=e.cy,n=this,o=this.thread,l=e.weaver?e.weaver.Thread:null,c={listeners:[],on:function(e,t){return this.listeners.push({event:e,callback:t}),this},trigger:function(e){a.string(e)&&(e={type:e});var t=function(t){t.callback(e)};return this.listeners.filter((function(t){return t.event===e.type})).forEach(t),this},pass:function(e){return this.pass=e,this},run:function(e){var t=this.pass;return new s((function(n){n(e(t))}))},stop:function(){return this},stopped:function(){return!0}};o&&!o.stopped()||(o=this.thread=l?new l:c),n.stopped=!1,!0!==e.animate&&!1!==e.animate||n.emit({type:"layoutstart",layout:n}),r=!0===e.debug;var d=u(t,n,e);r&&p(d),e.randomize&&h(d,t);var f=Date.now(),v=!1,m=function(n){n=n||{},v&&!n.next||!n.force&&Date.now()-f<e.animationThreshold||(v=!0,i.requestAnimationFrame((function(){g(d,t,e),!0===e.fit&&t.fit(e.padding),v=!1,n.next&&n.next()})))};o.on("message",(function(e){var t=e.message;d.layoutNodes=t,m()})),o.pass({layoutInfo:d,options:{animate:e.animate,refresh:e.refresh,componentSpacing:e.componentSpacing,nodeOverlap:e.nodeOverlap,nestingFactor:e.nestingFactor,gravity:e.gravity,numIter:e.numIter,initialTemp:e.initialTemp,coolingFactor:e.coolingFactor,minTemp:e.minTemp}}).run((function(e){var t,n,r=e.layoutInfo,i=e.options,o=function(e,t){for(var n=0;n<e.graphSet.length;n++)for(var r=e.graphSet[n],i=r.length,o=0;o<i;o++)for(var a=e.layoutNodes[e.idToIndex[r[o]]],l=o+1;l<i;l++){var c=e.layoutNodes[e.idToIndex[r[l]]];s(a,c,e,t)}},a=function(e){return-e+2*e*Math.random()},s=function(e,t,n,r){if(e.cmptId===t.cmptId||n.isCompound){var i=t.positionX-e.positionX,o=t.positionY-e.positionY;0===i&&0===o&&(i=a(1),o=a(1));var s=l(e,t,i,o);if(s>0)var c=(f=r.nodeOverlap*s)*i/(b=Math.sqrt(i*i+o*o)),d=f*o/b;else{var f,p=u(e,i,o),h=u(t,-1*i,-1*o),g=h.x-p.x,v=h.y-p.y,m=g*g+v*v,b=Math.sqrt(m);c=(f=(e.nodeRepulsion+t.nodeRepulsion)/m)*g/b,d=f*v/b}e.isLocked||(e.offsetX-=c,e.offsetY-=d),t.isLocked||(t.offsetX+=c,t.offsetY+=d)}},l=function(e,t,n,r){if(n>0)var i=e.maxX-t.minX;else i=t.maxX-e.minX;if(r>0)var o=e.maxY-t.minY;else o=t.maxY-e.minY;return i>=0&&o>=0?Math.sqrt(i*i+o*o):0},u=function(e,t,n){var r=e.positionX,i=e.positionY,o=e.height||1,a=e.width||1,s=n/t,l=o/a,c={};return 0===t&&0<n||0===t&&0>n?(c.x=r,c.y=i+o/2,c):0<t&&-1*l<=s&&s<=l?(c.x=r+a/2,c.y=i+a*n/2/t,c):0>t&&-1*l<=s&&s<=l?(c.x=r-a/2,c.y=i-a*n/2/t,c):0<n&&(s<=-1*l||s>=l)?(c.x=r+o*t/2/n,c.y=i+o/2,c):0>n&&(s<=-1*l||s>=l)?(c.x=r-o*t/2/n,c.y=i-o/2,c):c},d=function(e,t){for(var n=0;n<e.edgeSize;n++){var r=e.layoutEdges[n],i=e.idToIndex[r.sourceId],o=e.layoutNodes[i],a=e.idToIndex[r.targetId],s=e.layoutNodes[a],l=s.positionX-o.positionX,c=s.positionY-o.positionY;if(0!==l||0!==c){var d=u(o,l,c),f=u(s,-1*l,-1*c),p=f.x-d.x,h=f.y-d.y,g=Math.sqrt(p*p+h*h),v=Math.pow(r.idealLength-g,2)/r.elasticity;if(0!==g)var m=v*p/g,b=v*h/g;else m=0,b=0;o.isLocked||(o.offsetX+=m,o.offsetY+=b),s.isLocked||(s.offsetX-=m,s.offsetY-=b)}}},f=function(e,t){for(var n=0;n<e.graphSet.length;n++){var r=e.graphSet[n],i=r.length;if(0===n)var o=e.clientHeight/2,a=e.clientWidth/2;else{var s=e.layoutNodes[e.idToIndex[r[0]]],l=e.layoutNodes[e.idToIndex[s.parentId]];o=l.positionX,a=l.positionY}for(var c=0;c<i;c++){var u=e.layoutNodes[e.idToIndex[r[c]]];if(!u.isLocked){var d=o-u.positionX,f=a-u.positionY,p=Math.sqrt(d*d+f*f);if(p>1){var h=t.gravity*d/p,g=t.gravity*f/p;u.offsetX+=h,u.offsetY+=g}}}}},p=function(e,t){var n=[],r=0,i=-1;for(n.push.apply(n,e.graphSet[0]),i+=e.graphSet[0].length;r<=i;){var o=n[r++],a=e.idToIndex[o],s=e.layoutNodes[a],l=s.children;if(0<l.length&&!s.isLocked){for(var c=s.offsetX,u=s.offsetY,d=0;d<l.length;d++){var f=e.layoutNodes[e.idToIndex[l[d]]];f.offsetX+=c,f.offsetY+=u,n[++i]=l[d]}s.offsetX=0,s.offsetY=0}}},h=function(e,t){for(var n=0;n<e.nodeSize;n++)0<(i=e.layoutNodes[n]).children.length&&(i.maxX=void 0,i.minX=void 0,i.maxY=void 0,i.minY=void 0);for(n=0;n<e.nodeSize;n++)if(!(0<(i=e.layoutNodes[n]).children.length||i.isLocked)){var r=g(i.offsetX,i.offsetY,e.temperature);i.positionX+=r.x,i.positionY+=r.y,i.offsetX=0,i.offsetY=0,i.minX=i.positionX-i.width,i.maxX=i.positionX+i.width,i.minY=i.positionY-i.height,i.maxY=i.positionY+i.height,v(i,e)}for(n=0;n<e.nodeSize;n++){var i;0<(i=e.layoutNodes[n]).children.length&&!i.isLocked&&(i.positionX=(i.maxX+i.minX)/2,i.positionY=(i.maxY+i.minY)/2,i.width=i.maxX-i.minX,i.height=i.maxY-i.minY)}},g=function(e,t,n){var r=Math.sqrt(e*e+t*t);if(r>n)var i={x:n*e/r,y:n*t/r};else i={x:e,y:t};return i},v=function e(t,n){var r=t.parentId;if(null!=r){var i=n.layoutNodes[n.idToIndex[r]],o=!1;return(null==i.maxX||t.maxX+i.padRight>i.maxX)&&(i.maxX=t.maxX+i.padRight,o=!0),(null==i.minX||t.minX-i.padLeft<i.minX)&&(i.minX=t.minX-i.padLeft,o=!0),(null==i.maxY||t.maxY+i.padBottom>i.maxY)&&(i.maxY=t.maxY+i.padBottom,o=!0),(null==i.minY||t.minY-i.padTop<i.minY)&&(i.minY=t.minY-i.padTop,o=!0),o?e(i,n):void 0}},m=function(e){return function(e,t,n){o(e,t),d(e,t),f(e,t),p(e,t),h(e,t)}(r,i),r.temperature=r.temperature*i.coolingFactor,!(r.temperature<i.minTemp)},b=0;do{for(var y=0;y<i.refresh&&b<i.numIter;){var x;if(!(x=m()))break;y++,b++}!0===i.animate&&(t=r.layoutNodes,n=void 0,n={type:"message",message:t},c.trigger(n))}while(x&&b+1<i.numIter);return function(e,t){for(var n=r.layoutNodes,i=[],o=0;o<n.length;o++){var a=n[o],s=a.cmptId;(i[s]=i[s]||[]).push(a)}var l=0;for(o=0;o<i.length;o++)if(v=i[o]){v.x1=1/0,v.x2=-1/0,v.y1=1/0,v.y2=-1/0;for(var c=0;c<v.length;c++){var u=v[c];v.x1=Math.min(v.x1,u.positionX-u.width/2),v.x2=Math.max(v.x2,u.positionX+u.width/2),v.y1=Math.min(v.y1,u.positionY-u.height/2),v.y2=Math.max(v.y2,u.positionY+u.height/2)}v.w=v.x2-v.x1,v.h=v.y2-v.y1,l+=v.w*v.h}i.sort((function(e,t){return t.w*t.h-e.w*e.h}));var d=0,f=0,p=0,h=0,g=Math.sqrt(l)*r.clientWidth/r.clientHeight;for(o=0;o<i.length;o++){var v;if(v=i[o]){for(c=0;c<v.length;c++)(u=v[c]).isLocked||(u.positionX+=d,u.positionY+=f);d+=v.w+t.componentSpacing,p+=v.w+t.componentSpacing,h=Math.max(h,v.h),p>g&&(f+=h+t.componentSpacing,d=0,p=0,h=0)}}}(0,i),r})).then((function(e){d.layoutNodes=e.layoutNodes,o.stop(),b()}));var b=function(){!0===e.animate||!1===e.animate?m({force:!0,next:function(){n.one("layoutstop",e.stop),n.emit({type:"layoutstop",layout:n})}}):e.eles.nodes().layoutPositions(n,e,(function(e){var t=d.layoutNodes[d.idToIndex[e.data("id")]];return{x:t.positionX,y:t.positionY}}))};return this},c.prototype.stop=function(){return this.stopped=!0,this.thread&&this.thread.stop(),this.emit("layoutstop"),this},c.prototype.destroy=function(){return this.thread&&this.thread.stop(),this};var u=function(e,t,n){for(var r=n.eles.edges(),i=n.eles.nodes(),s={isCompound:e.hasCompoundNodes(),layoutNodes:[],idToIndex:{},nodeSize:i.size(),graphSet:[],indexToGraph:[],layoutEdges:[],edgeSize:r.size(),temperature:n.initialTemp,clientWidth:e.width(),clientHeight:e.width(),boundingBox:o.makeBoundingBox(n.boundingBox?n.boundingBox:{x1:0,y1:0,w:e.width(),h:e.height()})},l=n.eles.components(),c={},u=0;u<l.length;u++)for(var f=l[u],p=0;p<f.length;p++)c[f[p].id()]=u;for(u=0;u<s.nodeSize;u++){var h=(y=i[u]).layoutDimensions(n);(I={}).isLocked=y.locked(),I.id=y.data("id"),I.parentId=y.data("parent"),I.cmptId=c[y.id()],I.children=[],I.positionX=y.position("x"),I.positionY=y.position("y"),I.offsetX=0,I.offsetY=0,I.height=h.w,I.width=h.h,I.maxX=I.positionX+I.width/2,I.minX=I.positionX-I.width/2,I.maxY=I.positionY+I.height/2,I.minY=I.positionY-I.height/2,I.padLeft=parseFloat(y.style("padding")),I.padRight=parseFloat(y.style("padding")),I.padTop=parseFloat(y.style("padding")),I.padBottom=parseFloat(y.style("padding")),I.nodeRepulsion=a.fn(n.nodeRepulsion)?n.nodeRepulsion(y):n.nodeRepulsion,s.layoutNodes.push(I),s.idToIndex[I.id]=u}var g=[],v=0,m=-1,b=[];for(u=0;u<s.nodeSize;u++){var y,x=(y=s.layoutNodes[u]).parentId;null!=x?s.layoutNodes[s.idToIndex[x]].children.push(y.id):(g[++m]=y.id,b.push(y.id))}for(s.graphSet.push(b);v<=m;){var w=g[v++],k=s.idToIndex[w],A=s.layoutNodes[k].children;if(A.length>0)for(s.graphSet.push(A),u=0;u<A.length;u++)g[++m]=A[u]}for(u=0;u<s.graphSet.length;u++){var E=s.graphSet[u];for(p=0;p<E.length;p++){var S=s.idToIndex[E[p]];s.indexToGraph[S]=u}}for(u=0;u<s.edgeSize;u++){var C=r[u],$={};$.id=C.data("id"),$.sourceId=C.data("source"),$.targetId=C.data("target");var O=a.fn(n.idealEdgeLength)?n.idealEdgeLength(C):n.idealEdgeLength,_=a.fn(n.edgeElasticity)?n.edgeElasticity(C):n.edgeElasticity,T=s.idToIndex[$.sourceId],j=s.idToIndex[$.targetId];if(s.indexToGraph[T]!=s.indexToGraph[j]){for(var P=d($.sourceId,$.targetId,s),D=s.graphSet[P],R=0,I=s.layoutNodes[T];-1===D.indexOf(I.id);)I=s.layoutNodes[s.idToIndex[I.parentId]],R++;for(I=s.layoutNodes[j];-1===D.indexOf(I.id);)I=s.layoutNodes[s.idToIndex[I.parentId]],R++;O*=R*n.nestingFactor}$.idealLength=O,$.elasticity=_,s.layoutEdges.push($)}return s},d=function(e,t,n){var r=f(e,t,0,n);return 2>r.count?0:r.graph},f=function e(t,n,r,i){var o=i.graphSet[r];if(-1<o.indexOf(t)&&-1<o.indexOf(n))return{count:2,graph:r};for(var a=0,s=0;s<o.length;s++){var l=o[s],c=i.idToIndex[l],u=i.layoutNodes[c].children;if(0!==u.length){var d=e(t,n,i.indexToGraph[i.idToIndex[u[0]]],i);if(0!==d.count){if(1!==d.count)return d;if(2==++a)break}}}return{count:a,graph:r}},p=function(e){if(r){console.debug("layoutNodes:");for(var t=0;t<e.nodeSize;t++){var n=e.layoutNodes[t],i="\nindex: "+t+"\nId: "+n.id+"\nChildren: "+n.children.toString()+"\nparentId: "+n.parentId+"\npositionX: "+n.positionX+"\npositionY: "+n.positionY+"\nOffsetX: "+n.offsetX+"\nOffsetY: "+n.offsetY+"\npadLeft: "+n.padLeft+"\npadRight: "+n.padRight+"\npadTop: "+n.padTop+"\npadBottom: "+n.padBottom;console.debug(i)}for(var t in console.debug("idToIndex"),e.idToIndex)console.debug("Id: "+t+"\nIndex: "+e.idToIndex[t]);console.debug("Graph Set");var o=e.graphSet;for(t=0;t<o.length;t++)console.debug("Set : "+t+": "+o[t].toString());for(i="IndexToGraph",t=0;t<e.indexToGraph.length;t++)i+="\nIndex : "+t+" Graph: "+e.indexToGraph[t];for(console.debug(i),i="Layout Edges",t=0;t<e.layoutEdges.length;t++){var a=e.layoutEdges[t];i+="\nEdge Index: "+t+" ID: "+a.id+" SouceID: "+a.sourceId+" TargetId: "+a.targetId+" Ideal Length: "+a.idealLength}console.debug(i),i="nodeSize: "+e.nodeSize,i+="\nedgeSize: "+e.edgeSize,i+="\ntemperature: "+e.temperature,console.debug(i)}},h=function(e,t){for(var n=e.clientWidth,r=e.clientHeight,i=0;i<e.nodeSize;i++){var o=e.layoutNodes[i];0!==o.children.length||o.isLocked||(o.positionX=Math.random()*n,o.positionY=Math.random()*r)}},g=function(e,t,n){var r=n.layout,i=n.eles.nodes(),o=e.boundingBox,a={x1:1/0,x2:-1/0,y1:1/0,y2:-1/0};n.boundingBox&&(i.forEach((function(t){var n=e.layoutNodes[e.idToIndex[t.data("id")]];a.x1=Math.min(a.x1,n.positionX),a.x2=Math.max(a.x2,n.positionX),a.y1=Math.min(a.y1,n.positionY),a.y2=Math.max(a.y2,n.positionY)})),a.w=a.x2-a.x1,a.h=a.y2-a.y1),i.positions((function(t,r){var i=e.layoutNodes[e.idToIndex[t.data("id")]];if(n.boundingBox){var s=(i.positionX-a.x1)/a.w,l=(i.positionY-a.y1)/a.h;return{x:o.x1+s*o.w,y:o.y1+l*o.h}}return{x:i.positionX,y:i.positionY}})),!0!==e.ready&&(e.ready=!0,r.one("layoutready",n.ready),r.emit({type:"layoutready",layout:this}))};e.exports=c},function(e,t,n){"use strict";var r=n(1),i=n(2),o={fit:!0,padding:30,boundingBox:void 0,avoidOverlap:!0,avoidOverlapPadding:10,nodeDimensionsIncludeLabels:!1,spacingFactor:void 0,condense:!1,rows:void 0,cols:void 0,position:function(e){},sort:void 0,animate:!1,animationDuration:500,animationEasing:void 0,animateFilter:function(e,t){return!0},ready:void 0,stop:void 0,transform:function(e,t){return t}};function a(e){this.options=r.extend({},o,e)}a.prototype.run=function(){var e=this.options,t=e,n=e.cy,r=t.eles.nodes().not(":parent");t.sort&&(r=r.sort(t.sort));var o=i.makeBoundingBox(t.boundingBox?t.boundingBox:{x1:0,y1:0,w:n.width(),h:n.height()});if(0===o.h||0===o.w)r.layoutPositions(this,t,(function(e){return{x:o.x1,y:o.y1}}));else{var a=r.size(),s=Math.sqrt(a*o.h/o.w),l=Math.round(s),c=Math.round(o.w/o.h*s),u=function(e){if(null==e)return Math.min(l,c);Math.min(l,c)==l?l=e:c=e},d=function(e){if(null==e)return Math.max(l,c);Math.max(l,c)==l?l=e:c=e},f=t.rows,p=null!=t.cols?t.cols:t.columns;if(null!=f&&null!=p)l=f,c=p;else if(null!=f&&null==p)l=f,c=Math.ceil(a/l);else if(null==f&&null!=p)c=p,l=Math.ceil(a/c);else if(c*l>a){var h=u(),g=d();(h-1)*g>=a?u(h-1):(g-1)*h>=a&&d(g-1)}else for(;c*l<a;){var v=u(),m=d();(m+1)*v>=a?d(m+1):u(v+1)}var b=o.w/c,y=o.h/l;if(t.condense&&(b=0,y=0),t.avoidOverlap)for(var x=0;x<r.length;x++){var w=r[x],k=w._private.position;null!=k.x&&null!=k.y||(k.x=0,k.y=0);var A=w.layoutDimensions(t),E=t.avoidOverlapPadding,S=A.w+E,C=A.h+E;b=Math.max(b,S),y=Math.max(y,C)}for(var $={},O=function(e,t){return!!$["c-"+e+"-"+t]},_=function(e,t){$["c-"+e+"-"+t]=!0},T=0,j=0,P=function(){++j>=c&&(j=0,T++)},D={},R=0;R<r.length;R++){var I=r[R],N=t.position(I);if(N&&(void 0!==N.row||void 0!==N.col)){var M={row:N.row,col:N.col};if(void 0===M.col)for(M.col=0;O(M.row,M.col);)M.col++;else if(void 0===M.row)for(M.row=0;O(M.row,M.col);)M.row++;D[I.id()]=M,_(M.row,M.col)}}r.layoutPositions(this,t,(function(e,t){var n=void 0,r=void 0;if(e.locked()||e.isParent())return!1;var i=D[e.id()];if(i)n=i.col*b+b/2+o.x1,r=i.row*y+y/2+o.y1;else{for(;O(T,j);)P();n=j*b+b/2+o.x1,r=T*y+y/2+o.y1,_(T,j),P()}return{x:n,y:r}}))}return this},e.exports=a},function(e,t,n){"use strict";var r=n(1),i={ready:function(){},stop:function(){}};function o(e){this.options=r.extend({},i,e)}o.prototype.run=function(){var e=this.options,t=e.eles;return e.cy,this.emit("layoutstart"),t.nodes().positions((function(){return{x:0,y:0}})),this.one("layoutready",e.ready),this.emit("layoutready"),this.one("layoutstop",e.stop),this.emit("layoutstop"),this},o.prototype.stop=function(){return this},e.exports=o},function(e,t,n){"use strict";var r=n(1),i=n(0),o={positions:void 0,zoom:void 0,pan:void 0,fit:!0,padding:30,animate:!1,animationDuration:500,animationEasing:void 0,animateFilter:function(e,t){return!0},ready:void 0,stop:void 0,transform:function(e,t){return t}};function a(e){this.options=r.extend({},o,e)}a.prototype.run=function(){var e=this.options,t=e.eles.nodes(),n=i.fn(e.positions);return t.layoutPositions(this,e,(function(t,r){var i=function(t){if(null==e.positions)return null;if(n)return e.positions(t);var r=e.positions[t._private.data.id];return null==r?null:r}(t);return!t.locked()&&null!=i&&i})),this},e.exports=a},function(e,t,n){"use strict";var r=n(1),i=n(2),o={fit:!0,padding:30,boundingBox:void 0,animate:!1,animationDuration:500,animationEasing:void 0,animateFilter:function(e,t){return!0},ready:void 0,stop:void 0,transform:function(e,t){return t}};function a(e){this.options=r.extend({},o,e)}a.prototype.run=function(){var e=this.options,t=e.cy,n=e.eles.nodes().not(":parent"),r=i.makeBoundingBox(e.boundingBox?e.boundingBox:{x1:0,y1:0,w:t.width(),h:t.height()});return n.layoutPositions(this,e,(function(e,t){return{x:r.x1+Math.round(Math.random()*r.w),y:r.y1+Math.round(Math.random()*r.h)}})),this},e.exports=a},function(e,t,n){"use strict";e.exports=[{name:"null",impl:n(106)},{name:"base",impl:n(107)},{name:"canvas",impl:n(123)}]},function(e,t,n){"use strict";function r(e){this.options=e,this.notifications=0}var i=function(){};r.prototype={recalculateRenderedStyle:i,notify:function(){this.notifications++},init:i},e.exports=r},function(e,t,n){"use strict";var r=n(0),i=n(1),o=n(3),a=function(e){this.init(e)},s=a.prototype;s.clientFunctions=["redrawHint","render","renderTo","matchCanvasSize","nodeShapeImpl","arrowShapeImpl"],s.init=function(e){var t=this;t.options=e,t.cy=e.cy;var n=t.container=e.cy.container();if(o){var r=o.document,a=r.head,s="__________cytoscape_container",l=null!=r.getElementById("__________cytoscape_stylesheet");if(n.className.indexOf(s)<0&&(n.className=(n.className||"")+" "+s),!l){var c=r.createElement("style");c.id="__________cytoscape_stylesheet",c.innerHTML="."+s+" { position: relative; }",a.insertBefore(c,a.children[0])}"static"===o.getComputedStyle(n).getPropertyValue("position")&&i.error("A Cytoscape container has style position:static and so can not use UI extensions properly")}t.selection=[void 0,void 0,void 0,void 0,0],t.bezierProjPcts=[.05,.225,.4,.5,.6,.775,.95],t.hoverData={down:null,last:null,downTime:null,triggerMode:null,dragging:!1,initialPan:[null,null],capture:!1},t.dragData={possibleDragElements:[]},t.touchData={start:null,capture:!1,startPosition:[null,null,null,null,null,null],singleTouchStartTime:null,singleTouchMoved:!0,now:[null,null,null,null,null,null],earlier:[null,null,null,null,null,null]},t.redraws=0,t.showFps=e.showFps,t.debug=e.debug,t.hideEdgesOnViewport=e.hideEdgesOnViewport,t.hideLabelsOnViewport=e.hideLabelsOnViewport,t.textureOnViewport=e.textureOnViewport,t.wheelSensitivity=e.wheelSensitivity,t.motionBlurEnabled=e.motionBlur,t.forcedPixelRatio=e.pixelRatio,t.motionBlur=e.motionBlur,t.motionBlurOpacity=e.motionBlurOpacity,t.motionBlurTransparency=1-t.motionBlurOpacity,t.motionBlurPxRatio=1,t.mbPxRBlurry=1,t.minMbLowQualFrames=4,t.fullQualityMb=!1,t.clearedForMotionBlur=[],t.desktopTapThreshold=e.desktopTapThreshold,t.desktopTapThreshold2=e.desktopTapThreshold*e.desktopTapThreshold,t.touchTapThreshold=e.touchTapThreshold,t.touchTapThreshold2=e.touchTapThreshold*e.touchTapThreshold,t.tapholdDuration=500,t.bindings=[],t.beforeRenderCallbacks=[],t.beforeRenderPriorities={animations:400,eleCalcs:300,eleTxrDeq:200,lyrTxrDeq:100},t.registerNodeShapes(),t.registerArrowShapes(),t.registerCalculationListeners()},s.notify=function(e){var t,n=this;if(!this.destroyed){t=r.array(e.type)?e.type:[e.type];for(var i={},o=0;o<t.length;o++)i[t[o]]=!0;i.init?n.load():i.destroy?n.destroy():((i.add||i.remove||i.load||i.zorder)&&n.invalidateCachedZSortedEles(),i.viewport&&n.redrawHint("select",!0),(i.load||i.resize)&&(n.invalidateContainerClientCoordsCache(),n.matchCanvasSize(n.container)),n.redrawHint("eles",!0),n.redrawHint("drag",!0),this.startRenderLoop(),this.redraw())}},s.destroy=function(){var e=this;e.destroyed=!0,e.cy.stopAnimationLoop();for(var t=0;t<e.bindings.length;t++){var n=e.bindings[t],r=n.target;(r.off||r.removeEventListener).apply(r,n.args)}if(e.bindings=[],e.beforeRenderCallbacks=[],e.onUpdateEleCalcsFns=[],e.removeObserver&&e.removeObserver.disconnect(),e.styleObserver&&e.styleObserver.disconnect(),e.labelCalcDiv)try{document.body.removeChild(e.labelCalcDiv)}catch(e){}},[n(108),n(109),n(119),n(120),n(121),n(122)].forEach((function(e){i.extend(s,e)})),e.exports=a},function(e,t,n){"use strict";var r=n(2),i=n(0),o=n(1),a={arrowShapeWidth:.3,registerArrowShapes:function(){var e=this.arrowShapes={},t=this,n=function(e,t,n,r,i,o,a){var s=i.x-n/2-a,l=i.x+n/2+a,c=i.y-n/2-a,u=i.y+n/2+a;return s<=e&&e<=l&&c<=t&&t<=u},a=function(e,t,n,r,i){var o=e*Math.cos(r)-t*Math.sin(r),a=(e*Math.sin(r)+t*Math.cos(r))*n;return{x:o*n+i.x,y:a+i.y}},s=function(e,t,n,r){for(var i=[],o=0;o<e.length;o+=2){var s=e[o],l=e[o+1];i.push(a(s,l,t,n,r))}return i},l=function(e){for(var t=[],n=0;n<e.length;n++){var r=e[n];t.push(r.x,r.y)}return t},c=function(e){return e.pstyle("width").pfValue*e.pstyle("arrow-scale").pfValue*2},u=function(a,u){i.string(u)&&(u=e[u]),e[a]=o.extend({name:a,points:[-.15,-.3,.15,-.3,.15,.3,-.15,.3],collide:function(e,t,n,i,o,a){var c=l(s(this.points,n+2*a,i,o));return r.pointInsidePolygonPoints(e,t,c)},roughCollide:n,draw:function(e,n,r,i){var o=s(this.points,n,r,i);t.arrowShapeImpl("polygon")(e,o)},spacing:function(e){return 0},gap:c},u)};u("none",{collide:o.falsify,roughCollide:o.falsify,draw:o.noop,spacing:o.zeroify,gap:o.zeroify}),u("triangle",{points:[-.15,-.3,0,0,.15,-.3]}),u("arrow","triangle"),u("triangle-backcurve",{points:e.triangle.points,controlPoint:[0,-.15],roughCollide:n,draw:function(e,n,r,i,o){var l=s(this.points,n,r,i),c=this.controlPoint,u=a(c[0],c[1],n,r,i);t.arrowShapeImpl(this.name)(e,l,u)},gap:function(e){return.8*c(e)}}),u("triangle-tee",{points:[-.15,-.3,0,0,.15,-.3,-.15,-.3],pointsTee:[-.15,-.4,-.15,-.5,.15,-.5,.15,-.4],collide:function(e,t,n,i,o,a,c){var u=l(s(this.points,n+2*c,i,o)),d=l(s(this.pointsTee,n+2*c,i,o));return r.pointInsidePolygonPoints(e,t,u)||r.pointInsidePolygonPoints(e,t,d)},draw:function(e,n,r,i,o){var a=s(this.points,n,r,i),l=s(this.pointsTee,n,r,i);t.arrowShapeImpl(this.name)(e,a,l)}}),u("triangle-cross",{points:[-.15,-.3,0,0,.15,-.3,-.15,-.3],baseCrossLinePts:[-.15,-.4,-.15,-.4,.15,-.4,.15,-.4],crossLinePts:function(e,t){var n=this.baseCrossLinePts.slice(),r=t/e;return n[3]=n[3]-r,n[5]=n[5]-r,n},collide:function(e,t,n,i,o,a,c){var u=l(s(this.points,n+2*c,i,o)),d=l(s(this.crossLinePts(n,a),n+2*c,i,o));return r.pointInsidePolygonPoints(e,t,u)||r.pointInsidePolygonPoints(e,t,d)},draw:function(e,n,r,i,o){var a=s(this.points,n,r,i),l=s(this.crossLinePts(n,o),n,r,i);t.arrowShapeImpl(this.name)(e,a,l)}}),u("vee",{points:[-.15,-.3,0,0,.15,-.3,0,-.15],gap:function(e){return.525*c(e)}}),u("circle",{radius:.15,collide:function(e,t,n,r,i,o,a){var s=i;return Math.pow(s.x-e,2)+Math.pow(s.y-t,2)<=Math.pow((n+2*a)*this.radius,2)},draw:function(e,n,r,i,o){t.arrowShapeImpl(this.name)(e,i.x,i.y,this.radius*n)},spacing:function(e){return t.getArrowWidth(e.pstyle("width").pfValue,e.pstyle("arrow-scale").value)*this.radius}}),u("tee",{points:[-.15,0,-.15,-.1,.15,-.1,.15,0],spacing:function(e){return 1},gap:function(e){return 1}}),u("square",{points:[-.15,0,.15,0,.15,-.3,-.15,-.3]}),u("diamond",{points:[-.15,-.15,0,-.3,.15,-.15,0,0],gap:function(e){return e.pstyle("width").pfValue*e.pstyle("arrow-scale").value}})}};e.exports=a},function(e,t,n){"use strict";var r=n(1),i={};[n(110),n(111),n(112),n(113),n(114),n(115),n(116),n(117),n(118)].forEach((function(e){r.extend(i,e)})),e.exports=i},function(e,t,n){"use strict";var r=n(3),i=n(2),o=n(1),a=(r=n(3),{projectIntoViewport:function(e,t){var n=this.cy,r=this.findContainerClientCoords(),i=r[0],o=r[1],a=r[4],s=n.pan(),l=n.zoom();return[((e-i)/a-s.x)/l,((t-o)/a-s.y)/l]},findContainerClientCoords:function(){if(this.containerBB)return this.containerBB;var e=this.container,t=e.getBoundingClientRect(),n=r.getComputedStyle(e),i=function(e){return parseFloat(n.getPropertyValue(e))},o=i("padding-left"),a=i("padding-right"),s=i("padding-top"),l=i("padding-bottom"),c=i("border-left-width"),u=i("border-right-width"),d=i("border-top-width"),f=(i("border-bottom-width"),e.clientWidth),p=e.clientHeight,h=o+a,g=s+l,v=c+u,m=t.width/(f+v),b=f-h,y=p-g,x=(t.width,t.height,t.left+o+c),w=t.top+s+d;return this.containerBB=[x,w,b,y,m]},invalidateContainerClientCoordsCache:function(){this.containerBB=null},findNearestElement:function(e,t,n,r){return this.findNearestElements(e,t,n,r)[0]},findNearestElements:function(e,t,n,r){var a,s,l=this,c=this,u=c.getCachedZSortedEles(),d=[],f=c.cy.zoom(),p=c.cy.hasCompoundNodes(),h=(r?24:8)/f,g=(r?8:2)/f,v=(r?8:2)/f,m=1/0;function b(e,t){if(e.isNode()){if(s)return;s=e,d.push(e)}if(e.isEdge()&&(null==t||t<m))if(a){if(a.pstyle("z-index").value===e.pstyle("z-index").value)for(var n=0;n<d.length;n++)if(d[n].isEdge()){d[n]=e,a=e,m=null!=t?t:m;break}}else d.push(e),a=e,m=null!=t?t:m}function y(n){var r=n.outerWidth()+2*g,i=n.outerHeight()+2*g,o=r/2,a=i/2,s=n.position();if(s.x-o<=e&&e<=s.x+o&&s.y-a<=t&&t<=s.y+a&&c.nodeShapes[l.getNodeShape(n)].checkPoint(e,t,0,r,i,s.x,s.y))return b(n,0),!0}function x(n){var r,o=n._private,a=o.rscratch,s=n.pstyle("width").pfValue,u=n.pstyle("arrow-scale").value,f=s/2+h,g=f*f,v=2*f,m=o.source,x=o.target;if("segments"===a.edgeType||"straight"===a.edgeType||"haystack"===a.edgeType){for(var w=a.allpts,k=0;k+3<w.length;k+=2)if(i.inLineVicinity(e,t,w[k],w[k+1],w[k+2],w[k+3],v)&&g>(r=i.sqdistToFiniteLine(e,t,w[k],w[k+1],w[k+2],w[k+3])))return b(n,r),!0}else if("bezier"===a.edgeType||"multibezier"===a.edgeType||"self"===a.edgeType||"compound"===a.edgeType)for(w=a.allpts,k=0;k+5<a.allpts.length;k+=4)if(i.inBezierVicinity(e,t,w[k],w[k+1],w[k+2],w[k+3],w[k+4],w[k+5],v)&&g>(r=i.sqdistToQuadraticBezier(e,t,w[k],w[k+1],w[k+2],w[k+3],w[k+4],w[k+5])))return b(n,r),!0;m=m||o.source,x=x||o.target;var A=l.getArrowWidth(s,u),E=[{name:"source",x:a.arrowStartX,y:a.arrowStartY,angle:a.srcArrowAngle},{name:"target",x:a.arrowEndX,y:a.arrowEndY,angle:a.tgtArrowAngle},{name:"mid-source",x:a.midX,y:a.midY,angle:a.midsrcArrowAngle},{name:"mid-target",x:a.midX,y:a.midY,angle:a.midtgtArrowAngle}];for(k=0;k<E.length;k++){var S=E[k],C=c.arrowShapes[n.pstyle(S.name+"-arrow-shape").value],$=n.pstyle("width").pfValue;if(C.roughCollide(e,t,A,S.angle,{x:S.x,y:S.y},$,h)&&C.collide(e,t,A,S.angle,{x:S.x,y:S.y},$,h))return b(n),!0}p&&d.length>0&&(y(m),y(x))}function w(e,t,n){return o.getPrefixedProperty(e,t,n)}function k(n,r){var o,a=n._private,s=v;o=r?r+"-":"";var l=n.pstyle(o+"label").value;if("yes"===n.pstyle("text-events").strValue&&l){var c=a.rstyle,u=n.pstyle("text-border-width").pfValue,d=n.pstyle("text-background-padding").pfValue,f=w(c,"labelWidth",r)+u+2*s+2*d,p=w(c,"labelHeight",r)+u+2*s+2*d,h=w(c,"labelX",r),g=w(c,"labelY",r),m=w(a.rscratch,"labelAngle",r),y=h-f/2,x=h+f/2,k=g-p/2,A=g+p/2;if(m){var E=Math.cos(m),S=Math.sin(m),C=function(e,t){return{x:(e-=h)*E-(t-=g)*S+h,y:e*S+t*E+g}},$=C(y,k),O=C(y,A),_=C(x,k),T=C(x,A),j=[$.x,$.y,_.x,_.y,T.x,T.y,O.x,O.y];if(i.pointInsidePolygonPoints(e,t,j))return b(n),!0}else{var P={w:f,h:p,x1:y,x2:x,y1:k,y2:A};if(i.inBoundingBox(P,e,t))return b(n),!0}}}n&&(u=u.interactive);for(var A=u.length-1;A>=0;A--){var E=u[A];E.isNode()?y(E)||k(E):x(E)||k(E)||k(E,"source")||k(E,"target")}return d},getAllInBox:function(e,t,n,r){var o=this.getCachedZSortedEles().interactive,a=[],s=Math.min(e,n),l=Math.max(e,n),c=Math.min(t,r),u=Math.max(t,r);e=s,n=l,t=c,r=u;for(var d=i.makeBoundingBox({x1:e,y1:t,x2:n,y2:r}),f=0;f<o.length;f++){var p=o[f];if(p.isNode()){var h=p,g=h.boundingBox({includeNodes:!0,includeEdges:!1,includeLabels:!1});i.boundingBoxesIntersect(d,g)&&!i.boundingBoxInBoundingBox(g,d)&&a.push(h)}else{var v=p,m=v._private,b=m.rscratch;if(null!=b.startX&&null!=b.startY&&!i.inBoundingBox(d,b.startX,b.startY))continue;if(null!=b.endX&&null!=b.endY&&!i.inBoundingBox(d,b.endX,b.endY))continue;if("bezier"===b.edgeType||"multibezier"===b.edgeType||"self"===b.edgeType||"compound"===b.edgeType||"segments"===b.edgeType||"haystack"===b.edgeType){for(var y=m.rstyle.bezierPts||m.rstyle.linePts||m.rstyle.haystackPts,x=!0,w=0;w<y.length;w++)if(!i.pointInBoundingBox(d,y[w])){x=!1;break}x&&a.push(v)}else"haystack"!==b.edgeType&&"straight"!==b.edgeType||a.push(v)}}return a}});e.exports=a},function(e,t,n){"use strict";var r=n(2),i={calculateArrowAngles:function(e){var t,n,i,o,a,s,l=e._private.rscratch,c="haystack"===l.edgeType,u="bezier"===l.edgeType,d="multibezier"===l.edgeType,f="segments"===l.edgeType,p="compound"===l.edgeType,h="self"===l.edgeType;if(c?(i=l.haystackPts[0],o=l.haystackPts[1],a=l.haystackPts[2],s=l.haystackPts[3]):(i=l.arrowStartX,o=l.arrowStartY,a=l.arrowEndX,s=l.arrowEndY),v=l.midX,m=l.midY,f)t=i-l.segpts[0],n=o-l.segpts[1];else if(d||p||h||u){var g=l.allpts;t=i-r.qbezierAt(g[0],g[2],g[4],.1),n=o-r.qbezierAt(g[1],g[3],g[5],.1)}else t=i-v,n=o-m;l.srcArrowAngle=r.getAngleFromDisp(t,n);var v=l.midX,m=l.midY;if(c&&(v=(i+a)/2,m=(o+s)/2),t=a-i,n=s-o,f)if((g=l.allpts).length/2%2==0){var b=(y=g.length/2)-2;t=g[y]-g[b],n=g[y+1]-g[b+1]}else{b=(y=g.length/2-1)-2;var y,x=y+2;t=g[y]-g[b],n=g[y+1]-g[b+1]}else if(d||p||h){var w,k,A,E,g=l.allpts;if(l.ctrlpts.length/2%2==0){var S=2+(C=2+($=g.length/2-1));w=r.qbezierAt(g[$],g[C],g[S],0),k=r.qbezierAt(g[$+1],g[C+1],g[S+1],0),A=r.qbezierAt(g[$],g[C],g[S],1e-4),E=r.qbezierAt(g[$+1],g[C+1],g[S+1],1e-4)}else{var C,$=(C=g.length/2-1)-2;S=C+2,w=r.qbezierAt(g[$],g[C],g[S],.4999),k=r.qbezierAt(g[$+1],g[C+1],g[S+1],.4999),A=r.qbezierAt(g[$],g[C],g[S],.5),E=r.qbezierAt(g[$+1],g[C+1],g[S+1],.5)}t=A-w,n=E-k}if(l.midtgtArrowAngle=r.getAngleFromDisp(t,n),l.midDispX=t,l.midDispY=n,t*=-1,n*=-1,f&&((g=l.allpts).length/2%2==0||(t=-(g[x=2+(y=g.length/2-1)]-g[y]),n=-(g[x+1]-g[y+1]))),l.midsrcArrowAngle=r.getAngleFromDisp(t,n),f)t=a-l.segpts[l.segpts.length-2],n=s-l.segpts[l.segpts.length-1];else if(d||p||h||u){var O=(g=l.allpts).length;t=a-r.qbezierAt(g[O-6],g[O-4],g[O-2],.9),n=s-r.qbezierAt(g[O-5],g[O-3],g[O-1],.9)}else t=a-v,n=s-m;l.tgtArrowAngle=r.getAngleFromDisp(t,n)}};i.getArrowWidth=i.getArrowHeight=function(e,t){var n=this.arrowWidthCache=this.arrowWidthCache||{},r=n[e+", "+t];return r||(r=Math.max(Math.pow(13.37*e,.9),29)*t,n[e+", "+t]=r,r)},e.exports=i},function(e,t,n){"use strict";var r=n(2),i=n(0),o={};function a(e){var t=[];if(null!=e){for(var n=0;n<e.length;n+=2){var r=e[n],i=e[n+1];t.push({x:r,y:i})}return t}}o.findEdgeControlPoints=function(e){if(e&&0!==e.length){for(var t,n,o,a,s,l=this,c=l.cy.hasCompoundNodes(),u={},d=[],f=[],p=0;p<e.length;p++){var h=(Ft=(Bt=e[p])._private).data,g="unbundled-bezier"===(D=Bt.pstyle("curve-style").value)||"segments"===D,v="unbundled-bezier"===D||"bezier"===D;if("none"!==Bt.pstyle("display").value)if("haystack"!==D){var m=h.source,b=h.target;t=m>b?b+"$-$"+m:m+"$-$"+b,g&&(t="unbundled$-$"+h.id);var y=u[t];null==y&&(y=u[t]=[],d.push(t)),y.push(Bt),g&&(y.hasUnbundled=!0),v&&(y.hasBezier=!0)}else f.push(Bt)}for(var x=0;x<d.length;x++){var w=u[t=d[x]];if(w.sort((function(e,t){return e.poolIndex()-t.poolIndex()})),Ht=w[0]._private.source,Gt=w[0]._private.target,!w.hasUnbundled&&Ht.id()>Gt.id()){var k=Ht;Ht=Gt,Gt=k}Wt=Ht.position(),Yt=Gt.position(),Xt=Ht.outerWidth(),Qt=Ht.outerHeight(),Zt=Gt.outerWidth(),Jt=Gt.outerHeight(),n=l.nodeShapes[this.getNodeShape(Ht)],o=l.nodeShapes[this.getNodeShape(Gt)],s=!1;var A={north:0,west:0,south:0,east:0,northwest:0,southwest:0,northeast:0,southeast:0},E=Wt.x,S=Wt.y,C=Xt,$=Qt,O=Yt.x,_=Yt.y,T=Zt,j=Jt,P=w.length;for(p=0;p<w.length;p++){var D,R,I=(Vt=(Bt=w[p])._private.rscratch).lastEdgeIndex,N=p,M=Vt.lastNumEdges,z=(g="unbundled-bezier"===(D=Bt.pstyle("curve-style").value)||"segments"===D,Ht.id()!==Bt.source().id()),L=Bt.pstyle("control-point-distances"),B=Bt.pstyle("loop-direction").pfValue,F=Bt.pstyle("loop-sweep").pfValue,q=Bt.pstyle("control-point-weights"),V=L&&q?Math.min(L.value.length,q.value.length):1,U=Bt.pstyle("control-point-step-size").pfValue,H=L?L.pfValue[0]:void 0,G=q.value[0],W=Bt.pstyle("edge-distances").value,Y=Bt.pstyle("segment-weights"),X=Bt.pstyle("segment-distances"),Z=Math.min(Y.pfValue.length,X.pfValue.length),Q=Bt.pstyle("source-endpoint").value,J=Bt.pstyle("target-endpoint").value,K=Bt.pstyle("source-arrow-shape").value,ee=Bt.pstyle("target-arrow-shape").value,te=Bt.pstyle("arrow-scale").value,ne=Bt.pstyle("width").pfValue,re=Vt.lastSrcCtlPtX,ie=Vt.lastSrcCtlPtY,oe=Vt.lastSrcCtlPtW,ae=Vt.lastSrcCtlPtH,se=Vt.lastTgtCtlPtX,le=Vt.lastTgtCtlPtY,ce=Vt.lastTgtCtlPtW,ue=Vt.lastTgtCtlPtH,de=Vt.lastCurveStyle,fe=D,pe=Vt.lastCtrlptDists,he=L?L.strValue:null,ge=Vt.lastCtrlptWs,ve=q.strValue,me=Vt.lastSegmentWs,be=Y.strValue,ye=Vt.lastSegmentDs,xe=X.strValue,we=Vt.lastStepSize,ke=U,Ae=Vt.lastLoopDir,Ee=B,Se=Vt.lastLoopSwp,Ce=F,$e=Vt.lastEdgeDistances,Oe=W,_e=Vt.lastSrcEndpt,Te=Q,je=Vt.lastTgtEndpt,Pe=J,De=Vt.lastSrcArr,Re=K,Ie=Vt.lastTgtArr,Ne=ee,Me=Vt.lastLineW,ze=ne,Le=Vt.lastArrScl,Be=te;if(Vt.badBezier=!!s,re===E&&ie===S&&oe===C&&ae===$&&se===O&&le===_&&ce===T&&ue===j&&de===fe&&pe===he&&ge===ve&&me===be&&ye===xe&&we===ke&&Ae===Ee&&Se===Ce&&$e===Oe&&_e===Te&&je===Pe&&De===Re&&Ie===Ne&&Me===ze&&Le===Be&&(I===N&&M===P||g)?R=!0:(R=!1,Vt.lastSrcCtlPtX=E,Vt.lastSrcCtlPtY=S,Vt.lastSrcCtlPtW=C,Vt.lastSrcCtlPtH=$,Vt.lastTgtCtlPtX=O,Vt.lastTgtCtlPtY=_,Vt.lastTgtCtlPtW=T,Vt.lastTgtCtlPtH=j,Vt.lastEdgeIndex=N,Vt.lastNumEdges=P,Vt.lastCurveStyle=fe,Vt.lastCtrlptDists=he,Vt.lastCtrlptWs=ve,Vt.lastSegmentDs=xe,Vt.lastSegmentWs=be,Vt.lastStepSize=ke,Vt.lastLoopDir=Ee,Vt.lastLoopSwp=Ce,Vt.lastEdgeDistances=Oe,Vt.lastSrcEndpt=Te,Vt.lastTgtEndpt=Pe,Vt.lastSrcArr=Re,Vt.lastTgtArr=Ne,Vt.lastLineW=ze,Vt.lastArrScl=Be),!R){if(!w.calculatedIntersection&&Ht!==Gt&&(w.hasBezier||w.hasUnbundled)){w.calculatedIntersection=!0;var Fe=n.intersectLine(Wt.x,Wt.y,Xt,Qt,Yt.x,Yt.y,0);w.srcIntn=Fe;var qe=o.intersectLine(Yt.x,Yt.y,Zt,Jt,Wt.x,Wt.y,0);w.tgtIntn=qe;var Ve={x1:Fe[0],x2:qe[0],y1:Fe[1],y2:qe[1]},Ue={x1:Wt.x,x2:Yt.x,y1:Wt.y,y2:Yt.y},He=qe[1]-Fe[1],Ge=qe[0]-Fe[0],We=Math.sqrt(Ge*Ge+He*He),Ye={x:Ge,y:He},Xe={x:Ye.x/We,y:Ye.y/We};a={x:-Xe.y,y:Xe.x},o.checkPoint(Fe[0],Fe[1],0,Zt,Jt,Yt.x,Yt.y)&&n.checkPoint(qe[0],qe[1],0,Xt,Qt,Wt.x,Wt.y)&&(a={},s=!0)}if(z?(Vt.srcIntn=w.tgtIntn,Vt.tgtIntn=w.srcIntn):(Vt.srcIntn=w.srcIntn,Vt.tgtIntn=w.tgtIntn),Ht===Gt){Vt.edgeType="self";var Ze=p,Qe=U;g&&(Ze=0,Qe=H);var Je=B-Math.PI/2,Ke=Je-F/2,et=Je+F/2,tt=String(B+"_"+F);Ze=void 0===A[tt]?A[tt]=0:++A[tt],Vt.ctrlpts=[Wt.x+1.4*Math.cos(Ke)*Qe*(Ze/3+1),Wt.y+1.4*Math.sin(Ke)*Qe*(Ze/3+1),Wt.x+1.4*Math.cos(et)*Qe*(Ze/3+1),Wt.y+1.4*Math.sin(et)*Qe*(Ze/3+1)]}else if(c&&(Ht.isParent()||Ht.isChild()||Gt.isParent()||Gt.isChild())&&(Ht.parents().anySame(Gt)||Gt.parents().anySame(Ht))){Vt.edgeType="compound",Vt.badBezier=!1,Ze=p,Qe=U,g&&(Ze=0,Qe=H);var nt={x:Wt.x-Xt/2,y:Wt.y-Qt/2},rt={x:Yt.x-Zt/2,y:Yt.y-Jt/2},it={x:Math.min(nt.x,rt.x),y:Math.min(nt.y,rt.y)},ot=Math.max(.5,Math.log(.01*Xt)),at=Math.max(.5,Math.log(.01*Zt));Vt.ctrlpts=[it.x,it.y-(1+Math.pow(50,1.12)/100)*Qe*(Ze/3+1)*ot,it.x-(1+Math.pow(50,1.12)/100)*Qe*(Ze/3+1)*at,it.y]}else if("segments"===D){Vt.edgeType="segments",Vt.segpts=[];for(var st=0;st<Z;st++){var lt=Y.pfValue[st],ct=X.pfValue[st],ut=1-lt,dt=lt,ft={x:(bt="node-position"===W?Ue:Ve).x1*ut+bt.x2*dt,y:bt.y1*ut+bt.y2*dt};Vt.segpts.push(ft.x+a.x*ct,ft.y+a.y*ct)}}else if(w.length%2!=1||p!==Math.floor(w.length/2)||g){var pt=g;Vt.edgeType=pt?"multibezier":"bezier",Vt.ctrlpts=[];for(var ht=0;ht<V;ht++){var gt,vt=(.5-w.length/2+p)*U,mt=r.signum(vt);pt&&(H=L?L.pfValue[ht]:U,G=q.value[ht]);var bt,yt=void 0!==(gt=g?H:void 0!==H?mt*H:void 0)?gt:vt;ut=1-G,dt=G,z&&(k=ut,ut=dt,dt=k),ft={x:(bt="node-position"===W?Ue:Ve).x1*ut+bt.x2*dt,y:bt.y1*ut+bt.y2*dt},Vt.ctrlpts.push(ft.x+a.x*yt,ft.y+a.y*yt)}}else Vt.edgeType="straight";this.findEndpoints(Bt);var xt=!i.number(Vt.startX)||!i.number(Vt.startY),wt=!i.number(Vt.arrowStartX)||!i.number(Vt.arrowStartY),kt=!i.number(Vt.endX)||!i.number(Vt.endY),At=!i.number(Vt.arrowEndX)||!i.number(Vt.arrowEndY),Et=this.getArrowWidth(Bt.pstyle("width").pfValue,Bt.pstyle("arrow-scale").value)*this.arrowShapeWidth*3;if("bezier"===Vt.edgeType){var St=r.dist({x:Vt.ctrlpts[0],y:Vt.ctrlpts[1]},{x:Vt.startX,y:Vt.startY}),Ct=St<Et,$t=r.dist({x:Vt.ctrlpts[0],y:Vt.ctrlpts[1]},{x:Vt.endX,y:Vt.endY}),Ot=$t<Et,_t=!1;if(xt||wt||Ct){_t=!0;var Tt={x:Vt.ctrlpts[0]-Wt.x,y:Vt.ctrlpts[1]-Wt.y},jt=Math.sqrt(Tt.x*Tt.x+Tt.y*Tt.y),Pt={x:Tt.x/jt,y:Tt.y/jt},Dt=Math.max(Xt,Qt),Rt={x:Vt.ctrlpts[0]+2*Pt.x*Dt,y:Vt.ctrlpts[1]+2*Pt.y*Dt},It=n.intersectLine(Wt.x,Wt.y,Xt,Qt,Rt.x,Rt.y,0);Ct?(Vt.ctrlpts[0]=Vt.ctrlpts[0]+Pt.x*(Et-St),Vt.ctrlpts[1]=Vt.ctrlpts[1]+Pt.y*(Et-St)):(Vt.ctrlpts[0]=It[0]+Pt.x*Et,Vt.ctrlpts[1]=It[1]+Pt.y*Et)}if(kt||At||Ot){_t=!0,Tt={x:Vt.ctrlpts[0]-Yt.x,y:Vt.ctrlpts[1]-Yt.y},jt=Math.sqrt(Tt.x*Tt.x+Tt.y*Tt.y),Pt={x:Tt.x/jt,y:Tt.y/jt},Dt=Math.max(Xt,Qt),Rt={x:Vt.ctrlpts[0]+2*Pt.x*Dt,y:Vt.ctrlpts[1]+2*Pt.y*Dt};var Nt=o.intersectLine(Yt.x,Yt.y,Zt,Jt,Rt.x,Rt.y,0);Ot?(Vt.ctrlpts[0]=Vt.ctrlpts[0]+Pt.x*(Et-$t),Vt.ctrlpts[1]=Vt.ctrlpts[1]+Pt.y*(Et-$t)):(Vt.ctrlpts[0]=Nt[0]+Pt.x*Et,Vt.ctrlpts[1]=Nt[1]+Pt.y*Et)}_t&&this.findEndpoints(Bt)}if("multibezier"===Vt.edgeType||"bezier"===Vt.edgeType||"self"===Vt.edgeType||"compound"===Vt.edgeType){for(Vt.allpts=[],Vt.allpts.push(Vt.startX,Vt.startY),ht=0;ht+1<Vt.ctrlpts.length;ht+=2)Vt.allpts.push(Vt.ctrlpts[ht],Vt.ctrlpts[ht+1]),ht+3<Vt.ctrlpts.length&&Vt.allpts.push((Vt.ctrlpts[ht]+Vt.ctrlpts[ht+2])/2,(Vt.ctrlpts[ht+1]+Vt.ctrlpts[ht+3])/2);var Mt;Vt.allpts.push(Vt.endX,Vt.endY),Vt.ctrlpts.length/2%2==0?(Mt=Vt.allpts.length/2-1,Vt.midX=Vt.allpts[Mt],Vt.midY=Vt.allpts[Mt+1]):(Mt=Vt.allpts.length/2-3,Vt.midX=r.qbezierAt(Vt.allpts[Mt],Vt.allpts[Mt+2],Vt.allpts[Mt+4],.5),Vt.midY=r.qbezierAt(Vt.allpts[Mt+1],Vt.allpts[Mt+3],Vt.allpts[Mt+5],.5))}else if("straight"===Vt.edgeType)Vt.allpts=[Vt.startX,Vt.startY,Vt.endX,Vt.endY],Vt.midX=(Vt.startX+Vt.endX+Vt.arrowStartX+Vt.arrowEndX)/4,Vt.midY=(Vt.startY+Vt.endY+Vt.arrowStartY+Vt.arrowEndY)/4;else if("segments"===Vt.edgeType)if(Vt.allpts=[],Vt.allpts.push(Vt.startX,Vt.startY),Vt.allpts.push.apply(Vt.allpts,Vt.segpts),Vt.allpts.push(Vt.endX,Vt.endY),Vt.segpts.length%4==0){var zt=Vt.segpts.length/2,Lt=zt-2;Vt.midX=(Vt.segpts[Lt]+Vt.segpts[zt])/2,Vt.midY=(Vt.segpts[Lt+1]+Vt.segpts[zt+1])/2}else Lt=Vt.segpts.length/2-1,Vt.midX=Vt.segpts[Lt],Vt.midY=Vt.segpts[Lt+1];this.storeEdgeProjections(Bt),this.calculateArrowAngles(Bt)}this.recalculateEdgeLabelProjections(Bt),this.calculateLabelAngles(Bt)}}for(p=0;p<f.length;p++){var Bt,Ft,qt=(Ft=(Bt=f[p])._private).rscratch,Vt=qt;if(!qt.haystack){var Ut=2*Math.random()*Math.PI;qt.source={x:Math.cos(Ut),y:Math.sin(Ut)},Ut=2*Math.random()*Math.PI,qt.target={x:Math.cos(Ut),y:Math.sin(Ut)}}var Ht=Ft.source,Gt=Ft.target,Wt=Ht.position(),Yt=Gt.position(),Xt=Ht.width(),Zt=Gt.width(),Qt=Ht.height(),Jt=Gt.height(),Kt=(Dt=Bt.pstyle("haystack-radius").value)/2;Vt.haystackPts=Vt.allpts=[Vt.source.x*Xt*Kt+Wt.x,Vt.source.y*Qt*Kt+Wt.y,Vt.target.x*Zt*Kt+Yt.x,Vt.target.y*Jt*Kt+Yt.y],Vt.midX=(Vt.allpts[0]+Vt.allpts[2])/2,Vt.midY=(Vt.allpts[1]+Vt.allpts[3])/2,qt.edgeType=qt.lastCurveStyle="haystack",qt.haystack=!0,this.storeEdgeProjections(Bt),this.calculateArrowAngles(Bt),this.recalculateEdgeLabelProjections(Bt),this.calculateLabelAngles(Bt)}}},o.getSegmentPoints=function(e){var t=e[0]._private.rscratch;if("segments"===t.edgeType)return a(t.segpts)},o.getControlPoints=function(e){var t=e[0]._private.rscratch,n=t.edgeType;if("bezier"===n||"multibezier"===n||"self"===n||"compound"===n)return a(t.ctrlpts)},o.getEdgeMidpoint=function(e){var t=e[0]._private.rscratch;return{x:t.midX,y:t.midY}},e.exports=o},function(e,t,n){"use strict";var r=n(2),i=n(0),o={manualEndptToPx:function(e,t){var n=e.position(),r=e.outerWidth(),i=e.outerHeight();if(2===t.value.length){var o=[t.pfValue[0],t.pfValue[1]];return"%"===t.units[0]&&(o[0]=o[0]*r),"%"===t.units[1]&&(o[1]=o[1]*i),o[0]+=n.x,o[1]+=n.y,o}var a=t.pfValue[0];a=-Math.PI/2+a;var s=2*Math.max(r,i),l=[n.x+Math.cos(a)*s,n.y+Math.sin(a)*s];return this.nodeShapes[this.getNodeShape(e)].intersectLine(n.x,n.y,r,i,l[0],l[1],0)},findEndpoints:function(e){var t=this,n=void 0,o=e.source()[0],a=e.target()[0],s=o.position(),l=a.position(),c=e.pstyle("target-arrow-shape").value,u=e.pstyle("source-arrow-shape").value,d=e.pstyle("target-distance-from-node").pfValue,f=e.pstyle("source-distance-from-node").pfValue,p=e._private.rscratch,h=p.edgeType,g="self"===h||"compound"===h,v="bezier"===h||"multibezier"===h||g,m="bezier"!==h,b="straight"===h||"segments"===h,y="segments"===h,x=v||m||b,w=e.pstyle("source-endpoint"),k=g?"outside-to-node":w.value,A=e.pstyle("target-endpoint"),E=g?"outside-to-node":A.value;p.srcManEndpt=w,p.tgtManEndpt=A;var S=void 0,C=void 0,$=void 0,O=void 0;if(v){var _=[p.ctrlpts[0],p.ctrlpts[1]];S=m?[p.ctrlpts[p.ctrlpts.length-2],p.ctrlpts[p.ctrlpts.length-1]]:_,C=_}else if(b){var T=y?p.segpts.slice(0,2):[l.x,l.y];S=y?p.segpts.slice(p.segpts.length-2):[s.x,s.y],C=T}"inside-to-node"===E?n=[l.x,l.y]:A.units?n=this.manualEndptToPx(a,A):"outside-to-line"===E?n=p.tgtIntn:("outside-to-node"===E?$=S:"outside-to-line"===E&&($=[s.x,s.y]),n=t.nodeShapes[this.getNodeShape(a)].intersectLine(l.x,l.y,a.outerWidth(),a.outerHeight(),$[0],$[1],0));var j=r.shortenIntersection(n,S,t.arrowShapes[c].spacing(e)+d),P=r.shortenIntersection(n,S,t.arrowShapes[c].gap(e)+d);e.hasClass("horizontal")?(p.endX=n[0]-d,p.endY=n[1],p.arrowEndX=n[0]-d/2,p.arrowEndY=n[1]):e.hasClass("vertical")?(p.endX=n[0],p.endY=n[1]-d,p.arrowEndX=n[0],p.arrowEndY=n[1]-d/2):(p.endX=P[0],p.endY=P[1],p.arrowEndX=j[0],p.arrowEndY=j[1]),"inside-to-node"===k?n=[s.x,s.y]:w.units?n=this.manualEndptToPx(o,w):"outside-to-line"===k?n=p.srcIntn:("outside-to-node"===k?O=C:"outside-to-line"===k&&(O=[l.x,l.y]),n=t.nodeShapes[this.getNodeShape(o)].intersectLine(s.x,s.y,o.outerWidth(),o.outerHeight(),O[0],O[1],0));var D=r.shortenIntersection(n,C,t.arrowShapes[u].spacing(e)+f),R=r.shortenIntersection(n,C,t.arrowShapes[u].gap(e)+f);p.startX=R[0],p.startY=R[1],p.arrowStartX=D[0],p.arrowStartY=D[1],x&&(i.number(p.startX)&&i.number(p.startY)&&i.number(p.endX)&&i.number(p.endY)?p.badLine=!1:p.badLine=!0)},getSourceEndpoint:function(e){var t=e[0]._private.rscratch;switch(t.edgeType){case"haystack":return{x:t.haystackPts[0],y:t.haystackPts[1]};default:return{x:t.arrowStartX,y:t.arrowStartY}}},getTargetEndpoint:function(e){var t=e[0]._private.rscratch;switch(t.edgeType){case"haystack":return{x:t.haystackPts[2],y:t.haystackPts[3]};default:return{x:t.arrowEndX,y:t.arrowEndY}}}};e.exports=o},function(e,t,n){"use strict";var r=n(2),i={};function o(e,t,n){for(var i=function(e,t,n,i){return r.qbezierAt(e,t,n,i)},o=t._private.rstyle.bezierPts,a=0;a<e.bezierProjPcts.length;a++){var s=e.bezierProjPcts[a];o.push({x:i(n[0],n[2],n[4],s),y:i(n[1],n[3],n[5],s)})}}i.storeEdgeProjections=function(e){var t=e._private,n=t.rscratch,r=n.edgeType;if(t.rstyle.bezierPts=null,t.rstyle.linePts=null,t.rstyle.haystackPts=null,"multibezier"===r||"bezier"===r||"self"===r||"compound"===r){t.rstyle.bezierPts=[];for(var i=0;i+5<n.allpts.length;i+=4)o(this,e,n.allpts.slice(i,i+6))}else if("segments"===r){var a=t.rstyle.linePts=[];for(i=0;i+1<n.allpts.length;i+=2)a.push({x:n.allpts[i],y:n.allpts[i+1]})}else if("haystack"===r){var s=n.haystackPts;t.rstyle.haystackPts=[{x:s[0],y:s[1]},{x:s[2],y:s[3]}]}t.rstyle.arrowWidth=this.getArrowWidth(e.pstyle("width").pfValue,e.pstyle("arrow-scale").value)*this.arrowShapeWidth},i.recalculateEdgeProjections=function(e){this.findEdgeControlPoints(e)},e.exports=i},function(e,t,n){"use strict";var r=n(2),i=n(0),o=n(1),a={recalculateNodeLabelProjection:function(e){var t=e.pstyle("label").strValue;if(!i.emptyString(t)){var n,r,o=e._private,a=e.width(),s=e.height(),l=e.padding(),c=e.position(),u=e.pstyle("text-halign").strValue,d=e.pstyle("text-valign").strValue,f=o.rscratch,p=o.rstyle;switch(u){case"left":n=c.x-a/2-l;break;case"right":n=c.x+a/2+l;break;default:n=c.x}switch(d){case"top":r=c.y-s/2-l;break;case"bottom":r=c.y+s/2+l;break;default:r=c.y}f.labelX=n,f.labelY=r,p.labelX=n,p.labelY=r,this.applyLabelDimensions(e)}},recalculateEdgeLabelProjections:function(e){var t,n=e._private,i=n.rscratch,a=this,s={mid:e.pstyle("label").strValue,source:e.pstyle("source-label").strValue,target:e.pstyle("target-label").strValue};if(s.mid||s.source||s.target){t={x:i.midX,y:i.midY};var l=function(e,t,r){o.setPrefixedProperty(n.rscratch,e,t,r),o.setPrefixedProperty(n.rstyle,e,t,r)};l("labelX",null,t.x),l("labelY",null,t.y);var c=function(o){var c,u="source"===o;if(s[o]){var d=e.pstyle(o+"-text-offset").pfValue,f=function(e,t){var n=t.x-e.x,r=t.y-e.y;return Math.atan(r/n)};switch(i.edgeType){case"self":case"compound":case"bezier":case"multibezier":for(var p,h=function e(){if(e.cache)return e.cache;for(var t=[],o=0;o+5<i.allpts.length;o+=4){var s={x:i.allpts[o],y:i.allpts[o+1]},l={x:i.allpts[o+2],y:i.allpts[o+3]},c={x:i.allpts[o+4],y:i.allpts[o+5]};t.push({p0:s,p1:l,p2:c,startDist:0,length:0,segments:[]})}var u=n.rstyle.bezierPts,d=a.bezierProjPcts.length;function f(e,t,n,i,o){var a=r.dist(t,n),s=e.segments[e.segments.length-1],l={p0:t,p1:n,t0:i,t1:o,startDist:s?s.startDist+s.length:0,length:a};e.segments.push(l),e.length+=a}for(o=0;o<t.length;o++){var p=t[o],h=t[o-1];h&&(p.startDist=h.startDist+h.length),f(p,p.p0,u[o*d],0,a.bezierProjPcts[0]);for(var g=0;g<d-1;g++)f(p,u[o*d+g],u[o*d+g+1],a.bezierProjPcts[g],a.bezierProjPcts[g+1]);f(p,u[o*d+d-1],p.p2,a.bezierProjPcts[d-1],1)}return e.cache=t}(),g=0,v=0,m=0;m<h.length;m++){for(var b=h[u?m:h.length-1-m],y=0;y<b.segments.length;y++){var x=b.segments[u?y:b.segments.length-1-y],w=m===h.length-1&&y===b.segments.length-1;if(g=v,(v+=x.length)>=d||w){p={cp:b,segment:x};break}}if(p)break}b=p.cp;var k=(d-g)/(x=p.segment).length,A=x.t1-x.t0,E=u?x.t0+A*k:x.t1-A*k;E=r.bound(0,E,1),t=r.qbezierPtAt(b.p0,b.p1,b.p2,E),c=function(e,t,n,i){var o=r.bound(0,i-.001,1),a=r.bound(0,i+.001,1),s=r.qbezierPtAt(e,t,n,o),l=r.qbezierPtAt(e,t,n,a);return f(s,l)}(b.p0,b.p1,b.p2,E);break;case"straight":case"segments":case"haystack":var S,C,$,O,_=0,T=i.allpts.length;for(m=0;m+3<T&&(u?($={x:i.allpts[m],y:i.allpts[m+1]},O={x:i.allpts[m+2],y:i.allpts[m+3]}):($={x:i.allpts[T-2-m],y:i.allpts[T-1-m]},O={x:i.allpts[T-4-m],y:i.allpts[T-3-m]}),C=_,!((_+=S=r.dist($,O))>=d));m+=2);E=(d-C)/S,E=r.bound(0,E,1),t=r.lineAt($,O,E),c=f($,O)}l("labelX",o,t.x),l("labelY",o,t.y),l("labelAutoAngle",o,c)}};c("source"),c("target"),this.applyLabelDimensions(e)}},applyLabelDimensions:function(e){this.applyPrefixedLabelDimensions(e),e.isEdge()&&(this.applyPrefixedLabelDimensions(e,"source"),this.applyPrefixedLabelDimensions(e,"target"))},applyPrefixedLabelDimensions:function(e,t){var n=e._private,r=this.getLabelText(e,t),i=this.calculateLabelDimensions(e,r);o.setPrefixedProperty(n.rstyle,"labelWidth",t,i.width),o.setPrefixedProperty(n.rscratch,"labelWidth",t,i.width),o.setPrefixedProperty(n.rstyle,"labelHeight",t,i.height),o.setPrefixedProperty(n.rscratch,"labelHeight",t,i.height)},getLabelText:function(e,t){var n=e._private,r=t?t+"-":"",i=e.pstyle(r+"label").strValue,a=e.pstyle("text-transform").value,s=function(e,r){return r?(o.setPrefixedProperty(n.rscratch,e,t,r),r):o.getPrefixedProperty(n.rscratch,e,t)};"none"==a||("uppercase"==a?i=i.toUpperCase():"lowercase"==a&&(i=i.toLowerCase()));var l=e.pstyle("text-wrap").value;if("wrap"===l){var c=s("labelKey");if(c&&s("labelWrapKey")===c)return s("labelWrapCachedText");for(var u=i.split("\n"),d=e.pstyle("text-max-width").pfValue,f=[],p=0;p<u.length;p++){var h=u[p];if(this.calculateLabelDimensions(e,h,"line="+h).width>d){for(var g=h.split(/\s+/),v="",m=0;m<g.length;m++){var b=g[m],y=0===v.length?b:v+" "+b;this.calculateLabelDimensions(e,y,"testLine="+y).width<=d?v+=b+" ":(f.push(v),v=b+" ")}v.match(/^\s+$/)||f.push(v)}else f.push(h)}s("labelWrapCachedLines",f),i=s("labelWrapCachedText",f.join("\n")),s("labelWrapKey",c)}else if("ellipsis"===l){d=e.pstyle("text-max-width").pfValue;for(var x="",w=!1,k=0;k<i.length&&!(this.calculateLabelDimensions(e,x+i[k]+"…").width>d);k++)x+=i[k],k===i.length-1&&(w=!0);return w||(x+="…"),x}return i},calculateLabelDimensions:function(e,t,n){var r=e._private.labelStyleKey+"$@$"+t;n&&(r+="$@$"+n);var i=this.labelDimCache||(this.labelDimCache={});if(i[r])return i[r];var o=e.pstyle("font-style").strValue,a=1*e.pstyle("font-size").pfValue+"px",s=e.pstyle("font-family").strValue,l=e.pstyle("font-weight").strValue,c=this.labelCalcDiv;c||(c=this.labelCalcDiv=document.createElement("div"),document.body.appendChild(c));var u=c.style;return u.fontFamily=s,u.fontStyle=o,u.fontSize=a,u.fontWeight=l,u.position="absolute",u.left="-9999px",u.top="-9999px",u.zIndex="-1",u.visibility="hidden",u.pointerEvents="none",u.padding="0",u.lineHeight="1","wrap"===e.pstyle("text-wrap").value?u.whiteSpace="pre":u.whiteSpace="normal",c.textContent=t,i[r]={width:Math.ceil(c.clientWidth/1),height:Math.ceil(c.clientHeight/1)},i[r]},calculateLabelAngles:function(e){var t=e._private.rscratch,n=e.isEdge(),r=e.pstyle("text-rotation"),i=r.strValue;"none"===i?t.labelAngle=t.sourceLabelAngle=t.targetLabelAngle=0:n&&"autorotate"===i?(t.labelAngle=Math.atan(t.midDispY/t.midDispX),t.sourceLabelAngle=t.sourceLabelAutoAngle,t.targetLabelAngle=t.targetLabelAutoAngle):t.labelAngle=t.sourceLabelAngle=t.targetLabelAngle="autorotate"===i?0:r.pfValue}};e.exports=a},function(e,t,n){"use strict";var r={getNodeShape:function(e){var t=e.pstyle("shape").value;if(e.isParent())return"rectangle"===t||"roundrectangle"===t||"cutrectangle"===t||"barrel"===t?t:"rectangle";if("polygon"===t){var n=e.pstyle("shape-polygon-points").value;return this.nodeShapes.makePolygon(n).name}return t}};e.exports=r},function(e,t,n){"use strict";var r={registerCalculationListeners:function(){var e=this.cy,t=e.collection(),n=this,r=function(e,n){var r=!(arguments.length>2&&void 0!==arguments[2])||arguments[2];t.merge(e);for(var i=0;i<e.length;i++){var o=e[i],a=o._private,s=a.rstyle;r&&(s.clean=!1,a.bbCache=null);var l=s.dirtyEvents=s.dirtyEvents||{length:0};l[n.type]||(l[n.type]=!0,l.length++)}};n.binder(e).on("position.* style.* free.* bounds.*","node",(function(e){var t=e.target;r(t,e),r(t.connectedEdges(),e)})).on("add.*","node",(function(e){var t=e.target;r(t,e)})).on("background.*","node",(function(e){var t=e.target;r(t,e,!1)})).on("add.* style.*","edge",(function(e){var t=e.target;r(t,e),r(t.parallelEdges(),e)})).on("remove.*","edge",(function(e){for(var t=e.target.parallelEdges(),n=0;n<t.length;n++){var i=t[n];i.removed()||r(i,e)}})).on("dirty.*","node",(function(e){var t=e.target;r(t,e)})),n.beforeRender((function(r){if(r){var i=n.onUpdateEleCalcsFns;if(i)for(var o=0;o<i.length;o++)(0,i[o])(r,t);for(n.recalculateRenderedStyle(t,!1),o=0;o<t.length;o++)t[o]._private.rstyle.dirtyEvents=null;t=e.collection()}}),n.beforeRenderPriorities.eleCalcs)},onUpdateEleCalcs:function(e){(this.onUpdateEleCalcsFns=this.onUpdateEleCalcsFns||[]).push(e)},recalculateRenderedStyle:function(e,t){var n=[],r=[];if(!this.destroyed){void 0===t&&(t=!0);for(var i=0;i<e.length;i++){var o=(l=(s=e[i])._private).rstyle;t&&o.clean||s.removed()||"none"!==s.pstyle("display").value&&("nodes"===l.group?r.push(s):n.push(s),o.clean=!0)}for(i=0;i<r.length;i++){o=(l=(s=r[i])._private).rstyle;var a=s.position();this.recalculateNodeLabelProjection(s),o.nodeX=a.x,o.nodeY=a.y,o.nodeW=s.pstyle("width").pfValue,o.nodeH=s.pstyle("height").pfValue}for(this.recalculateEdgeProjections(n),i=0;i<n.length;i++){o=(l=(s=n[i])._private).rstyle;var s,l,c=l.rscratch;this.recalculateEdgeLabelProjections(s),o.srcX=c.arrowStartX,o.srcY=c.arrowStartY,o.tgtX=c.arrowEndX,o.tgtY=c.arrowEndY,o.midX=c.midX,o.midY=c.midY,o.labelAngle=c.labelAngle,o.sourceLabelAngle=c.sourceLabelAngle,o.targetLabelAngle=c.targetLabelAngle}}}};e.exports=r},function(e,t,n){"use strict";var r=n(17),i={updateCachedGrabbedEles:function(){var e=this.cachedZSortedEles;if(e){e.drag=[],e.nondrag=[];for(var t=[],n=0;n<e.length;n++){var r=(i=e[n])._private.rscratch;i.grabbed()&&!i.isParent()?t.push(i):r.inDragLayer?e.drag.push(i):e.nondrag.push(i)}for(n=0;n<t.length;n++){var i=t[n];e.drag.push(i)}}},invalidateCachedZSortedEles:function(){this.cachedZSortedEles=null},getCachedZSortedEles:function(e){if(e||!this.cachedZSortedEles){var t=this.cy.mutableElements().toArray();t.sort(r),t.interactive=t.filter((function(e){return e.interactive()})),this.cachedZSortedEles=t,this.updateCachedGrabbedEles()}else t=this.cachedZSortedEles;return t}};e.exports=i},function(e,t,n){"use strict";var r={getCachedImage:function(e,t,n){var r=this.imageCache=this.imageCache||{},i=r[e];if(i)return i.image.complete||i.image.addEventListener("load",n),i.image;var o=(i=r[e]=r[e]||{}).image=new Image;return o.addEventListener("load",n),o.addEventListener("error",(function(){o.error=!0})),"data:"===e.substring(0,"data:".length).toLowerCase()||(o.crossOrigin=t),o.src=e,o}};e.exports=r},function(e,t,n){"use strict";var r=n(0),i=n(1),o=n(2),a=(n(16),{registerBinding:function(e,t,n,r){var i=Array.prototype.slice.apply(arguments,[1]),o=this.binder(e);return o.on.apply(o,i)},binder:function(e){var t=this,n=e===window||e===document||e===document.body||r.domElement(e);if(null==t.supportsPassiveEvents){var i=!1;try{var o=Object.defineProperty({},"passive",{get:function(){i=!0}});window.addEventListener("test",null,o)}catch(e){}t.supportsPassiveEvents=i}var a=function(r,i,o){var a=Array.prototype.slice.call(arguments);return n&&t.supportsPassiveEvents&&(a[2]={capture:null!=o&&o,passive:!1,once:!1}),t.bindings.push({target:e,args:a}),(e.addEventListener||e.on).apply(e,a),this};return{on:a,addEventListener:a,addListener:a,bind:a}},nodeIsDraggable:function(e){return e&&e.isNode()&&!e.locked()&&e.grabbable()},nodeIsGrabbable:function(e){return this.nodeIsDraggable(e)&&e.interactive()}});a.load=function(){var e=this,t=function(t,n,r,o){null==t&&(t=e.cy);for(var a=0;a<n.length;a++){var s=n[a];t.emit(i.extend({originalEvent:r,type:s},o))}},n=function(e){return e.shiftKey||e.metaKey||e.ctrlKey},a=function(t,n){var r=!0;if(e.cy.hasCompoundNodes()&&t&&t.isEdge()){for(var i=0;n&&i<n.length;i++)if((t=n[i]).isNode()&&t.isParent()){r=!1;break}}else r=!0;return r},s=function(e){e[0]._private.rscratch.inDragLayer=!0},l=function(e){e[0]._private.rscratch.isGrabTarget=!0},c=function(t,n){var r=function(t){var n;if(t.addToList&&e.cy.hasCompoundNodes()){if(!t.addToList.hasId){t.addToList.hasId={};for(var r=0;r<t.addToList.length;r++){var i=t.addToList[r];t.addToList.hasId[i.id()]=!0}}n=t.addToList.hasId}return n||{}}(n);r[t.id()]||(n.addToList.push(t),r[t.id()]=!0,function(e){e[0]._private.grabbed=!0}(t))},u=function(t,n){n=n||{};var r=t.cy().hasCompoundNodes();n.inDragLayer&&(t.forEach(s),t.neighborhood().stdFilter((function(e){return!r||e.isEdge()})).forEach(s)),n.addToList&&t.forEach((function(e){c(e,n)})),function(e,t){if(e.cy().hasCompoundNodes()&&(null!=t.inDragLayer||null!=t.addToList)){var n=e.descendants();t.inDragLayer&&(n.forEach(s),n.connectedEdges().forEach(s)),t.addToList&&n.forEach((function(e){c(e,t)}))}}(t,n),p(t,{inDragLayer:n.inDragLayer}),e.updateCachedGrabbedEles()},d=u,f=function(t){t&&(t.hasId={},e.getCachedZSortedEles().forEach((function(e){!function(e){e[0]._private.grabbed=!1}(e),function(e){e[0]._private.rscratch.inDragLayer=!1}(e),function(e){e[0]._private.rscratch.isGrabTarget=!1}(e)})),e.updateCachedGrabbedEles())},p=function(e,t){if((null!=t.inDragLayer||null!=t.addToList)&&e.cy().hasCompoundNodes()){var n=e.ancestors().orphans();if(!n.same(e)){var r=n.descendants().spawnSelf().merge(n).unmerge(e).unmerge(e.descendants()),i=r.connectedEdges();t.inDragLayer&&(i.forEach(s),r.forEach(s)),t.addToList&&r.forEach((function(e){c(e,t)}))}}},h="undefined"!=typeof MutationObserver;h?(e.removeObserver=new MutationObserver((function(t){for(var n=0;n<t.length;n++){var r=t[n].removedNodes;if(r)for(var i=0;i<r.length;i++)if(r[i]===e.container){e.destroy();break}}})),e.container.parentNode&&e.removeObserver.observe(e.container.parentNode,{childList:!0})):e.registerBinding(e.container,"DOMNodeRemoved",(function(t){e.destroy()}));var g=i.debounce((function(){e.cy.resize()}),100);h&&(e.styleObserver=new MutationObserver(g),e.styleObserver.observe(e.container,{attributes:!0})),e.registerBinding(window,"resize",g);var v=function(){e.invalidateContainerClientCoordsCache()};!function(e,t){for(;null!=e;)t(e),e=e.parentNode}(e.container,(function(t){e.registerBinding(t,"transitionend",v),e.registerBinding(t,"animationend",v),e.registerBinding(t,"scroll",v)})),e.registerBinding(e.container,"contextmenu",(function(e){e.preventDefault()}));var m,b,y,x,w,k,A,E,S,C,$,O,_,T=function(t){for(var n=e.findContainerClientCoords(),r=n[0],i=n[1],o=n[2],a=n[3],s=t.touches?t.touches:[t],l=!1,c=0;c<s.length;c++){var u=s[c];if(r<=u.clientX&&u.clientX<=r+o&&i<=u.clientY&&u.clientY<=i+a){l=!0;break}}if(!l)return!1;for(var d=e.container,f=t.target.parentNode,p=!1;f;){if(f===d){p=!0;break}f=f.parentNode}return!!p};e.registerBinding(e.container,"mousedown",(function(n){if(T(n)){n.preventDefault(),e.hoverData.capture=!0,e.hoverData.which=n.which;var r=e.cy,i=[n.clientX,n.clientY],o=e.projectIntoViewport(i[0],i[1]),a=e.selection,s=e.findNearestElements(o[0],o[1],!0,!1),c=s[0],f=e.dragData.possibleDragElements;if(e.hoverData.mdownPos=o,e.hoverData.mdownGPos=i,3==n.which){e.hoverData.cxtStarted=!0;var p={originalEvent:n,type:"cxttapstart",position:{x:o[0],y:o[1]}};c?(c.activate(),c.emit(p),e.hoverData.down=c):r.emit(p),e.hoverData.downTime=(new Date).getTime(),e.hoverData.cxtDragged=!1}else if(1==n.which){if(c&&c.activate(),null!=c&&e.nodeIsGrabbable(c)){var h=function(e){return{originalEvent:n,type:e,position:{x:o[0],y:o[1]}}};if(l(c),c.selected()){f=e.dragData.possibleDragElements=[];var g=r.$((function(t){return t.isNode()&&t.selected()&&e.nodeIsGrabbable(t)}));u(g,{addToList:f}),c.emit(h("grabon")),g.forEach((function(e){e.emit(h("grab"))}))}else f=e.dragData.possibleDragElements=[],d(c,{addToList:f}),c.emit(h("grabon")).emit(h("grab"));e.redrawHint("eles",!0),e.redrawHint("drag",!0)}e.hoverData.down=c,e.hoverData.downs=s,e.hoverData.downTime=(new Date).getTime(),t(c,["mousedown","tapstart","vmousedown"],n,{position:{x:o[0],y:o[1]}}),null==c?(a[4]=1,e.data.bgActivePosistion={x:o[0],y:o[1]},e.redrawHint("select",!0),e.redraw()):c.isEdge()&&(a[4]=1),e.hoverData.tapholdCancelled=!1,clearTimeout(e.hoverData.tapholdTimeout),e.hoverData.tapholdTimeout=setTimeout((function(){if(!e.hoverData.tapholdCancelled){var t=e.hoverData.down;t?t.emit({originalEvent:n,type:"taphold",position:{x:o[0],y:o[1]}}):r.emit({originalEvent:n,type:"taphold",position:{x:o[0],y:o[1]}})}}),e.tapholdDuration)}a[0]=a[2]=o[0],a[1]=a[3]=o[1]}}),!1),e.registerBinding(window,"mousemove",(function(i){if(e.hoverData.capture||T(i)){var s=!1,l=e.cy,c=l.zoom(),d=[i.clientX,i.clientY],p=e.projectIntoViewport(d[0],d[1]),h=e.hoverData.mdownPos,g=e.hoverData.mdownGPos,v=e.selection,m=null;e.hoverData.draggingEles||e.hoverData.dragging||e.hoverData.selecting||(m=e.findNearestElement(p[0],p[1],!0,!1));var b,y=e.hoverData.last,x=e.hoverData.down,w=[p[0]-v[2],p[1]-v[3]],k=e.dragData.possibleDragElements;if(g){var A=d[0]-g[0],E=A*A,S=d[1]-g[1],C=E+S*S;e.hoverData.isOverThresholdDrag=b=C>=e.desktopTapThreshold2}var $=n(i);b&&(e.hoverData.tapholdCancelled=!0),s=!0,t(m,["mousemove","vmousemove","tapdrag"],i,{position:{x:p[0],y:p[1]}});var O=function(){e.data.bgActivePosistion=void 0,e.hoverData.selecting||l.emit("boxstart"),v[4]=1,e.hoverData.selecting=!0,e.redrawHint("select",!0),e.redraw()};if(3===e.hoverData.which){if(b){var _={originalEvent:i,type:"cxtdrag",position:{x:p[0],y:p[1]}};x?x.emit(_):l.emit(_),e.hoverData.cxtDragged=!0,e.hoverData.cxtOver&&m===e.hoverData.cxtOver||(e.hoverData.cxtOver&&e.hoverData.cxtOver.emit({originalEvent:i,type:"cxtdragout",position:{x:p[0],y:p[1]}}),e.hoverData.cxtOver=m,m&&m.emit({originalEvent:i,type:"cxtdragover",position:{x:p[0],y:p[1]}}))}}else if(e.hoverData.dragging){if(s=!0,l.panningEnabled()&&l.userPanningEnabled()){var j;if(e.hoverData.justStartedPan){var P=e.hoverData.mdownPos;j={x:(p[0]-P[0])*c,y:(p[1]-P[1])*c},e.hoverData.justStartedPan=!1}else j={x:w[0]*c,y:w[1]*c};l.panBy(j),e.hoverData.dragged=!0}p=e.projectIntoViewport(i.clientX,i.clientY)}else if(1!=v[4]||null!=x&&!x.isEdge()){if(x&&x.isEdge()&&x.active()&&x.unactivate(),x&&x.grabbed()||m==y||(y&&t(y,["mouseout","tapdragout"],i,{position:{x:p[0],y:p[1]}}),m&&t(m,["mouseover","tapdragover"],i,{position:{x:p[0],y:p[1]}}),e.hoverData.last=m),x)if(b){if(l.boxSelectionEnabled()&&$)x&&x.grabbed()&&(f(k),x.emit("free")),O();else if(x&&x.grabbed()&&e.nodeIsDraggable(x)){var D=!e.dragData.didDrag;D&&e.redrawHint("eles",!0),e.dragData.didDrag=!0;var R=[];e.hoverData.draggingEles||u(l.collection(k),{inDragLayer:!0});for(var I=0;I<k.length;I++){var N=k[I];if(e.nodeIsDraggable(N)&&N.grabbed()){var M=N.position();if(R.push(N),r.number(w[0])&&r.number(w[1])&&(M.x+=w[0],M.y+=w[1],D)){var z=e.hoverData.dragDelta;z&&r.number(z[0])&&r.number(z[1])&&(M.x+=z[0],M.y+=z[1])}}}e.hoverData.draggingEles=!0;var L=l.collection(R);L.dirtyCompoundBoundsCache(),L.emit("position drag"),e.redrawHint("drag",!0),e.redraw()}}else!function(){var t=e.hoverData.dragDelta=e.hoverData.dragDelta||[];0===t.length?(t.push(w[0]),t.push(w[1])):(t[0]+=w[0],t[1]+=w[1])}();s=!0}else b&&(e.hoverData.dragging||!l.boxSelectionEnabled()||!$&&l.panningEnabled()&&l.userPanningEnabled()?!e.hoverData.selecting&&l.panningEnabled()&&l.userPanningEnabled()&&a(x,e.hoverData.downs)&&(e.hoverData.dragging=!0,e.hoverData.justStartedPan=!0,v[4]=0,e.data.bgActivePosistion=o.array2point(h),e.redrawHint("select",!0),e.redraw()):O(),x&&x.isEdge()&&x.active()&&x.unactivate());return v[2]=p[0],v[3]=p[1],s?(i.stopPropagation&&i.stopPropagation(),i.preventDefault&&i.preventDefault(),!1):void 0}}),!1),e.registerBinding(window,"mouseup",(function(r){if(e.hoverData.capture){e.hoverData.capture=!1;var i=e.cy,o=e.projectIntoViewport(r.clientX,r.clientY),a=e.selection,s=e.findNearestElement(o[0],o[1],!0,!1),l=e.dragData.possibleDragElements,c=e.hoverData.down,u=n(r);if(e.data.bgActivePosistion&&(e.redrawHint("select",!0),e.redraw()),e.hoverData.tapholdCancelled=!0,e.data.bgActivePosistion=void 0,c&&c.unactivate(),3===e.hoverData.which){var d={originalEvent:r,type:"cxttapend",position:{x:o[0],y:o[1]}};if(c?c.emit(d):i.emit(d),!e.hoverData.cxtDragged){var p={originalEvent:r,type:"cxttap",position:{x:o[0],y:o[1]}};c?c.emit(p):i.emit(p)}e.hoverData.cxtDragged=!1,e.hoverData.which=null}else if(1===e.hoverData.which){if(null!=c||e.dragData.didDrag||e.hoverData.selecting||e.hoverData.dragged||n(r)||(i.$((function(e){return e.selected()})).unselect(),l.length>0&&e.redrawHint("eles",!0),e.dragData.possibleDragElements=l=[]),t(s,["mouseup","tapend","vmouseup"],r,{position:{x:o[0],y:o[1]}}),e.dragData.didDrag||e.hoverData.dragged||e.hoverData.selecting||e.hoverData.isOverThresholdDrag||t(c,["click","tap","vclick"],r,{position:{x:o[0],y:o[1]}}),s!=c||e.dragData.didDrag||e.hoverData.selecting||null!=s&&s._private.selectable&&(e.hoverData.dragging||("additive"===i.selectionType()||u?s.selected()?s.unselect():s.select():u||(i.$(":selected").unmerge(s).unselect(),s.select())),e.redrawHint("eles",!0)),e.hoverData.selecting){var h=i.collection(e.getAllInBox(a[0],a[1],a[2],a[3]));e.redrawHint("select",!0),h.length>0&&e.redrawHint("eles",!0),i.emit("boxend");var g=function(e){return e.selectable()&&!e.selected()};"additive"===i.selectionType()||u||i.$(":selected").unmerge(h).unselect(),h.emit("box").stdFilter(g).select().emit("boxselect"),e.redraw()}if(e.hoverData.dragging&&(e.hoverData.dragging=!1,e.redrawHint("select",!0),e.redrawHint("eles",!0),e.redraw()),!a[4]){e.redrawHint("drag",!0),e.redrawHint("eles",!0);var v=c&&c.grabbed();f(l),v&&c.emit("free")}}a[4]=0,e.hoverData.down=null,e.hoverData.cxtStarted=!1,e.hoverData.draggingEles=!1,e.hoverData.selecting=!1,e.hoverData.isOverThresholdDrag=!1,e.dragData.didDrag=!1,e.hoverData.dragged=!1,e.hoverData.dragDelta=[],e.hoverData.mdownPos=null,e.hoverData.mdownGPos=null}}),!1),e.registerBinding(e.container,"wheel",(function(t){if(!e.scrollingPage){var n,r=e.cy,i=e.projectIntoViewport(t.clientX,t.clientY),o=[i[0]*r.zoom()+r.pan().x,i[1]*r.zoom()+r.pan().y];e.hoverData.draggingEles||e.hoverData.dragging||e.hoverData.cxtStarted||0!==e.selection[4]?t.preventDefault():r.panningEnabled()&&r.userPanningEnabled()&&r.zoomingEnabled()&&r.userZoomingEnabled()&&(t.preventDefault(),e.data.wheelZooming=!0,clearTimeout(e.data.wheelTimeout),e.data.wheelTimeout=setTimeout((function(){e.data.wheelZooming=!1,e.redrawHint("eles",!0),e.redraw()}),150),n=null!=t.deltaY?t.deltaY/-250:null!=t.wheelDeltaY?t.wheelDeltaY/1e3:t.wheelDelta/1e3,n*=e.wheelSensitivity,1===t.deltaMode&&(n*=33),r.zoom({level:r.zoom()*Math.pow(10,n),renderedPosition:{x:o[0],y:o[1]}}))}}),!0),e.registerBinding(window,"scroll",(function(t){e.scrollingPage=!0,clearTimeout(e.scrollingPageTimeout),e.scrollingPageTimeout=setTimeout((function(){e.scrollingPage=!1}),250)}),!0),e.registerBinding(e.container,"mouseout",(function(t){var n=e.projectIntoViewport(t.clientX,t.clientY);e.cy.emit({originalEvent:t,type:"mouseout",position:{x:n[0],y:n[1]}})}),!1),e.registerBinding(e.container,"mouseover",(function(t){var n=e.projectIntoViewport(t.clientX,t.clientY);e.cy.emit({originalEvent:t,type:"mouseover",position:{x:n[0],y:n[1]}})}),!1);var j,P,D,R,I=function(e,t,n,r){return Math.sqrt((n-e)*(n-e)+(r-t)*(r-t))},N=function(e,t,n,r){return(n-e)*(n-e)+(r-t)*(r-t)};if(e.registerBinding(e.container,"touchstart",j=function(n){if(T(n)){e.touchData.capture=!0,e.data.bgActivePosistion=void 0;var r=e.cy,i=e.touchData.now,o=e.touchData.earlier;if(n.touches[0]){var a=e.projectIntoViewport(n.touches[0].clientX,n.touches[0].clientY);i[0]=a[0],i[1]=a[1]}if(n.touches[1]&&(a=e.projectIntoViewport(n.touches[1].clientX,n.touches[1].clientY),i[2]=a[0],i[3]=a[1]),n.touches[2]&&(a=e.projectIntoViewport(n.touches[2].clientX,n.touches[2].clientY),i[4]=a[0],i[5]=a[1]),n.touches[1]){f(e.dragData.touchDragEles);var s=e.findContainerClientCoords();S=s[0],C=s[1],$=s[2],O=s[3],m=n.touches[0].clientX-S,b=n.touches[0].clientY-C,y=n.touches[1].clientX-S,x=n.touches[1].clientY-C,_=0<=m&&m<=$&&0<=y&&y<=$&&0<=b&&b<=O&&0<=x&&x<=O;var c=r.pan(),p=r.zoom();if(w=I(m,b,y,x),k=N(m,b,y,x),E=[((A=[(m+y)/2,(b+x)/2])[0]-c.x)/p,(A[1]-c.y)/p],k<4e4&&!n.touches[2]){var h=e.findNearestElement(i[0],i[1],!0,!0),g=e.findNearestElement(i[2],i[3],!0,!0);return h&&h.isNode()?(h.activate().emit({originalEvent:n,type:"cxttapstart",position:{x:i[0],y:i[1]}}),e.touchData.start=h):g&&g.isNode()?(g.activate().emit({originalEvent:n,type:"cxttapstart",position:{x:i[0],y:i[1]}}),e.touchData.start=g):r.emit({originalEvent:n,type:"cxttapstart",position:{x:i[0],y:i[1]}}),e.touchData.start&&(e.touchData.start._private.grabbed=!1),e.touchData.cxt=!0,e.touchData.cxtDragged=!1,e.data.bgActivePosistion=void 0,void e.redraw()}}if(n.touches[2]);else if(n.touches[1]);else if(n.touches[0]){var v=e.findNearestElements(i[0],i[1],!0,!0),j=v[0];if(null!=j&&(j.activate(),e.touchData.start=j,e.touchData.starts=v,e.nodeIsGrabbable(j))){var P=e.dragData.touchDragEles=[],D=null;e.redrawHint("eles",!0),e.redrawHint("drag",!0),j.selected()?(D=r.$((function(t){return t.selected()&&e.nodeIsGrabbable(t)})),u(D,{addToList:P})):d(j,{addToList:P}),l(j);var R=function(e){return{originalEvent:n,type:e,position:{x:i[0],y:i[1]}}};j.emit(R("grabon")),D?D.forEach((function(e){e.emit(R("grab"))})):j.emit(R("grab"))}t(j,["touchstart","tapstart","vmousedown"],n,{position:{x:i[0],y:i[1]}}),null==j&&(e.data.bgActivePosistion={x:a[0],y:a[1]},e.redrawHint("select",!0),e.redraw()),e.touchData.singleTouchMoved=!1,e.touchData.singleTouchStartTime=+new Date,clearTimeout(e.touchData.tapholdTimeout),e.touchData.tapholdTimeout=setTimeout((function(){!1!==e.touchData.singleTouchMoved||e.pinching||e.touchData.selecting||(t(e.touchData.start,["taphold"],n,{position:{x:i[0],y:i[1]}}),e.touchData.start||r.$(":selected").unselect())}),e.tapholdDuration)}if(n.touches.length>=1){for(var M=e.touchData.startPosition=[],z=0;z<i.length;z++)M[z]=o[z]=i[z];var L=n.touches[0];e.touchData.startGPosition=[L.clientX,L.clientY]}}},!1),e.registerBinding(window,"touchmove",P=function(n){var i=e.touchData.capture;if(i||T(n)){var s=e.selection,l=e.cy,c=e.touchData.now,d=e.touchData.earlier,p=l.zoom();if(n.touches[0]){var h=e.projectIntoViewport(n.touches[0].clientX,n.touches[0].clientY);c[0]=h[0],c[1]=h[1]}n.touches[1]&&(h=e.projectIntoViewport(n.touches[1].clientX,n.touches[1].clientY),c[2]=h[0],c[3]=h[1]),n.touches[2]&&(h=e.projectIntoViewport(n.touches[2].clientX,n.touches[2].clientY),c[4]=h[0],c[5]=h[1]);var g,v=e.touchData.startGPosition;if(i&&n.touches[0]&&v){for(var A=[],$=0;$<c.length;$++)A[$]=c[$]-d[$];var O=n.touches[0].clientX-v[0],j=O*O,P=n.touches[0].clientY-v[1];g=j+P*P>=e.touchTapThreshold2}if(i&&e.touchData.cxt){n.preventDefault();var D=n.touches[0].clientX-S,R=n.touches[0].clientY-C,M=n.touches[1].clientX-S,z=n.touches[1].clientY-C,L=N(D,R,M,z);if(L/k>=2.25||L>=22500){e.touchData.cxt=!1,e.data.bgActivePosistion=void 0,e.redrawHint("select",!0);var B={originalEvent:n,type:"cxttapend",position:{x:c[0],y:c[1]}};e.touchData.start?(e.touchData.start.unactivate().emit(B),e.touchData.start=null):l.emit(B)}}if(i&&e.touchData.cxt){B={originalEvent:n,type:"cxtdrag",position:{x:c[0],y:c[1]}},e.data.bgActivePosistion=void 0,e.redrawHint("select",!0),e.touchData.start?e.touchData.start.emit(B):l.emit(B),e.touchData.start&&(e.touchData.start._private.grabbed=!1),e.touchData.cxtDragged=!0;var F=e.findNearestElement(c[0],c[1],!0,!0);e.touchData.cxtOver&&F===e.touchData.cxtOver||(e.touchData.cxtOver&&e.touchData.cxtOver.emit({originalEvent:n,type:"cxtdragout",position:{x:c[0],y:c[1]}}),e.touchData.cxtOver=F,F&&F.emit({originalEvent:n,type:"cxtdragover",position:{x:c[0],y:c[1]}}))}else if(i&&n.touches[2]&&l.boxSelectionEnabled())n.preventDefault(),e.data.bgActivePosistion=void 0,this.lastThreeTouch=+new Date,e.touchData.selecting||l.emit("boxstart"),e.touchData.selecting=!0,e.redrawHint("select",!0),s&&0!==s.length&&void 0!==s[0]?(s[2]=(c[0]+c[2]+c[4])/3,s[3]=(c[1]+c[3]+c[5])/3):(s[0]=(c[0]+c[2]+c[4])/3,s[1]=(c[1]+c[3]+c[5])/3,s[2]=(c[0]+c[2]+c[4])/3+1,s[3]=(c[1]+c[3]+c[5])/3+1),s[4]=1,e.touchData.selecting=!0,e.redraw();else if(i&&n.touches[1]&&l.zoomingEnabled()&&l.panningEnabled()&&l.userZoomingEnabled()&&l.userPanningEnabled()){if(n.preventDefault(),e.data.bgActivePosistion=void 0,e.redrawHint("select",!0),ee=e.dragData.touchDragEles){e.redrawHint("drag",!0);for(var q=0;q<ee.length;q++){var V=ee[q]._private;V.grabbed=!1,V.rscratch.inDragLayer=!1}}D=n.touches[0].clientX-S,R=n.touches[0].clientY-C,M=n.touches[1].clientX-S,z=n.touches[1].clientY-C;var U=I(D,R,M,z),H=U/w;if(_){var G=(D-m+(M-y))/2,W=(R-b+(z-x))/2,Y=l.zoom(),X=Y*H,Z=l.pan(),Q=E[0]*Y+Z.x,J=E[1]*Y+Z.y,K={x:-X/Y*(Q-Z.x-G)+Q,y:-X/Y*(J-Z.y-W)+J};if(e.touchData.start&&e.touchData.start.active()){var ee=e.dragData.touchDragEles;f(ee),e.redrawHint("drag",!0),e.redrawHint("eles",!0),e.touchData.start.unactivate().emit("free")}l.viewport({zoom:X,pan:K,cancelOnFailedZoom:!0}),w=U,m=D,b=R,y=M,x=z,e.pinching=!0}n.touches[0]&&(h=e.projectIntoViewport(n.touches[0].clientX,n.touches[0].clientY),c[0]=h[0],c[1]=h[1]),n.touches[1]&&(h=e.projectIntoViewport(n.touches[1].clientX,n.touches[1].clientY),c[2]=h[0],c[3]=h[1]),n.touches[2]&&(h=e.projectIntoViewport(n.touches[2].clientX,n.touches[2].clientY),c[4]=h[0],c[5]=h[1])}else if(n.touches[0]){var te=e.touchData.start,ne=e.touchData.last;if(e.hoverData.draggingEles||e.swipePanning||(F=e.findNearestElement(c[0],c[1],!0,!0)),i&&null!=te&&n.preventDefault(),i&&null!=te&&e.nodeIsDraggable(te))if(g){ee=e.dragData.touchDragEles;var re=!e.dragData.didDrag;re&&u(l.collection(ee),{inDragLayer:!0});for(var ie=0;ie<ee.length;ie++){var oe=ee[ie];if(e.nodeIsDraggable(oe)&&oe.grabbed()){e.dragData.didDrag=!0;var ae=oe.position();r.number(A[0])&&r.number(A[1])&&(ae.x+=A[0],ae.y+=A[1]),re&&(e.redrawHint("eles",!0),(le=e.touchData.dragDelta)&&r.number(le[0])&&r.number(le[1])&&(ae.x+=le[0],ae.y+=le[1]))}}var se=l.collection(ee);se.dirtyCompoundBoundsCache(),se.emit("position drag"),e.hoverData.draggingEles=!0,e.redrawHint("drag",!0),e.touchData.startPosition[0]==d[0]&&e.touchData.startPosition[1]==d[1]&&e.redrawHint("eles",!0),e.redraw()}else{var le;0===(le=e.touchData.dragDelta=e.touchData.dragDelta||[]).length?(le.push(A[0]),le.push(A[1])):(le[0]+=A[0],le[1]+=A[1])}if(t(te||F,["touchmove","tapdrag","vmousemove"],n,{position:{x:c[0],y:c[1]}}),te&&te.grabbed()||F==ne||(ne&&ne.emit({originalEvent:n,type:"tapdragout",position:{x:c[0],y:c[1]}}),F&&F.emit({originalEvent:n,type:"tapdragover",position:{x:c[0],y:c[1]}})),e.touchData.last=F,i)for(q=0;q<c.length;q++)c[q]&&e.touchData.startPosition[q]&&g&&(e.touchData.singleTouchMoved=!0);i&&(null==te||te.isEdge())&&l.panningEnabled()&&l.userPanningEnabled()&&(a(te,e.touchData.starts)&&(n.preventDefault(),e.swipePanning?l.panBy({x:A[0]*p,y:A[1]*p}):g&&(e.swipePanning=!0,l.panBy({x:O*p,y:P*p}),te&&(te.unactivate(),e.data.bgActivePosistion||(e.data.bgActivePosistion=o.array2point(e.touchData.startPosition)),e.redrawHint("select",!0),e.touchData.start=null))),h=e.projectIntoViewport(n.touches[0].clientX,n.touches[0].clientY),c[0]=h[0],c[1]=h[1])}for($=0;$<c.length;$++)d[$]=c[$]}},!1),e.registerBinding(window,"touchcancel",D=function(t){var n=e.touchData.start;e.touchData.capture=!1,n&&n.unactivate()}),e.registerBinding(window,"touchend",R=function(n){var r=e.touchData.start;if(e.touchData.capture){e.touchData.capture=!1,n.preventDefault();var i=e.selection;e.swipePanning=!1,e.hoverData.draggingEles=!1;var o,a=e.cy,s=a.zoom(),l=e.touchData.now,c=e.touchData.earlier;if(n.touches[0]){var u=e.projectIntoViewport(n.touches[0].clientX,n.touches[0].clientY);l[0]=u[0],l[1]=u[1]}if(n.touches[1]&&(u=e.projectIntoViewport(n.touches[1].clientX,n.touches[1].clientY),l[2]=u[0],l[3]=u[1]),n.touches[2]&&(u=e.projectIntoViewport(n.touches[2].clientX,n.touches[2].clientY),l[4]=u[0],l[5]=u[1]),r&&r.unactivate(),e.touchData.cxt){if(o={originalEvent:n,type:"cxttapend",position:{x:l[0],y:l[1]}},r?r.emit(o):a.emit(o),!e.touchData.cxtDragged){var d={originalEvent:n,type:"cxttap",position:{x:l[0],y:l[1]}};r?r.emit(d):a.emit(d)}return e.touchData.start&&(e.touchData.start._private.grabbed=!1),e.touchData.cxt=!1,e.touchData.start=null,void e.redraw()}if(!n.touches[2]&&a.boxSelectionEnabled()&&e.touchData.selecting){e.touchData.selecting=!1;var p=a.collection(e.getAllInBox(i[0],i[1],i[2],i[3]));i[0]=void 0,i[1]=void 0,i[2]=void 0,i[3]=void 0,i[4]=0,e.redrawHint("select",!0),a.emit("boxend"),p.emit("box").stdFilter((function(e){return e.selectable()&&!e.selected()})).select().emit("boxselect"),p.nonempty()&&e.redrawHint("eles",!0),e.redraw()}if(null!=r&&r.unactivate(),n.touches[2])e.data.bgActivePosistion=void 0,e.redrawHint("select",!0);else if(n.touches[1]);else if(n.touches[0]);else if(!n.touches[0]){e.data.bgActivePosistion=void 0,e.redrawHint("select",!0);var h=e.dragData.touchDragEles;if(null!=r){var g=r._private.grabbed;f(h),e.redrawHint("drag",!0),e.redrawHint("eles",!0),g&&r.emit("free"),t(r,["touchend","tapend","vmouseup","tapdragout"],n,{position:{x:l[0],y:l[1]}}),r.unactivate(),e.touchData.start=null}else{var v=e.findNearestElement(l[0],l[1],!0,!0);t(v,["touchend","tapend","vmouseup","tapdragout"],n,{position:{x:l[0],y:l[1]}})}var m=e.touchData.startPosition[0]-l[0],b=m*m,y=e.touchData.startPosition[1]-l[1],x=(b+y*y)*s*s;null!=r&&!e.dragData.didDrag&&r._private.selectable&&x<e.touchTapThreshold2&&!e.pinching&&("single"===a.selectionType()?(a.$(":selected").unmerge(r).unselect(),r.select()):r.selected()?r.unselect():r.select(),e.redrawHint("eles",!0)),e.touchData.singleTouchMoved||t(r,["tap","vclick"],n,{position:{x:l[0],y:l[1]}}),e.touchData.singleTouchMoved=!0}for(var w=0;w<l.length;w++)c[w]=l[w];e.dragData.didDrag=!1,0===n.touches.length&&(e.touchData.dragDelta=[],e.touchData.startPosition=null,e.touchData.startGPosition=null),n.touches.length<2&&(e.pinching=!1,e.redrawHint("eles",!0),e.redraw())}},!1),"undefined"==typeof TouchEvent){var M=[],z=function(e){return{clientX:e.clientX,clientY:e.clientY,force:1,identifier:e.pointerId,pageX:e.pageX,pageY:e.pageY,radiusX:e.width/2,radiusY:e.height/2,screenX:e.screenX,screenY:e.screenY,target:e.target}},L=function(e){M.push(function(e){return{event:e,touch:z(e)}}(e))},B=function(e){for(var t=0;t<M.length;t++)if(M[t].event.pointerId===e.pointerId)return void M.splice(t,1)},F=function(e){e.touches=M.map((function(e){return e.touch}))},q=function(e){return"mouse"===e.pointerType||4===e.pointerType};e.registerBinding(e.container,"pointerdown",(function(e){q(e)||(e.preventDefault(),L(e),F(e),j(e))})),e.registerBinding(e.container,"pointerup",(function(e){q(e)||(B(e),F(e),R(e))})),e.registerBinding(e.container,"pointercancel",(function(e){q(e)||(B(e),F(e),D())})),e.registerBinding(e.container,"pointermove",(function(e){q(e)||(e.preventDefault(),function(e){var t=M.filter((function(t){return t.event.pointerId===e.pointerId}))[0];t.event=e,t.touch=z(e)}(e),F(e),P(e))}))}},e.exports=a},function(e,t,n){"use strict";var r=n(2),i={generatePolygon:function(e,t){return this.nodeShapes[e]={renderer:this,name:e,points:t,draw:function(e,t,n,r,i){this.renderer.nodeShapeImpl("polygon",e,t,n,r,i,this.points)},intersectLine:function(e,t,n,i,o,a,s){return r.polygonIntersectLine(o,a,this.points,e,t,n/2,i/2,s)},checkPoint:function(e,t,n,i,o,a,s){return r.pointInsidePolygon(e,t,this.points,a,s,i,o,[0,-1],n)}}},generateEllipse:function(){return this.nodeShapes.ellipse={renderer:this,name:"ellipse",draw:function(e,t,n,r,i){this.renderer.nodeShapeImpl(this.name,e,t,n,r,i)},intersectLine:function(e,t,n,i,o,a,s){return r.intersectLineEllipse(o,a,e,t,n/2+s,i/2+s)},checkPoint:function(e,t,n,i,o,a,s){return r.checkInEllipse(e,t,i,o,a,s,n)}}},generateRoundRectangle:function(){return this.nodeShapes.roundrectangle={renderer:this,name:"roundrectangle",points:r.generateUnitNgonPointsFitToSquare(4,0),draw:function(e,t,n,r,i){this.renderer.nodeShapeImpl(this.name,e,t,n,r,i)},intersectLine:function(e,t,n,i,o,a,s){return r.roundRectangleIntersectLine(o,a,e,t,n,i,s)},checkPoint:function(e,t,n,i,o,a,s){var l=r.getRoundRectangleRadius(i,o),c=2*l;return!!(r.pointInsidePolygon(e,t,this.points,a,s,i,o-c,[0,-1],n)||r.pointInsidePolygon(e,t,this.points,a,s,i-c,o,[0,-1],n)||r.checkInEllipse(e,t,c,c,a-i/2+l,s-o/2+l,n)||r.checkInEllipse(e,t,c,c,a+i/2-l,s-o/2+l,n)||r.checkInEllipse(e,t,c,c,a+i/2-l,s+o/2-l,n)||r.checkInEllipse(e,t,c,c,a-i/2+l,s+o/2-l,n))}}},generateCutRectangle:function(){return this.nodeShapes.cutrectangle={renderer:this,name:"cutrectangle",cornerLength:r.getCutRectangleCornerLength(),points:r.generateUnitNgonPointsFitToSquare(4,0),draw:function(e,t,n,r,i){this.renderer.nodeShapeImpl(this.name,e,t,n,r,i)},generateCutTrianglePts:function(e,t,n,r){var i=this.cornerLength,o=t/2,a=e/2,s=n-a,l=n+a,c=r-o,u=r+o;return{topLeft:[s,c+i,s+i,c,s+i,c+i],topRight:[l-i,c,l,c+i,l-i,c+i],bottomRight:[l,u-i,l-i,u,l-i,u-i],bottomLeft:[s+i,u,s,u-i,s+i,u-i]}},intersectLine:function(e,t,n,i,o,a,s){var l=this.generateCutTrianglePts(n+2*s,i+2*s,e,t),c=[].concat.apply([],[l.topLeft.splice(0,4),l.topRight.splice(0,4),l.bottomRight.splice(0,4),l.bottomLeft.splice(0,4)]);return r.polygonIntersectLine(o,a,c,e,t)},checkPoint:function(e,t,n,i,o,a,s){if(r.pointInsidePolygon(e,t,this.points,a,s,i,o-2*this.cornerLength,[0,-1],n))return!0;if(r.pointInsidePolygon(e,t,this.points,a,s,i-2*this.cornerLength,o,[0,-1],n))return!0;var l=this.generateCutTrianglePts(i,o,a,s);return r.pointInsidePolygonPoints(e,t,l.topLeft)||r.pointInsidePolygonPoints(e,t,l.topRight)||r.pointInsidePolygonPoints(e,t,l.bottomRight)||r.pointInsidePolygonPoints(e,t,l.bottomLeft)}}},generateBarrel:function(){return this.nodeShapes.barrel={renderer:this,name:"barrel",points:r.generateUnitNgonPointsFitToSquare(4,0),draw:function(e,t,n,r,i){this.renderer.nodeShapeImpl(this.name,e,t,n,r,i)},intersectLine:function(e,t,n,i,o,a,s){var l=this.generateBarrelBezierPts(n+2*s,i+2*s,e,t),c=function(e){var t=r.qbezierPtAt({x:e[0],y:e[1]},{x:e[2],y:e[3]},{x:e[4],y:e[5]},.15),n=r.qbezierPtAt({x:e[0],y:e[1]},{x:e[2],y:e[3]},{x:e[4],y:e[5]},.5),i=r.qbezierPtAt({x:e[0],y:e[1]},{x:e[2],y:e[3]},{x:e[4],y:e[5]},.85);return[e[0],e[1],t.x,t.y,n.x,n.y,i.x,i.y,e[4],e[5]]},u=[].concat(c(l.topLeft),c(l.topRight),c(l.bottomRight),c(l.bottomLeft));return r.polygonIntersectLine(o,a,u,e,t)},generateBarrelBezierPts:function(e,t,n,i){var o=t/2,a=e/2,s=n-a,l=n+a,c=i-o,u=i+o,d=r.getBarrelCurveConstants(e,t),f=d.heightOffset,p=d.widthOffset,h=d.ctrlPtOffsetPct*e,g={topLeft:[s,c+f,s+h,c,s+p,c],topRight:[l-p,c,l-h,c,l,c+f],bottomRight:[l,u-f,l-h,u,l-p,u],bottomLeft:[s+p,u,s+h,u,s,u-f]};return g.topLeft.isTop=!0,g.topRight.isTop=!0,g.bottomLeft.isBottom=!0,g.bottomRight.isBottom=!0,g},checkPoint:function(e,t,n,i,o,a,s){var l=r.getBarrelCurveConstants(i,o),c=l.heightOffset,u=l.widthOffset;if(r.pointInsidePolygon(e,t,this.points,a,s,i,o-2*c,[0,-1],n))return!0;if(r.pointInsidePolygon(e,t,this.points,a,s,i-2*u,o,[0,-1],n))return!0;for(var d=this.generateBarrelBezierPts(i,o,a,s),f=function(e,t,n){var i=n[4],o=n[2],a=n[0],s=n[5],l=n[1],c=Math.min(i,a),u=Math.max(i,a),d=Math.min(s,l),f=Math.max(s,l);if(c<=e&&e<=u&&d<=t&&t<=f){var p=r.bezierPtsToQuadCoeff(i,o,a),h=r.solveQuadratic(p[0],p[1],p[2],e).filter((function(e){return 0<=e&&e<=1}));if(h.length>0)return h[0]}return null},p=Object.keys(d),h=0;h<p.length;h++){var g=d[p[h]],v=f(e,t,g);if(null!=v){var m=g[5],b=g[3],y=g[1],x=r.qbezierAt(m,b,y,v);if(g.isTop&&x<=t)return!0;if(g.isBottom&&t<=x)return!0}}return!1}}},generateBottomRoundrectangle:function(){return this.nodeShapes.bottomroundrectangle={renderer:this,name:"bottomroundrectangle",points:r.generateUnitNgonPointsFitToSquare(4,0),draw:function(e,t,n,r,i){this.renderer.nodeShapeImpl(this.name,e,t,n,r,i)},intersectLine:function(e,t,n,i,o,a,s){var l=e-(n/2+s),c=t-(i/2+s),u=c,d=e+(n/2+s),f=r.finiteLinesIntersect(o,a,e,t,l,c,d,u,!1);return f.length>0?f:r.roundRectangleIntersectLine(o,a,e,t,n,i,s)},checkPoint:function(e,t,n,i,o,a,s){var l=r.getRoundRectangleRadius(i,o),c=2*l;if(r.pointInsidePolygon(e,t,this.points,a,s,i,o-c,[0,-1],n))return!0;if(r.pointInsidePolygon(e,t,this.points,a,s,i-c,o,[0,-1],n))return!0;var u=i/2+2*n,d=o/2+2*n,f=[a-u,s-d,a-u,s,a+u,s,a+u,s-d];return!!r.pointInsidePolygonPoints(e,t,f)||!!r.checkInEllipse(e,t,c,c,a+i/2-l,s+o/2-l,n)||!!r.checkInEllipse(e,t,c,c,a-i/2+l,s+o/2-l,n)}}},registerNodeShapes:function(){var e=this.nodeShapes={},t=this;this.generateEllipse(),this.generatePolygon("triangle",r.generateUnitNgonPointsFitToSquare(3,0)),this.generatePolygon("rectangle",r.generateUnitNgonPointsFitToSquare(4,0)),e.square=e.rectangle,this.generateRoundRectangle(),this.generateCutRectangle(),this.generateBarrel(),this.generateBottomRoundrectangle(),this.generatePolygon("diamond",[0,1,1,0,0,-1,-1,0]),this.generatePolygon("pentagon",r.generateUnitNgonPointsFitToSquare(5,0)),this.generatePolygon("hexagon",r.generateUnitNgonPointsFitToSquare(6,0)),this.generatePolygon("heptagon",r.generateUnitNgonPointsFitToSquare(7,0)),this.generatePolygon("octagon",r.generateUnitNgonPointsFitToSquare(8,0));var n=new Array(20),i=r.generateUnitNgonPoints(5,0),o=r.generateUnitNgonPoints(5,Math.PI/5),a=.5*(3-Math.sqrt(5));a*=1.57;for(var s=0;s<o.length/2;s++)o[2*s]*=a,o[2*s+1]*=a;for(s=0;s<5;s++)n[4*s]=i[2*s],n[4*s+1]=i[2*s+1],n[4*s+2]=o[2*s],n[4*s+3]=o[2*s+1];n=r.fitPolygonToSquare(n),this.generatePolygon("star",n),this.generatePolygon("vee",[-1,-1,0,-.333,1,-1,0,1]),this.generatePolygon("rhomboid",[-1,-1,.333,-1,1,1,-.333,1]),this.generatePolygon("concavehexagon",[-1,-.95,-.75,0,-1,.95,1,.95,.75,0,1,-.95]),this.generatePolygon("tag",[-1,-1,.25,-1,1,0,.25,1,-1,1]),e.makePolygon=function(e){var n,r="polygon-"+e.join("$");return(n=this[r])?n:t.generatePolygon(r,e)}}};e.exports=i},function(e,t,n){"use strict";var r=n(1),i={timeToRender:function(){return this.redrawTotalTime/this.redrawCount},redraw:function(e){e=e||r.staticEmptyObject();var t=this;void 0===t.averageRedrawTime&&(t.averageRedrawTime=0),void 0===t.lastRedrawTime&&(t.lastRedrawTime=0),void 0===t.lastDrawTime&&(t.lastDrawTime=0),t.requestedFrame=!0,t.renderOptions=e},beforeRender:function(e,t){if(!this.destroyed){t=t||0;var n=this.beforeRenderCallbacks;n.push({fn:e,priority:t}),n.sort((function(e,t){return t.priority-e.priority}))}}},o=function(e,t,n){for(var r=e.beforeRenderCallbacks,i=0;i<r.length;i++)r[i].fn(t,n)};i.startRenderLoop=function(){var e=this;e.renderLoopStarted||(e.renderLoopStarted=!0,r.requestAnimationFrame((function t(n){if(!e.destroyed){if(e.requestedFrame&&!e.skipFrame){o(e,!0,n);var i=r.performanceNow();e.render(e.renderOptions);var a=e.lastDrawTime=r.performanceNow();void 0===e.averageRedrawTime&&(e.averageRedrawTime=a-i),void 0===e.redrawCount&&(e.redrawCount=0),e.redrawCount++,void 0===e.redrawTotalTime&&(e.redrawTotalTime=0);var s=a-i;e.redrawTotalTime+=s,e.lastRedrawTime=s,e.averageRedrawTime=e.averageRedrawTime/2+s/2,e.requestedFrame=!1}else o(e,!1,n);e.skipFrame=!1,r.requestAnimationFrame(t)}})))},e.exports=i},function(e,t,n){"use strict";var r=n(1),i=n(0),o=n(124),a=n(125),s=c,l=c.prototype;function c(e){var t=this;t.data={canvases:new Array(l.CANVAS_LAYERS),contexts:new Array(l.CANVAS_LAYERS),canvasNeedsRedraw:new Array(l.CANVAS_LAYERS),bufferCanvases:new Array(l.BUFFER_COUNT),bufferContexts:new Array(l.CANVAS_LAYERS)};var n="-webkit-tap-highlight-color: rgba(0,0,0,0);";t.data.canvasContainer=document.createElement("div");var r=t.data.canvasContainer.style;t.data.canvasContainer.setAttribute("style",n),r.position="relative",r.zIndex="0",r.overflow="hidden";var s=e.cy.container();s.appendChild(t.data.canvasContainer),(s.getAttribute("style")||"").indexOf(n)<0&&s.setAttribute("style",(s.getAttribute("style")||"")+n);for(var c=0;c<l.CANVAS_LAYERS;c++){var u=t.data.canvases[c]=document.createElement("canvas");t.data.contexts[c]=u.getContext("2d"),u.setAttribute("style","-webkit-user-select: none; -moz-user-select: -moz-none; user-select: none; -webkit-tap-highlight-color: rgba(0,0,0,0); outline-style: none;"+(i.ms()?" -ms-touch-action: none; touch-action: none; ":"")),u.style.position="absolute",u.setAttribute("data-id","layer"+c),u.style.zIndex=String(l.CANVAS_LAYERS-c),t.data.canvasContainer.appendChild(u),t.data.canvasNeedsRedraw[c]=!1}for(t.data.topCanvas=t.data.canvases[0],t.data.canvases[l.NODE].setAttribute("data-id","layer"+l.NODE+"-node"),t.data.canvases[l.SELECT_BOX].setAttribute("data-id","layer"+l.SELECT_BOX+"-selectbox"),t.data.canvases[l.DRAG].setAttribute("data-id","layer"+l.DRAG+"-drag"),c=0;c<l.BUFFER_COUNT;c++)t.data.bufferCanvases[c]=document.createElement("canvas"),t.data.bufferContexts[c]=t.data.bufferCanvases[c].getContext("2d"),t.data.bufferCanvases[c].style.position="absolute",t.data.bufferCanvases[c].setAttribute("data-id","buffer"+c),t.data.bufferCanvases[c].style.zIndex=String(-c-1),t.data.bufferCanvases[c].style.visibility="hidden";t.pathsEnabled=!0,t.data.eleTxrCache=new o(t),t.data.lyrTxrCache=new a(t,t.data.eleTxrCache),t.onUpdateEleCalcs((function(e,n){for(var r=0;r<n.length;r++){var i=n[r],o=i._private.rstyle,a=o.dirtyEvents;if(i.isNode()&&a&&1===a.length&&a.position);else if(t.data.eleTxrCache.invalidateElement(i),i.isParent()&&a.style){var s=o.prevParentOpacity,l=i.pstyle("opacity").pfValue;if(o.prevParentOpacity=l,s!==l)for(var c=i.descendants(),u=0;u<c.length;u++)t.data.eleTxrCache.invalidateElement(c[u])}}n.length>0&&t.data.lyrTxrCache.invalidateElements(n)}))}l.CANVAS_LAYERS=3,l.SELECT_BOX=0,l.DRAG=1,l.NODE=2,l.BUFFER_COUNT=3,l.TEXTURE_BUFFER=0,l.MOTIONBLUR_BUFFER_NODE=1,l.MOTIONBLUR_BUFFER_DRAG=2,l.redrawHint=function(e,t){var n=this;switch(e){case"eles":n.data.canvasNeedsRedraw[l.NODE]=t;break;case"drag":n.data.canvasNeedsRedraw[l.DRAG]=t;break;case"select":n.data.canvasNeedsRedraw[l.SELECT_BOX]=t}};var u="undefined"!=typeof Path2D;l.path2dEnabled=function(e){if(void 0===e)return this.pathsEnabled;this.pathsEnabled=!!e},l.usePaths=function(){return u&&this.pathsEnabled},[n(126),n(127),n(128),n(129),n(130),n(131),n(132),n(133),n(134),n(135)].forEach((function(e){r.extend(l,e)})),e.exports=s},function(e,t,n){"use strict";var r=n(2),i=n(1),o=n(9),a=n(19),s={dequeue:"dequeue",downscale:"downscale",highQuality:"highQuality"},l=function(e){this.renderer=e,this.onDequeues=[],this.setupDequeueing()},c=l.prototype;c.reasons=s,c.getTextureQueue=function(e){return this.eleImgCaches=this.eleImgCaches||{},this.eleImgCaches[e]=this.eleImgCaches[e]||[]},c.getRetiredTextureQueue=function(e){var t=this.eleImgCaches.retired=this.eleImgCaches.retired||{};return t[e]=t[e]||[]},c.getElementQueue=function(){return this.eleCacheQueue=this.eleCacheQueue||new o((function(e,t){return t.reqs-e.reqs}))},c.getElementIdToQueue=function(){return this.eleIdToCacheQueue=this.eleIdToCacheQueue||{}},c.getElement=function(e,t,n,i,o){var a=this,l=this.renderer,c=e._private.rscratch,u=l.cy.zoom();if(0===t.w||0===t.h||!e.visible())return null;if(null==i&&(i=Math.ceil(r.log2(u*n))),i<-4)i=-4;else if(u>=3.99||i>2)return null;var d,f=Math.pow(2,i),p=t.h*f,h=t.w*f,g=c.imgCaches=c.imgCaches||{},v=g[i];if(v)return v;if(d=p<=25?25:p<=50?50:50*Math.ceil(p/50),p>1024||h>1024||e.isEdge()||e.isParent())return null;var m=a.getTextureQueue(d),b=m[m.length-2],y=function(){return a.recycleTexture(d,h)||a.addTexture(d,h)};b||(b=m[m.length-1]),b||(b=y()),b.width-b.usedWidth<h&&(b=y());for(var x,w=l.eleTextBiggerThanMin(e,f),k=function(e){return e&&e.scaledLabelShown===w},A=o&&o===s.dequeue,E=o&&o===s.highQuality,S=o&&o===s.downscale,C=i+1;C<=2;C++)if(T=g[C]){x=T;break}var $=x&&x.level===i+1?x:null,O=function(){b.context.drawImage($.texture.canvas,$.x,0,$.width,$.height,b.usedWidth,0,h,p)};if(b.context.setTransform(1,0,0,1,0,0),b.context.clearRect(b.usedWidth,0,h,d),k($))O();else if(k(x)){if(!E)return a.queueElement(e,x.level-1),x;for(C=x.level;C>i;C--)$=a.getElement(e,t,n,C,s.downscale);O()}else{var _;if(!A&&!E&&!S)for(C=i-1;C>=-4;C--){var T;if(T=g[C]){_=T;break}}if(k(_))return a.queueElement(e,i),_;b.context.translate(b.usedWidth,0),b.context.scale(f,f),l.drawElement(b.context,e,t,w),b.context.scale(1/f,1/f),b.context.translate(-b.usedWidth,0)}return v=g[i]={ele:e,x:b.usedWidth,texture:b,level:i,scale:f,width:h,height:p,scaledLabelShown:w},b.usedWidth+=Math.ceil(h+8),b.eleCaches.push(v),a.checkTextureFullness(b),v},c.invalidateElement=function(e){var t=e._private.rscratch.imgCaches;if(t)for(var n=-4;n<=2;n++){var r=t[n];if(r){var o=r.texture;o.invalidatedWidth+=r.width,t[n]=null,i.removeFromArray(o.eleCaches,r),this.removeFromQueue(e),this.checkTextureUtility(o)}}},c.checkTextureUtility=function(e){e.invalidatedWidth>=.5*e.width&&this.retireTexture(e)},c.checkTextureFullness=function(e){var t=this.getTextureQueue(e.height);e.usedWidth/e.width>.8&&e.fullnessChecks>=10?i.removeFromArray(t,e):e.fullnessChecks++},c.retireTexture=function(e){var t=e.height,n=this.getTextureQueue(t);i.removeFromArray(n,e),e.retired=!0;for(var r=e.eleCaches,o=0;o<r.length;o++){var a=r[o],s=a.ele,l=a.level,c=s._private.rscratch.imgCaches;c&&(c[l]=null)}i.clearArray(r),this.getRetiredTextureQueue(t).push(e)},c.addTexture=function(e,t){var n={};return this.getTextureQueue(e).push(n),n.eleCaches=[],n.height=e,n.width=Math.max(1024,t),n.usedWidth=0,n.invalidatedWidth=0,n.fullnessChecks=0,n.canvas=document.createElement("canvas"),n.canvas.width=n.width,n.canvas.height=n.height,n.context=n.canvas.getContext("2d"),n},c.recycleTexture=function(e,t){for(var n=this.getTextureQueue(e),r=this.getRetiredTextureQueue(e),o=0;o<r.length;o++){var a=r[o];if(a.width>=t)return a.retired=!1,a.usedWidth=0,a.invalidatedWidth=0,a.fullnessChecks=0,i.clearArray(a.eleCaches),a.context.setTransform(1,0,0,1,0,0),a.context.clearRect(0,0,a.width,a.height),i.removeFromArray(r,a),n.push(a),a}},c.queueElement=function(e,t){var n=this.getElementQueue(),r=this.getElementIdToQueue(),i=e.id(),o=r[i];if(o)o.level=Math.max(o.level,t),o.reqs++,n.updateItem(o);else{var a={ele:e,level:t,reqs:1};n.push(a),r[i]=a}},c.dequeue=function(e){for(var t=this.getElementQueue(),n=this.getElementIdToQueue(),r=[],i=0;i<1&&t.size()>0;i++){var o=t.pop(),a=o.ele;if(null==a._private.rscratch.imgCaches[o.level]){n[a.id()]=null,r.push(o);var l=a.boundingBox();this.getElement(a,l,e,o.level,s.dequeue)}}return r},c.removeFromQueue=function(e){var t=this.getElementQueue(),n=this.getElementIdToQueue(),r=n[e.id()];null!=r&&(r.reqs=i.MAX_INT,t.updateItem(r),t.pop(),n[e.id()]=null)},c.onDequeue=function(e){this.onDequeues.push(e)},c.offDequeue=function(e){i.removeFromArray(this.onDequeues,e)},c.setupDequeueing=a.setupDequeueing({deqRedrawThreshold:100,deqCost:.15,deqAvgCost:.1,deqNoDrawCost:.9,deqFastCost:.9,deq:function(e,t,n){return e.dequeue(t,n)},onDeqd:function(e,t){for(var n=0;n<e.onDequeues.length;n++)(0,e.onDequeues[n])(t)},shouldRedraw:function(e,t,n,i){for(var o=0;o<t.length;o++){var a=t[o].ele.boundingBox();if(r.boundingBoxesIntersect(a,i))return!0}return!1},priority:function(e){return e.renderer.beforeRenderPriorities.eleTxrDeq}}),e.exports=l},function(e,t,n){"use strict";var r=n(1),i=n(2),o=n(9),a=n(0),s=n(19),l=function(e,t){var n=this,i=n.renderer=e;n.layersByLevel={},n.firstGet=!0,n.lastInvalidationTime=r.performanceNow()-500,n.skipping=!1,i.beforeRender((function(e,t){t-n.lastInvalidationTime<=250?n.skipping=!0:n.skipping=!1})),n.layersQueue=new o((function(e,t){return t.reqs-e.reqs})),n.eleTxrCache=t,n.setupEleCacheInvalidation(),n.setupDequeueing()},c=l.prototype,u=0,d=Math.pow(2,53)-1;function f(e,t){null!=e.imageSmoothingEnabled?e.imageSmoothingEnabled=t:(e.webkitImageSmoothingEnabled=t,e.mozImageSmoothingEnabled=t,e.msImageSmoothingEnabled=t)}c.makeLayer=function(e,t){var n=Math.pow(2,t),r=Math.ceil(e.w*n),i=Math.ceil(e.h*n),o=document.createElement("canvas");o.width=r,o.height=i;var a={id:u=++u%d,bb:e,level:t,width:r,height:i,canvas:o,context:o.getContext("2d"),eles:[],elesQueue:[],reqs:0},s=a.context,l=-a.bb.x1,c=-a.bb.y1;return s.scale(n,n),s.translate(l,c),a},c.getLayers=function(e,t,n){var o=this,a=o.renderer.cy.zoom(),s=o.firstGet;if(o.firstGet=!1,null==n)if((n=Math.ceil(i.log2(a*t)))<-4)n=-4;else if(a>=3.99||n>2)return null;o.validateLayersElesOrdering(n,e);var l,c,u=o.layersByLevel,d=Math.pow(2,n),f=u[n]=u[n]||[];if(o.levelIsComplete(n,e))return f;!function(){var t=function(t){if(o.validateLayersElesOrdering(t,e),o.levelIsComplete(t,e))return c=u[t],!0},i=function(e){if(!c)for(var r=n+e;-4<=r&&r<=2&&!t(r);r+=e);};i(1),i(-1);for(var a=f.length-1;a>=0;a--){var s=f[a];s.invalid&&r.removeFromArray(f,s)}}();var p=function(t){var r=(t=t||{}).after;if(function(){if(!l){l=i.makeBoundingBox();for(var t=0;t<e.length;t++)i.updateBoundingBox(l,e[t].boundingBox())}}(),l.w*d*(l.h*d)>16e6)return null;var a=o.makeLayer(l,n);if(null!=r){var s=f.indexOf(r)+1;f.splice(s,0,a)}else(void 0===t.insert||t.insert)&&f.unshift(a);return a};if(o.skipping&&!s)return null;for(var h=null,g=e.length/1,v=!s,m=0;m<e.length;m++){var b=e[m],y=b._private.rscratch,x=y.imgLayerCaches=y.imgLayerCaches||{},w=x[n];if(w)h=w;else{if((!h||h.eles.length>=g||!i.boundingBoxInBoundingBox(h.bb,b.boundingBox()))&&!(h=p({insert:!0,after:h})))return null;c||v?o.queueLayer(h,b):o.drawEleInLayer(h,b,n,t),h.eles.push(b),x[n]=h}}return c||(v?null:f)},c.getEleLevelForLayerLevel=function(e,t){return e},c.drawEleInLayer=function(e,t,n,r){var i=this.renderer,o=e.context,a=t.boundingBox();if(0!==a.w&&0!==a.h&&t.visible()){var s=this.eleTxrCache,l=s.reasons.highQuality;n=this.getEleLevelForLayerLevel(n,r);var c=s.getElement(t,a,null,n,l);c?(f(o,!1),o.drawImage(c.texture.canvas,c.x,0,c.width,c.height,a.x1,a.y1,a.w,a.h),f(o,!0)):i.drawElement(o,t)}},c.levelIsComplete=function(e,t){var n=this.layersByLevel[e];if(!n||0===n.length)return!1;for(var r=0,i=0;i<n.length;i++){var o=n[i];if(o.reqs>0)return!1;if(o.invalid)return!1;r+=o.eles.length}return r===t.length},c.validateLayersElesOrdering=function(e,t){var n=this.layersByLevel[e];if(n)for(var r=0;r<n.length;r++){for(var i=n[r],o=-1,a=0;a<t.length;a++)if(i.eles[0]===t[a]){o=a;break}if(o<0)this.invalidateLayer(i);else{var s=o;for(a=0;a<i.eles.length;a++)if(i.eles[a]!==t[s+a]){this.invalidateLayer(i);break}}}},c.updateElementsInLayers=function(e,t){for(var n=a.element(e[0]),r=0;r<e.length;r++)for(var i=n?null:e[r],o=n?e[r]:e[r].ele,s=o._private.rscratch,l=s.imgLayerCaches=s.imgLayerCaches||{},c=-4;c<=2;c++){var u=l[c];u&&(i&&this.getEleLevelForLayerLevel(u.level)!==i.level||t(u,o,i))}},c.haveLayers=function(){for(var e=!1,t=-4;t<=2;t++){var n=this.layersByLevel[t];if(n&&n.length>0){e=!0;break}}return e},c.invalidateElements=function(e){var t=this;t.lastInvalidationTime=r.performanceNow(),0!==e.length&&t.haveLayers()&&t.updateElementsInLayers(e,(function(e,n,r){t.invalidateLayer(e)}))},c.invalidateLayer=function(e){if(this.lastInvalidationTime=r.performanceNow(),!e.invalid){var t=e.level,n=e.eles,i=this.layersByLevel[t];r.removeFromArray(i,e),e.elesQueue=[],e.invalid=!0,e.replacement&&(e.replacement.invalid=!0);for(var o=0;o<n.length;o++){var a=n[o]._private.rscratch.imgLayerCaches;a&&(a[t]=null)}}},c.refineElementTextures=function(e){var t=this;t.updateElementsInLayers(e,(function(e,n,r){var i=e.replacement;if(i||((i=e.replacement=t.makeLayer(e.bb,e.level)).replaces=e,i.eles=e.eles),!i.reqs)for(var o=0;o<i.eles.length;o++)t.queueLayer(i,i.eles[o])}))},c.setupEleCacheInvalidation=function(){var e=this,t=[],n=r.debounce((function(){e.refineElementTextures(t),t=[]}),50);e.eleTxrCache.onDequeue((function(e){for(var r=0;r<e.length;r++)t.push(e[r]);n()}))},c.queueLayer=function(e,t){var n=this.layersQueue,r=e.elesQueue,i=r.hasId=r.hasId||{};if(!e.replacement){if(t){if(i[t.id()])return;r.push(t),i[t.id()]=!0}e.reqs?(e.reqs++,n.updateItem(e)):(e.reqs=1,n.push(e))}},c.dequeue=function(e){for(var t=this.layersQueue,n=[],r=0;r<1&&0!==t.size();){var i=t.peek();if(i.replacement)t.pop();else if(i.replaces&&i!==i.replaces.replacement)t.pop();else if(i.invalid)t.pop();else{var o=i.elesQueue.shift();o&&(this.drawEleInLayer(i,o,i.level,e),r++),0===n.length&&n.push(!0),0===i.elesQueue.length&&(t.pop(),i.reqs=0,i.replaces&&this.applyLayerReplacement(i),this.requestRedraw())}}return n},c.applyLayerReplacement=function(e){var t=this.layersByLevel[e.level],n=e.replaces,r=t.indexOf(n);if(!(r<0||n.invalid)){t[r]=e;for(var i=0;i<e.eles.length;i++){var o=e.eles[i]._private,a=o.imgLayerCaches=o.imgLayerCaches||{};a&&(a[e.level]=e)}this.requestRedraw()}},c.requestRedraw=r.debounce((function(){var e=this.renderer;e.redrawHint("eles",!0),e.redrawHint("drag",!0),e.redraw()}),100),c.setupDequeueing=s.setupDequeueing({deqRedrawThreshold:50,deqCost:.15,deqAvgCost:.1,deqNoDrawCost:.9,deqFastCost:.9,deq:function(e,t){return e.dequeue(t)},onDeqd:r.noop,shouldRedraw:r.trueify,priority:function(e){return e.renderer.beforeRenderPriorities.lyrTxrDeq}}),e.exports=l},function(e,t,n){"use strict";var r,i={arrowShapeImpl:function(e){return(r||(r={polygon:function(e,t){for(var n=0;n<t.length;n++){var r=t[n];e.lineTo(r.x,r.y)}},"triangle-backcurve":function(e,t,n){for(var r,i=0;i<t.length;i++){var o=t[i];0===i&&(r=o),e.lineTo(o.x,o.y)}e.quadraticCurveTo(n.x,n.y,r.x,r.y)},"triangle-tee":function(e,t,n){e.beginPath&&e.beginPath();for(var r=t,i=0;i<r.length;i++){var o=r[i];e.lineTo(o.x,o.y)}e.closePath&&e.closePath(),e.beginPath&&e.beginPath();var a=n,s=n[0];for(e.moveTo(s.x,s.y),i=0;i<a.length;i++)o=a[i],e.lineTo(o.x,o.y);e.closePath&&e.closePath()},"triangle-cross":function(e,t,n){e.beginPath&&e.beginPath();for(var r=t,i=0;i<r.length;i++){var o=r[i];e.lineTo(o.x,o.y)}e.closePath&&e.closePath(),e.beginPath&&e.beginPath();var a=n,s=n[0];for(e.moveTo(s.x,s.y),i=0;i<a.length;i++)o=a[i],e.lineTo(o.x,o.y);e.closePath&&e.closePath()},circle:function(e,t,n,r){e.arc(t,n,r,0,2*Math.PI,!1)}}))[e]}};e.exports=i},function(e,t,n){"use strict";var r=n(2),i={drawElement:function(e,t,n,r){t.isNode()?this.drawNode(e,t,n,r):this.drawEdge(e,t,n,r)},drawCachedElement:function(e,t,n,i){var o=t.boundingBox();if(0!==o.w&&0!==o.h&&(!i||r.boundingBoxesIntersect(o,i))){var a=this.data.eleTxrCache.getElement(t,o,n);null!=a?e.drawImage(a.texture.canvas,a.x,0,a.width,a.height,o.x1,o.y1,o.w,o.h):this.drawElement(e,t)}},drawElements:function(e,t){for(var n=0;n<t.length;n++){var r=t[n];this.drawElement(e,r)}},drawCachedElements:function(e,t,n,r){for(var i=0;i<t.length;i++){var o=t[i];this.drawCachedElement(e,o,n,r)}},drawCachedNodes:function(e,t,n,r){for(var i=0;i<t.length;i++){var o=t[i];o.isNode()&&this.drawCachedElement(e,o,n,r)}},drawLayeredElements:function(e,t,n,r){var i=this.data.lyrTxrCache.getLayers(t,n);if(i)for(var o=0;o<i.length;o++){var a=i[o],s=a.bb;0!==s.w&&0!==s.h&&e.drawImage(a.canvas,s.x1,s.y1,s.w,s.h)}else this.drawCachedElements(e,t,n,r)},drawDebugPoints:function(e,t){for(var n=function(t,n,r){e.fillStyle=r,e.fillRect(t-1,n-1,3,3)},r=0;r<t.length;r++){var i=t[r],o=i._private.rscratch;if(i.isNode()){var a=i.position();n(a.x,a.y,"magenta")}else{for(var s=o.allpts,l=0;l+1<s.length;l+=2)n(s[l],s[l+1],"cyan");n(o.midX,o.midY,"yellow")}}}};e.exports=i},function(e,t,n){"use strict";var r={drawEdge:function(e,t,n,r){var i=this,o=t._private.rscratch,a=i.usePaths();if(t.visible()&&!o.badLine&&null!=o.allpts&&!isNaN(o.allpts[0])){var s=void 0;n&&(s=n,e.translate(-s.x1,-s.y1));var l=2*t.pstyle("overlay-padding").pfValue,c=t.pstyle("overlay-opacity").value,u=t.pstyle("overlay-color").value,d=t.pstyle("line-color").value,f=t.pstyle("opacity").value,p=t.pstyle("line-style").value,h=t.pstyle("width").pfValue,g=function(){var n=arguments.length>0&&void 0!==arguments[0]?arguments[0]:f;e.lineWidth=h,e.lineCap="butt",i.strokeStyle(e,d[0],d[1],d[2],n),i.drawEdgePath(t,e,o.allpts,p)},v=function(){var n=arguments.length>0&&void 0!==arguments[0]?arguments[0]:f;i.drawArrowheads(e,t,n)};if(e.lineJoin="round","yes"===t.pstyle("ghost").value){var m=t.pstyle("ghost-offset-x").pfValue,b=t.pstyle("ghost-offset-y").pfValue,y=t.pstyle("ghost-opacity").value,x=f*y;e.translate(m,b),g(x),v(x),e.translate(-m,-b)}g(),v(),function(){var n=arguments.length>0&&void 0!==arguments[0]?arguments[0]:c;e.lineWidth=l,"self"!==o.edgeType||a?e.lineCap="round":e.lineCap="butt",i.strokeStyle(e,u[0],u[1],u[2],n),i.drawEdgePath(t,e,o.allpts,"solid")}(),i.drawElementText(e,t,r),n&&e.translate(s.x1,s.y1)}},drawEdgePath:function(e,t,n,r){var i=e._private.rscratch,o=t,a=void 0,s=!1,l=this.usePaths();if(l){var c=n.join("$");i.pathCacheKey&&i.pathCacheKey===c?(a=t=i.pathCache,s=!0):(a=t=new Path2D,i.pathCacheKey=c,i.pathCache=a)}if(o.setLineDash)switch(r){case"dotted":o.setLineDash([1,1]);break;case"dashed":o.setLineDash([6,3]);break;case"solid":o.setLineDash([])}if(!s&&!i.badLine)switch(t.beginPath&&t.beginPath(),t.moveTo(n[0],n[1]),i.edgeType){case"bezier":case"self":case"compound":case"multibezier":if(e.hasClass("horizontal")){var u=n[4],d=n[5],f=(n[0]+n[4])/2;t.lineTo(n[0]+10,n[1]),t.bezierCurveTo(f,n[1],f,n[5],n[4]-10,n[5]),t.lineTo(u,d)}else if(e.hasClass("vertical")){var p=n[4],h=n[5],g=(n[1]+n[5])/2;t.bezierCurveTo(n[0],g,n[4],g,n[4],n[5]-10),t.lineTo(p,h)}else for(var v=2;v+3<n.length;v+=4)t.quadraticCurveTo(n[v],n[v+1],n[v+2],n[v+3]);break;case"straight":case"segments":case"haystack":for(var m=2;m+1<n.length;m+=2)t.lineTo(n[m],n[m+1])}t=o,l?t.stroke(a):t.stroke(),t.setLineDash&&t.setLineDash([])},drawArrowheads:function(e,t,n){var r=t._private.rscratch,i="haystack"===r.edgeType;i||this.drawArrowhead(e,t,"source",r.arrowStartX,r.arrowStartY,r.srcArrowAngle,n),this.drawArrowhead(e,t,"mid-target",r.midX,r.midY,r.midtgtArrowAngle,n),this.drawArrowhead(e,t,"mid-source",r.midX,r.midY,r.midsrcArrowAngle,n),i||(t.hasClass("horizontal")?this.drawArrowhead(e,t,"target",r.arrowEndX,r.arrowEndY,-Math.PI/2,n):t.hasClass("vertical")?this.drawArrowhead(e,t,"target",r.arrowEndX,r.arrowEndY,0,n):this.drawArrowhead(e,t,"target",r.arrowEndX,r.arrowEndY,r.tgtArrowAngle,n))},drawArrowhead:function(e,t,n,r,i,o,a){if(!(isNaN(r)||null==r||isNaN(i)||null==i||isNaN(o)||null==o)){var s=t.pstyle(n+"-arrow-shape").value;if("none"!==s){var l="hollow"===t.pstyle(n+"-arrow-fill").value?"both":"filled",c=t.pstyle(n+"-arrow-fill").value,u=t.pstyle("width").pfValue,d=t.pstyle("opacity").value;void 0===a&&(a=d);var f=e.globalCompositeOperation;1===a&&"hollow"!==c||(e.globalCompositeOperation="destination-out",this.fillStyle(e,255,255,255,1),this.strokeStyle(e,255,255,255,1),this.drawArrowShape(t,n,e,l,u,s,r,i,o),e.globalCompositeOperation=f);var p=t.pstyle(n+"-arrow-color").value;this.fillStyle(e,p[0],p[1],p[2],a),this.strokeStyle(e,p[0],p[1],p[2],a),this.drawArrowShape(t,n,e,c,u,s,r,i,o)}}},drawArrowShape:function(e,t,n,r,i,o,a,s,l){var c=this.usePaths(),u=e._private.rscratch,d=!1,f=void 0,p=n,h={x:a,y:s},g=e.pstyle("arrow-scale").value,v=this.getArrowWidth(i,g),m=this.arrowShapes[o];if(c){var b=v+"$"+o+"$"+l+"$"+a+"$"+s;u.arrowPathCacheKey=u.arrowPathCacheKey||{},u.arrowPathCache=u.arrowPathCache||{},u.arrowPathCacheKey[t]===b?(f=n=u.arrowPathCache[t],d=!0):(f=n=new Path2D,u.arrowPathCacheKey[t]=b,u.arrowPathCache[t]=f)}n.beginPath&&n.beginPath(),d||m.draw(n,v,l,h,i),!m.leavePathOpen&&n.closePath&&n.closePath(),n=p,"filled"!==r&&"both"!==r||(c?n.fill(f):n.fill()),"hollow"!==r&&"both"!==r||(n.lineWidth=m.matchEdgeWidth?i:1,n.lineJoin="miter",c?n.stroke(f):n.stroke())}};e.exports=r},function(e,t,n){"use strict";var r={safeDrawImage:function(e,t,n,r,i,o,a,s,l,c){i<=0||o<=0||l<=0||c<=0||e.drawImage(t,n,r,i,o,a,s,l,c)},drawInscribedImage:function(e,t,n,r,i){var o=this,a=n.position(),s=a.x,l=a.y,c=n.cy().style(),u=c.getIndexedStyle.bind(c),d=u(n,"background-fit","value",r),f=u(n,"background-repeat","value",r),p=n.width(),h=n.height(),g=2*n.padding(),v=p+("inner"===u(n,"background-width-relative-to","value",r)?0:g),m=h+("inner"===u(n,"background-height-relative-to","value",r)?0:g),b=n._private.rscratch,y="node"===n.pstyle("background-clip").value,x=u(n,"background-image-opacity","value",r)*i,w=t.width||t.cachedW,k=t.height||t.cachedH;null!=w&&null!=k||(document.body.appendChild(t),w=t.cachedW=t.width||t.offsetWidth,k=t.cachedH=t.height||t.offsetHeight,document.body.removeChild(t));var A=w,E=k;if("auto"!==u(n,"background-width","value",r)&&(A="%"===u(n,"background-width","units",r)?u(n,"background-width","pfValue",r)*v:u(n,"background-width","pfValue",r)),"auto"!==u(n,"background-height","value",r)&&(E="%"===u(n,"background-height","units",r)?u(n,"background-height","pfValue",r)*m:u(n,"background-height","pfValue",r)),0!==A&&0!==E){if("contain"===d)A*=S=Math.min(v/A,m/E),E*=S;else if("cover"===d){var S;A*=S=Math.max(v/A,m/E),E*=S}var C=s-v/2;"%"===u(n,"background-position-x","units",r)?C+=(v-A)*u(n,"background-position-x","pfValue",r):C+=u(n,"background-position-x","pfValue",r);var $=l-m/2;"%"===u(n,"background-position-y","units",r)?$+=(m-E)*u(n,"background-position-y","pfValue",r):$+=u(n,"background-position-y","pfValue",r),b.pathCache&&(C-=s,$-=l,s=0,l=0);var O=e.globalAlpha;if(e.globalAlpha=x,"no-repeat"===f)y&&(e.save(),b.pathCache?e.clip(b.pathCache):(o.nodeShapes[o.getNodeShape(n)].draw(e,s,l,v,m),e.clip())),o.safeDrawImage(e,t,0,0,w,k,C,$,A,E),y&&e.restore();else{var _=e.createPattern(t,f);e.fillStyle=_,o.nodeShapes[o.getNodeShape(n)].draw(e,s,l,v,m),e.translate(C,$),e.fill(),e.translate(-C,-$)}e.globalAlpha=O}}};e.exports=r},function(e,t,n){"use strict";var r=n(1),i=n(2),o={eleTextBiggerThanMin:function(e,t){if(!t){var n=e.cy().zoom(),r=this.getPixelRatio(),o=Math.ceil(i.log2(n*r));t=Math.pow(2,o)}return!(e.pstyle("font-size").pfValue*t<e.pstyle("min-zoomed-font-size").pfValue)},drawElementText:function(e,t,n){var r=this;if(void 0===n){if(!r.eleTextBiggerThanMin(t))return}else if(!n)return;if(t.isNode()){if(!(o=t.pstyle("label"))||!o.value)return;var i=t.pstyle("text-halign").strValue;switch(t.pstyle("text-valign").strValue,i){case"left":e.textAlign="right";break;case"right":e.textAlign="left";break;default:e.textAlign="center"}e.textBaseline="bottom"}else{var o=t.pstyle("label"),a=t.pstyle("source-label"),s=t.pstyle("target-label");if(!(o&&o.value||a&&a.value||s&&s.value))return;e.textAlign="center",e.textBaseline="bottom"}r.drawText(e,t),t.isEdge()&&(r.drawText(e,t,"source"),r.drawText(e,t,"target"))}};o.drawNodeText=o.drawEdgeText=o.drawElementText,o.getFontCache=function(e){var t;this.fontCaches=this.fontCaches||[];for(var n=0;n<this.fontCaches.length;n++)if((t=this.fontCaches[n]).context===e)return t;return t={context:e},this.fontCaches.push(t),t},o.setupTextStyle=function(e,t){var n=t.effectiveOpacity(),r=t.pstyle("font-style").strValue,i=t.pstyle("font-size").pfValue+"px",o=t.pstyle("font-family").strValue,a=t.pstyle("font-weight").strValue,s=t.pstyle("text-opacity").value*t.pstyle("opacity").value*n,l=t.pstyle("text-outline-opacity").value*s,c=t.pstyle("color").value,u=t.pstyle("text-outline-color").value,d=t._private.fontKey,f=this.getFontCache(e);f.key!==d&&(e.font=r+" "+a+" "+i+" "+o,f.key=d),e.lineJoin="round",this.fillStyle(e,c[0],c[1],c[2],s),this.strokeStyle(e,u[0],u[1],u[2],l)},o.drawText=function(e,t,n){var i=t._private.rscratch,o=t.effectiveOpacity();if(0!==o&&0!==t.pstyle("text-opacity").value){var a,s,l,c,u,d,f=r.getPrefixedProperty(i,"labelX",n),p=r.getPrefixedProperty(i,"labelY",n),h=this.getLabelText(t,n);if(null!=h&&""!==h&&!isNaN(f)&&!isNaN(p)){this.setupTextStyle(e,t);var g=n?n+"-":"",v=r.getPrefixedProperty(i,"labelWidth",n),m=r.getPrefixedProperty(i,"labelHeight",n),b=r.getPrefixedProperty(i,"labelAngle",n),y=t.pstyle(g+"text-margin-x").pfValue,x=t.pstyle(g+"text-margin-y").pfValue,w=t.isEdge(),k=(t.isNode(),t.pstyle("text-halign").value),A=t.pstyle("text-valign").value;w&&(k="center",A="center"),f+=y,p+=x;var E,S=t.pstyle("text-rotation");if(0!==(E="autorotate"===S.strValue?w?b:0:"none"===S.strValue?0:S.pfValue)){var C=f,$=p;e.translate(C,$),e.rotate(E),f=0,p=0}switch(A){case"top":break;case"center":p+=m/2;break;case"bottom":p+=m}var O=t.pstyle("text-background-opacity").value,_=t.pstyle("text-border-opacity").value,T=t.pstyle("text-border-width").pfValue,j=t.pstyle("text-background-padding").pfValue;if(O>0||T>0&&_>0){var P=f-j;switch(k){case"left":P-=v;break;case"center":P-=v/2}var D=p-m-j,R=v+2*j,I=m+2*j;if(O>0){var N=e.fillStyle,M=t.pstyle("text-background-color").value;e.fillStyle="rgba("+M[0]+","+M[1]+","+M[2]+","+O*o+")","roundrectangle"==t.pstyle("text-background-shape").strValue?(s=P,l=D,c=R,u=I,d=(d=2)||5,(a=e).beginPath(),a.moveTo(s+d,l),a.lineTo(s+c-d,l),a.quadraticCurveTo(s+c,l,s+c,l+d),a.lineTo(s+c,l+u-d),a.quadraticCurveTo(s+c,l+u,s+c-d,l+u),a.lineTo(s+d,l+u),a.quadraticCurveTo(s,l+u,s,l+u-d),a.lineTo(s,l+d),a.quadraticCurveTo(s,l,s+d,l),a.closePath(),a.fill()):e.fillRect(P,D,R,I),e.fillStyle=N}if(T>0&&_>0){var z=e.strokeStyle,L=e.lineWidth,B=t.pstyle("text-border-color").value,F=t.pstyle("text-border-style").value;if(e.strokeStyle="rgba("+B[0]+","+B[1]+","+B[2]+","+_*o+")",e.lineWidth=T,e.setLineDash)switch(F){case"dotted":e.setLineDash([1,1]);break;case"dashed":e.setLineDash([4,2]);break;case"double":e.lineWidth=T/4,e.setLineDash([]);break;case"solid":e.setLineDash([])}if(e.strokeRect(P,D,R,I),"double"===F){var q=T/2;e.strokeRect(P+q,D+q,R-2*q,I-2*q)}e.setLineDash&&e.setLineDash([]),e.lineWidth=L,e.strokeStyle=z}}var V=2*t.pstyle("text-outline-width").pfValue;if(V>0&&(e.lineWidth=V),"wrap"===t.pstyle("text-wrap").value){var U=r.getPrefixedProperty(i,"labelWrapCachedLines",n),H=m/U.length;switch(A){case"top":p-=(U.length-1)*H;break;case"center":case"bottom":p-=(U.length-1)*H}for(var G=0;G<U.length;G++)V>0&&e.strokeText(U[G],f,p),e.fillText(U[G],f,p),p+=H}else V>0&&e.strokeText(h,f,p),e.fillText(h,f,p);0!==E&&(e.rotate(-E),e.translate(-C,-$))}}},e.exports=o},function(e,t,n){"use strict";var r=n(0),i={drawNode:function(e,t,n,i){var o,a,s=this,l=t._private,c=l.rscratch,u=t.position();if(r.number(u.x)&&r.number(u.y)&&t.visible()){var d=t.effectiveOpacity(),f=s.usePaths(),p=void 0,h=!1,g=t.padding();o=t.width()+2*g,a=t.height()+2*g;var v=void 0;n&&(v=n,e.translate(-v.x1,-v.y1));for(var m=t.pstyle("background-image").value,b=new Array(m.length),y=new Array(m.length),x=0,w=0;w<m.length;w++){var k=m[w];if(b[w]=null!=k&&"none"!==k){var A=t.cy().style().getIndexedStyle(t,"background-image-crossorigin","value",w);x++,y[w]=s.getCachedImage(k,A,(function(){t.emitAndNotify("background")}))}}var E=t.pstyle("background-blacken").value,S=t.pstyle("border-width").pfValue,C=t.pstyle("background-color").value,$=t.pstyle("background-opacity").value*d,O=t.pstyle("border-color").value,_=t.pstyle("border-style").value,T=t.pstyle("border-opacity").value*d;e.lineJoin="miter";var j=function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:$;s.fillStyle(e,C[0],C[1],C[2],t)},P=function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:T;s.strokeStyle(e,O[0],O[1],O[2],t)},D=t.pstyle("shape").strValue,R=t.pstyle("shape-polygon-points").pfValue;if(f){var I=D+"$"+o+"$"+a+("polygon"===D?"$"+R.join("$"):"");e.translate(u.x,u.y),c.pathCacheKey===I?(p=c.pathCache,h=!0):(p=new Path2D,c.pathCacheKey=I,c.pathCache=p)}var N,M,z,L=function(){if(!h){var n=u;f&&(n={x:0,y:0}),s.nodeShapes[s.getNodeShape(t)].draw(p||e,n.x,n.y,o,a)}f?e.fill(p):e.fill()},B=function(){for(var n=arguments.length>0&&void 0!==arguments[0]?arguments[0]:d,r=l.backgrounding,i=0,o=0;o<y.length;o++)b[o]&&y[o].complete&&!y[o].error&&(i++,s.drawInscribedImage(e,y[o],t,o,n));l.backgrounding=!(i===x),r!==l.backgrounding&&t.updateStyle(!1)},F=function(){var n=arguments.length>0&&void 0!==arguments[0]&&arguments[0],r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:d;s.hasPie(t)&&(s.drawPie(e,t,r),n&&(f||s.nodeShapes[s.getNodeShape(t)].draw(e,u.x,u.y,o,a)))},q=function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:d,n=(E>0?E:-E)*t,r=E>0?0:255;0!==E&&(s.fillStyle(e,r,r,r,n),f?e.fill(p):e.fill())},V=function(){if(S>0){if(e.lineWidth=S,e.lineCap="butt",e.setLineDash)switch(_){case"dotted":e.setLineDash([1,1]);break;case"dashed":e.setLineDash([4,2]);break;case"solid":case"double":e.setLineDash([])}if(f?e.stroke(p):e.stroke(),"double"===_){e.lineWidth=S/3;var t=e.globalCompositeOperation;e.globalCompositeOperation="destination-out",f?e.stroke(p):e.stroke(),e.globalCompositeOperation=t}e.setLineDash&&e.setLineDash([])}};if("yes"===t.pstyle("ghost").value){var U=t.pstyle("ghost-offset-x").pfValue,H=t.pstyle("ghost-offset-y").pfValue,G=t.pstyle("ghost-opacity").value,W=G*d;e.translate(U,H),j(G*$),L(),B(W),F(0!==E||0!==S),q(W),P(G*T),V(),e.translate(-U,-H)}j(),L(),B(),F(0!==E||0!==S),q(),P(),V(),f&&e.translate(-u.x,-u.y),s.drawElementText(e,t,i),N=t.pstyle("overlay-padding").pfValue,M=t.pstyle("overlay-opacity").value,z=t.pstyle("overlay-color").value,M>0&&(s.fillStyle(e,z[0],z[1],z[2],M),s.nodeShapes.roundrectangle.draw(e,u.x,u.y,o+2*N,a+2*N),e.fill()),n&&e.translate(v.x1,v.y1)}},hasPie:function(e){return(e=e[0])._private.hasPie},drawPie:function(e,t,n,r){t=t[0],r=r||t.position();var i=t.cy().style(),o=t.pstyle("pie-size"),a=r.x,s=r.y,l=t.width(),c=t.height(),u=Math.min(l,c)/2,d=0;this.usePaths()&&(a=0,s=0),"%"===o.units?u*=o.pfValue:void 0!==o.pfValue&&(u=o.pfValue/2);for(var f=1;f<=i.pieBackgroundN;f++){var p=t.pstyle("pie-"+f+"-background-size").value,h=t.pstyle("pie-"+f+"-background-color").value,g=t.pstyle("pie-"+f+"-background-opacity").value*n,v=p/100;v+d>1&&(v=1-d);var m=1.5*Math.PI+2*Math.PI*d,b=m+2*Math.PI*v;0===p||d>=1||d+v>1||(e.beginPath(),e.moveTo(a,s),e.arc(a,s,u,m,b),e.closePath(),this.fillStyle(e,h[0],h[1],h[2],g),e.fill(),d+=v)}}};e.exports=i},function(e,t,n){"use strict";var r={},i=n(1);r.getPixelRatio=function(){var e=this.data.contexts[0];if(null!=this.forcedPixelRatio)return this.forcedPixelRatio;var t=e.backingStorePixelRatio||e.webkitBackingStorePixelRatio||e.mozBackingStorePixelRatio||e.msBackingStorePixelRatio||e.oBackingStorePixelRatio||e.backingStorePixelRatio||1;return(window.devicePixelRatio||1)/t},r.paintCache=function(e){for(var t,n=this.paintCaches=this.paintCaches||[],r=!0,i=0;i<n.length;i++)if((t=n[i]).context===e){r=!1;break}return r&&(t={context:e},n.push(t)),t},r.fillStyle=function(e,t,n,r,i){e.fillStyle="rgba("+t+","+n+","+r+","+i+")"},r.strokeStyle=function(e,t,n,r,i){e.strokeStyle="rgba("+t+","+n+","+r+","+i+")"},r.matchCanvasSize=function(e){var t=this,n=t.data,r=t.findContainerClientCoords(),i=r[2],o=r[3],a=t.getPixelRatio(),s=t.motionBlurPxRatio;e!==t.data.bufferCanvases[t.MOTIONBLUR_BUFFER_NODE]&&e!==t.data.bufferCanvases[t.MOTIONBLUR_BUFFER_DRAG]||(a=s);var l,c=i*a,u=o*a;if(c!==t.canvasWidth||u!==t.canvasHeight){t.fontCaches=null;var d=n.canvasContainer;d.style.width=i+"px",d.style.height=o+"px";for(var f=0;f<t.CANVAS_LAYERS;f++)(l=n.canvases[f]).width=c,l.height=u,l.style.width=i+"px",l.style.height=o+"px";for(f=0;f<t.BUFFER_COUNT;f++)(l=n.bufferCanvases[f]).width=c,l.height=u,l.style.width=i+"px",l.style.height=o+"px";t.textureMult=1,a<=1&&(l=n.bufferCanvases[t.TEXTURE_BUFFER],t.textureMult=2,l.width=c*t.textureMult,l.height=u*t.textureMult),t.canvasWidth=c,t.canvasHeight=u}},r.renderTo=function(e,t,n,r){this.render({forcedContext:e,forcedZoom:t,forcedPan:n,drawAllLayers:!0,forcedPxRatio:r})},r.render=function(e){var t=(e=e||i.staticEmptyObject()).forcedContext,n=e.drawAllLayers,r=e.drawOnlyNodeLayer,o=e.forcedZoom,a=e.forcedPan,s=this,l=void 0===e.forcedPxRatio?this.getPixelRatio():e.forcedPxRatio,c=s.cy,u=s.data,d=u.canvasNeedsRedraw,f=s.textureOnViewport&&!t&&(s.pinching||s.hoverData.dragging||s.swipePanning||s.data.wheelZooming),p=void 0!==e.motionBlur?e.motionBlur:s.motionBlur,h=s.motionBlurPxRatio,g=c.hasCompoundNodes(),v=s.hoverData.draggingEles,m=!(!s.hoverData.selecting&&!s.touchData.selecting),b=p=p&&!t&&s.motionBlurEnabled&&!m;t||(s.prevPxRatio!==l&&(s.invalidateContainerClientCoordsCache(),s.matchCanvasSize(s.container),s.redrawHint("eles",!0),s.redrawHint("drag",!0)),s.prevPxRatio=l),!t&&s.motionBlurTimeout&&clearTimeout(s.motionBlurTimeout),p&&(null==s.mbFrames&&(s.mbFrames=0),s.mbFrames++,s.mbFrames<3&&(b=!1),s.mbFrames>s.minMbLowQualFrames&&(s.motionBlurPxRatio=s.mbPxRBlurry)),s.clearingMotionBlur&&(s.motionBlurPxRatio=1),s.textureDrawLastFrame&&!f&&(d[s.NODE]=!0,d[s.SELECT_BOX]=!0);var y=c.style()._private.coreStyle,x=c.zoom(),w=void 0!==o?o:x,k=c.pan(),A={x:k.x,y:k.y},E={zoom:x,pan:{x:k.x,y:k.y}},S=s.prevViewport;void 0===S||E.zoom!==S.zoom||E.pan.x!==S.pan.x||E.pan.y!==S.pan.y||v&&!g||(s.motionBlurPxRatio=1),a&&(A=a),w*=l,A.x*=l,A.y*=l;var C=s.getCachedZSortedEles();function $(e,t,n,r,i){var o=e.globalCompositeOperation;e.globalCompositeOperation="destination-out",s.fillStyle(e,255,255,255,s.motionBlurTransparency),e.fillRect(t,n,r,i),e.globalCompositeOperation=o}function O(e,r){var i,l,c,d;s.clearingMotionBlur||e!==u.bufferContexts[s.MOTIONBLUR_BUFFER_NODE]&&e!==u.bufferContexts[s.MOTIONBLUR_BUFFER_DRAG]?(i=A,l=w,c=s.canvasWidth,d=s.canvasHeight):(i={x:k.x*h,y:k.y*h},l=x*h,c=s.canvasWidth*h,d=s.canvasHeight*h),e.setTransform(1,0,0,1,0,0),"motionBlur"===r?$(e,0,0,c,d):t||void 0!==r&&!r||e.clearRect(0,0,c,d),n||(e.translate(i.x,i.y),e.scale(l,l)),a&&e.translate(a.x,a.y),o&&e.scale(o,o)}if(f||(s.textureDrawLastFrame=!1),f){if(s.textureDrawLastFrame=!0,!s.textureCache){s.textureCache={},s.textureCache.bb=c.mutableElements().boundingBox(),s.textureCache.texture=s.data.bufferCanvases[s.TEXTURE_BUFFER];var _=s.data.bufferContexts[s.TEXTURE_BUFFER];_.setTransform(1,0,0,1,0,0),_.clearRect(0,0,s.canvasWidth*s.textureMult,s.canvasHeight*s.textureMult),s.render({forcedContext:_,drawOnlyNodeLayer:!0,forcedPxRatio:l*s.textureMult}),(E=s.textureCache.viewport={zoom:c.zoom(),pan:c.pan(),width:s.canvasWidth,height:s.canvasHeight}).mpan={x:(0-E.pan.x)/E.zoom,y:(0-E.pan.y)/E.zoom}}d[s.DRAG]=!1,d[s.NODE]=!1;var T=u.contexts[s.NODE],j=s.textureCache.texture;E=s.textureCache.viewport,s.textureCache.bb,T.setTransform(1,0,0,1,0,0),p?$(T,0,0,E.width,E.height):T.clearRect(0,0,E.width,E.height);var P=y["outside-texture-bg-color"].value,D=y["outside-texture-bg-opacity"].value;s.fillStyle(T,P[0],P[1],P[2],D),T.fillRect(0,0,E.width,E.height),x=c.zoom(),O(T,!1),T.clearRect(E.mpan.x,E.mpan.y,E.width/E.zoom/l,E.height/E.zoom/l),T.drawImage(j,E.mpan.x,E.mpan.y,E.width/E.zoom/l,E.height/E.zoom/l)}else s.textureOnViewport&&!t&&(s.textureCache=null);var R=c.extent(),I=s.pinching||s.hoverData.dragging||s.swipePanning||s.data.wheelZooming||s.hoverData.draggingEles,N=s.hideEdgesOnViewport&&I,M=[];if(M[s.NODE]=!d[s.NODE]&&p&&!s.clearedForMotionBlur[s.NODE]||s.clearingMotionBlur,M[s.NODE]&&(s.clearedForMotionBlur[s.NODE]=!0),M[s.DRAG]=!d[s.DRAG]&&p&&!s.clearedForMotionBlur[s.DRAG]||s.clearingMotionBlur,M[s.DRAG]&&(s.clearedForMotionBlur[s.DRAG]=!0),d[s.NODE]||n||r||M[s.NODE]){var z=p&&!M[s.NODE]&&1!==h;O(T=t||(z?s.data.bufferContexts[s.MOTIONBLUR_BUFFER_NODE]:u.contexts[s.NODE]),p&&!z?"motionBlur":void 0),N?s.drawCachedNodes(T,C.nondrag,l,R):s.drawLayeredElements(T,C.nondrag,l,R),s.debug&&s.drawDebugPoints(T,C.nondrag),n||p||(d[s.NODE]=!1)}if(!r&&(d[s.DRAG]||n||M[s.DRAG])&&(z=p&&!M[s.DRAG]&&1!==h,O(T=t||(z?s.data.bufferContexts[s.MOTIONBLUR_BUFFER_DRAG]:u.contexts[s.DRAG]),p&&!z?"motionBlur":void 0),N?s.drawCachedNodes(T,C.drag,l,R):s.drawCachedElements(T,C.drag,l,R),s.debug&&s.drawDebugPoints(T,C.drag),n||p||(d[s.DRAG]=!1)),s.showFps||!r&&d[s.SELECT_BOX]&&!n){if(O(T=t||u.contexts[s.SELECT_BOX]),1==s.selection[4]&&(s.hoverData.selecting||s.touchData.selecting)){x=s.cy.zoom();var L=y["selection-box-border-width"].value/x;T.lineWidth=L,T.fillStyle="rgba("+y["selection-box-color"].value[0]+","+y["selection-box-color"].value[1]+","+y["selection-box-color"].value[2]+","+y["selection-box-opacity"].value+")",T.fillRect(s.selection[0],s.selection[1],s.selection[2]-s.selection[0],s.selection[3]-s.selection[1]),L>0&&(T.strokeStyle="rgba("+y["selection-box-border-color"].value[0]+","+y["selection-box-border-color"].value[1]+","+y["selection-box-border-color"].value[2]+","+y["selection-box-opacity"].value+")",T.strokeRect(s.selection[0],s.selection[1],s.selection[2]-s.selection[0],s.selection[3]-s.selection[1]))}if(u.bgActivePosistion&&!s.hoverData.selecting){x=s.cy.zoom();var B=u.bgActivePosistion;T.fillStyle="rgba("+y["active-bg-color"].value[0]+","+y["active-bg-color"].value[1]+","+y["active-bg-color"].value[2]+","+y["active-bg-opacity"].value+")",T.beginPath(),T.arc(B.x,B.y,y["active-bg-size"].pfValue/x,0,2*Math.PI),T.fill()}var F=s.lastRedrawTime;if(s.showFps&&F){F=Math.round(F);var q=Math.round(1e3/F);T.setTransform(1,0,0,1,0,0),T.fillStyle="rgba(255, 0, 0, 0.75)",T.strokeStyle="rgba(255, 0, 0, 0.75)",T.lineWidth=1,T.fillText("1 frame = "+F+" ms = "+q+" fps",0,20),T.strokeRect(0,30,250,20),T.fillRect(0,30,250*Math.min(q/60,1),20)}n||(d[s.SELECT_BOX]=!1)}if(p&&1!==h){var V=u.contexts[s.NODE],U=s.data.bufferCanvases[s.MOTIONBLUR_BUFFER_NODE],H=u.contexts[s.DRAG],G=s.data.bufferCanvases[s.MOTIONBLUR_BUFFER_DRAG],W=function(e,t,n){e.setTransform(1,0,0,1,0,0),n||!b?e.clearRect(0,0,s.canvasWidth,s.canvasHeight):$(e,0,0,s.canvasWidth,s.canvasHeight);var r=h;e.drawImage(t,0,0,s.canvasWidth*r,s.canvasHeight*r,0,0,s.canvasWidth,s.canvasHeight)};(d[s.NODE]||M[s.NODE])&&(W(V,U,M[s.NODE]),d[s.NODE]=!1),(d[s.DRAG]||M[s.DRAG])&&(W(H,G,M[s.DRAG]),d[s.DRAG]=!1)}s.prevViewport=E,s.clearingMotionBlur&&(s.clearingMotionBlur=!1,s.motionBlurCleared=!0,s.motionBlur=!0),p&&(s.motionBlurTimeout=setTimeout((function(){s.motionBlurTimeout=null,s.clearedForMotionBlur[s.NODE]=!1,s.clearedForMotionBlur[s.DRAG]=!1,s.motionBlur=!1,s.clearingMotionBlur=!f,s.mbFrames=0,d[s.NODE]=!0,d[s.DRAG]=!0,s.redraw()}),100)),t||c.emit("render")},e.exports=r},function(e,t,n){"use strict";for(var r=n(2),i={drawPolygonPath:function(e,t,n,r,i,o){var a=r/2,s=i/2;e.beginPath&&e.beginPath(),e.moveTo(t+a*o[0],n+s*o[1]);for(var l=1;l<o.length/2;l++)e.lineTo(t+a*o[2*l],n+s*o[2*l+1]);e.closePath()},drawRoundRectanglePath:function(e,t,n,i,o){var a=i/2,s=o/2,l=r.getRoundRectangleRadius(i,o);e.beginPath&&e.beginPath(),e.moveTo(t,n-s),e.arcTo(t+a,n-s,t+a,n,l),e.arcTo(t+a,n+s,t,n+s,l),e.arcTo(t-a,n+s,t-a,n,l),e.arcTo(t-a,n-s,t,n-s,l),e.lineTo(t,n-s),e.closePath()},drawBottomRoundRectanglePath:function(e,t,n,i,o){var a=i/2,s=o/2,l=r.getRoundRectangleRadius(i,o);e.beginPath&&e.beginPath(),e.moveTo(t,n-s),e.lineTo(t+a,n-s),e.lineTo(t+a,n),e.arcTo(t+a,n+s,t,n+s,l),e.arcTo(t-a,n+s,t-a,n,l),e.lineTo(t-a,n-s),e.lineTo(t,n-s),e.closePath()},drawCutRectanglePath:function(e,t,n,i,o){var a=i/2,s=o/2,l=r.getCutRectangleCornerLength();e.beginPath&&e.beginPath(),e.moveTo(t-a+l,n-s),e.lineTo(t+a-l,n-s),e.lineTo(t+a,n-s+l),e.lineTo(t+a,n+s-l),e.lineTo(t+a-l,n+s),e.lineTo(t-a+l,n+s),e.lineTo(t-a,n+s-l),e.lineTo(t-a,n-s+l),e.closePath()},drawBarrelPath:function(e,t,n,i,o){var a=i/2,s=o/2,l=t-a,c=t+a,u=n-s,d=n+s,f=r.getBarrelCurveConstants(i,o),p=f.widthOffset,h=f.heightOffset,g=f.ctrlPtOffsetPct*p;e.beginPath&&e.beginPath(),e.moveTo(l,u+h),e.lineTo(l,d-h),e.quadraticCurveTo(l+g,d,l+p,d),e.lineTo(c-p,d),e.quadraticCurveTo(c-g,d,c,d-h),e.lineTo(c,u+h),e.quadraticCurveTo(c-g,u,c-p,u),e.lineTo(l+p,u),e.quadraticCurveTo(l+g,u,l,u+h),e.closePath()}},o=Math.sin(0),a=Math.cos(0),s={},l={},c=Math.PI/40,u=0*Math.PI;u<2*Math.PI;u+=c)s[u]=Math.sin(u),l[u]=Math.cos(u);i.drawEllipsePath=function(e,t,n,r,i){if(e.beginPath&&e.beginPath(),e.ellipse)e.ellipse(t,n,r/2,i/2,0,0,2*Math.PI);else for(var u,d,f=r/2,p=i/2,h=0*Math.PI;h<2*Math.PI;h+=c)u=t-f*s[h]*o+f*l[h]*a,d=n+p*l[h]*o+p*s[h]*a,0===h?e.moveTo(u,d):e.lineTo(u,d);e.closePath()},e.exports=i},function(e,t,n){"use strict";var r=n(0),i={};function o(e){var t=e.indexOf(",");return e.substr(t+1)}function a(e,t,n){var r=t.toDataURL(n,e.quality);switch(e.output){case"blob":return function(e,t){for(var n=atob(e),r=new ArrayBuffer(n.length),i=new Uint8Array(r),o=0;o<n.length;o++)i[o]=n.charCodeAt(o);return new Blob([r],{type:t})}(o(r),n);case"base64":return o(r);case"base64uri":default:return r}}i.createBuffer=function(e,t){var n=document.createElement("canvas");return n.width=e,n.height=t,[n,n.getContext("2d")]},i.bufferCanvasImage=function(e){var t=this.cy,n=t.mutableElements().boundingBox(),i=this.findContainerClientCoords(),o=e.full?Math.ceil(n.w):i[2],a=e.full?Math.ceil(n.h):i[3],s=r.number(e.maxWidth)||r.number(e.maxHeight),l=this.getPixelRatio(),c=1;if(void 0!==e.scale)o*=e.scale,a*=e.scale,c=e.scale;else if(s){var u=1/0,d=1/0;r.number(e.maxWidth)&&(u=c*e.maxWidth/o),r.number(e.maxHeight)&&(d=c*e.maxHeight/a),o*=c=Math.min(u,d),a*=c}s||(o*=l,a*=l,c*=l);var f=document.createElement("canvas");f.width=o,f.height=a,f.style.width=o+"px",f.style.height=a+"px";var p=f.getContext("2d");if(o>0&&a>0){p.clearRect(0,0,o,a),p.globalCompositeOperation="source-over";var h=this.getCachedZSortedEles();if(e.full)p.translate(-n.x1*c,-n.y1*c),p.scale(c,c),this.drawElements(p,h),p.scale(1/c,1/c),p.translate(n.x1*c,n.y1*c);else{var g=t.pan(),v={x:g.x*c,y:g.y*c};c*=t.zoom(),p.translate(v.x,v.y),p.scale(c,c),this.drawElements(p,h),p.scale(1/c,1/c),p.translate(-v.x,-v.y)}e.bg&&(p.globalCompositeOperation="destination-over",p.fillStyle=e.bg,p.rect(0,0,o,a),p.fill())}return f},i.png=function(e){return a(e,this.bufferCanvasImage(e),"image/png")},i.jpg=function(e){return a(e,this.bufferCanvasImage(e),"image/jpeg")},e.exports=i},function(e,t,n){"use strict";var r={nodeShapeImpl:function(e,t,n,r,i,o,a){switch(e){case"ellipse":return this.drawEllipsePath(t,n,r,i,o);case"polygon":return this.drawPolygonPath(t,n,r,i,o,a);case"roundrectangle":return this.drawRoundRectanglePath(t,n,r,i,o);case"cutrectangle":return this.drawCutRectanglePath(t,n,r,i,o);case"bottomroundrectangle":return this.drawBottomRoundRectanglePath(t,n,r,i,o);case"barrel":return this.drawBarrelPath(t,n,r,i,o)}}};e.exports=r},function(e,t,n){"use strict";var r=n(0),i=n(1),o=n(18),a=function e(){if(!(this instanceof e))return new e;this.length=0},s=a.prototype;s.instanceString=function(){return"stylesheet"},s.selector=function(e){return this[this.length++]={selector:e,properties:[]},this},s.css=function(e,t){var n=this.length-1;if(r.string(e))this[n].properties.push({name:e,value:t});else if(r.plainObject(e))for(var a=e,s=0;s<o.properties.length;s++){var l=o.properties[s],c=a[l.name];if(void 0===c&&(c=a[i.dash2camel(l.name)]),void 0!==c){var u=l.name,d=c;this[n].properties.push({name:u,value:d})}}return this},s.style=s.css,s.generateStyle=function(e){var t=new o(e);return this.appendToStyle(t)},s.appendToStyle=function(e){for(var t=0;t<this.length;t++){var n=this[t],r=n.selector,i=n.properties;e.selector(r);for(var o=0;o<i.length;o++){var a=i[o];e.css(a.name,a.value)}}return e},e.exports=a},function(e,t,n){"use strict";e.exports="snapshot-2fd4aa6cc2-1531011493999"}])},e.exports=r(n(241),n(242))}).call(this,n(238).setImmediate)},function(e,t,n){(function(e){var r=void 0!==e&&e||"undefined"!=typeof self&&self||window,i=Function.prototype.apply;function o(e,t){this._id=e,this._clearFn=t}t.setTimeout=function(){return new o(i.call(setTimeout,r,arguments),clearTimeout)},t.setInterval=function(){return new o(i.call(setInterval,r,arguments),clearInterval)},t.clearTimeout=t.clearInterval=function(e){e&&e.close()},o.prototype.unref=o.prototype.ref=function(){},o.prototype.close=function(){this._clearFn.call(r,this._id)},t.enroll=function(e,t){clearTimeout(e._idleTimeoutId),e._idleTimeout=t},t.unenroll=function(e){clearTimeout(e._idleTimeoutId),e._idleTimeout=-1},t._unrefActive=t.active=function(e){clearTimeout(e._idleTimeoutId);var t=e._idleTimeout;t>=0&&(e._idleTimeoutId=setTimeout((function(){e._onTimeout&&e._onTimeout()}),t))},n(239),t.setImmediate="undefined"!=typeof self&&self.setImmediate||void 0!==e&&e.setImmediate||this&&this.setImmediate,t.clearImmediate="undefined"!=typeof self&&self.clearImmediate||void 0!==e&&e.clearImmediate||this&&this.clearImmediate}).call(this,n(33))},function(e,t,n){(function(e,t){!function(e,n){"use strict";if(!e.setImmediate){var r,i,o,a,s,l=1,c={},u=!1,d=e.document,f=Object.getPrototypeOf&&Object.getPrototypeOf(e);f=f&&f.setTimeout?f:e,"[object process]"==={}.toString.call(e.process)?r=function(e){t.nextTick((function(){h(e)}))}:!function(){if(e.postMessage&&!e.importScripts){var t=!0,n=e.onmessage;return e.onmessage=function(){t=!1},e.postMessage("","*"),e.onmessage=n,t}}()?e.MessageChannel?((o=new MessageChannel).port1.onmessage=function(e){h(e.data)},r=function(e){o.port2.postMessage(e)}):d&&"onreadystatechange"in d.createElement("script")?(i=d.documentElement,r=function(e){var t=d.createElement("script");t.onreadystatechange=function(){h(e),t.onreadystatechange=null,i.removeChild(t),t=null},i.appendChild(t)}):r=function(e){setTimeout(h,0,e)}:(a="setImmediate$"+Math.random()+"$",s=function(t){t.source===e&&"string"==typeof t.data&&0===t.data.indexOf(a)&&h(+t.data.slice(a.length))},e.addEventListener?e.addEventListener("message",s,!1):e.attachEvent("onmessage",s),r=function(t){e.postMessage(a+t,"*")}),f.setImmediate=function(e){"function"!=typeof e&&(e=new Function(""+e));for(var t=new Array(arguments.length-1),n=0;n<t.length;n++)t[n]=arguments[n+1];var i={callback:e,args:t};return c[l]=i,r(l),l++},f.clearImmediate=p}function p(e){delete c[e]}function h(e){if(u)setTimeout(h,0,e);else{var t=c[e];if(t){u=!0;try{!function(e){var t=e.callback,n=e.args;switch(n.length){case 0:t();break;case 1:t(n[0]);break;case 2:t(n[0],n[1]);break;case 3:t(n[0],n[1],n[2]);break;default:t.apply(void 0,n)}}(t)}finally{p(e),u=!1}}}}}("undefined"==typeof self?void 0===e?this:e:self)}).call(this,n(33),n(240))},function(e,t){var n,r,i=e.exports={};function o(){throw new Error("setTimeout has not been defined")}function a(){throw new Error("clearTimeout has not been defined")}function s(e){if(n===setTimeout)return setTimeout(e,0);if((n===o||!n)&&setTimeout)return n=setTimeout,setTimeout(e,0);try{return n(e,0)}catch(t){try{return n.call(null,e,0)}catch(t){return n.call(this,e,0)}}}!function(){try{n="function"==typeof setTimeout?setTimeout:o}catch(e){n=o}try{r="function"==typeof clearTimeout?clearTimeout:a}catch(e){r=a}}();var l,c=[],u=!1,d=-1;function f(){u&&l&&(u=!1,l.length?c=l.concat(c):d=-1,c.length&&p())}function p(){if(!u){var e=s(f);u=!0;for(var t=c.length;t;){for(l=c,c=[];++d<t;)l&&l[d].run();d=-1,t=c.length}l=null,u=!1,function(e){if(r===clearTimeout)return clearTimeout(e);if((r===a||!r)&&clearTimeout)return r=clearTimeout,clearTimeout(e);try{r(e)}catch(t){try{return r.call(null,e)}catch(t){return r.call(this,e)}}}(e)}}function h(e,t){this.fun=e,this.array=t}function g(){}i.nextTick=function(e){var t=new Array(arguments.length-1);if(arguments.length>1)for(var n=1;n<arguments.length;n++)t[n-1]=arguments[n];c.push(new h(e,t)),1!==c.length||u||s(p)},h.prototype.run=function(){this.fun.apply(null,this.array)},i.title="browser",i.browser=!0,i.env={},i.argv=[],i.version="",i.versions={},i.on=g,i.addListener=g,i.once=g,i.off=g,i.removeListener=g,i.removeAllListeners=g,i.emit=g,i.prependListener=g,i.prependOnceListener=g,i.listeners=function(e){return[]},i.binding=function(e){throw new Error("process.binding is not supported")},i.cwd=function(){return"/"},i.chdir=function(e){throw new Error("process.chdir is not supported")},i.umask=function(){return 0}},function(e,t,n){(function(t){var n=/^\s+|\s+$/g,r=/^[-+]0x[0-9a-f]+$/i,i=/^0b[01]+$/i,o=/^0o[0-7]+$/i,a=parseInt,s="object"==typeof t&&t&&t.Object===Object&&t,l="object"==typeof self&&self&&self.Object===Object&&self,c=s||l||Function("return this")(),u=Object.prototype.toString,d=Math.max,f=Math.min,p=function(){return c.Date.now()};function h(e){var t=typeof e;return!!e&&("object"==t||"function"==t)}function g(e){if("number"==typeof e)return e;if(function(e){return"symbol"==typeof e||function(e){return!!e&&"object"==typeof e}(e)&&"[object Symbol]"==u.call(e)}(e))return NaN;if(h(e)){var t="function"==typeof e.valueOf?e.valueOf():e;e=h(t)?t+"":t}if("string"!=typeof e)return 0===e?e:+e;e=e.replace(n,"");var s=i.test(e);return s||o.test(e)?a(e.slice(2),s?2:8):r.test(e)?NaN:+e}e.exports=function(e,t,n){var r,i,o,a,s,l,c=0,u=!1,v=!1,m=!0;if("function"!=typeof e)throw new TypeError("Expected a function");function b(t){var n=r,o=i;return r=i=void 0,c=t,a=e.apply(o,n)}function y(e){return c=e,s=setTimeout(w,t),u?b(e):a}function x(e){var n=e-l;return void 0===l||n>=t||n<0||v&&e-c>=o}function w(){var e=p();if(x(e))return k(e);s=setTimeout(w,function(e){var n=t-(e-l);return v?f(n,o-(e-c)):n}(e))}function k(e){return s=void 0,m&&r?b(e):(r=i=void 0,a)}function A(){var e=p(),n=x(e);if(r=arguments,i=this,l=e,n){if(void 0===s)return y(l);if(v)return s=setTimeout(w,t),b(l)}return void 0===s&&(s=setTimeout(w,t)),a}return t=g(t)||0,h(n)&&(u=!!n.leading,o=(v="maxWait"in n)?d(g(n.maxWait)||0,t):o,m="trailing"in n?!!n.trailing:m),A.cancel=function(){void 0!==s&&clearTimeout(s),c=0,r=l=i=s=void 0},A.flush=function(){return void 0===s?a:k(p())},A}}).call(this,n(33))},function(e,t,n){e.exports=n(243)},function(e,t,n){var r,i,o;(function(){var n,a,s,l,c,u,d,f,p,h,g,v,m,b,y;s=Math.floor,h=Math.min,a=function(e,t){return e<t?-1:e>t?1:0},p=function(e,t,n,r,i){var o;if(null==n&&(n=0),null==i&&(i=a),n<0)throw new Error("lo must be non-negative");for(null==r&&(r=e.length);n<r;)i(t,e[o=s((n+r)/2)])<0?r=o:n=o+1;return[].splice.apply(e,[n,n-n].concat(t)),t},u=function(e,t,n){return null==n&&(n=a),e.push(t),b(e,0,e.length-1,n)},c=function(e,t){var n,r;return null==t&&(t=a),n=e.pop(),e.length?(r=e[0],e[0]=n,y(e,0,t)):r=n,r},f=function(e,t,n){var r;return null==n&&(n=a),r=e[0],e[0]=t,y(e,0,n),r},d=function(e,t,n){var r;return null==n&&(n=a),e.length&&n(e[0],t)<0&&(t=(r=[e[0],t])[0],e[0]=r[1],y(e,0,n)),t},l=function(e,t){var n,r,i,o,l,c;for(null==t&&(t=a),l=[],r=0,i=(o=function(){c=[];for(var t=0,n=s(e.length/2);0<=n?t<n:t>n;0<=n?t++:t--)c.push(t);return c}.apply(this).reverse()).length;r<i;r++)n=o[r],l.push(y(e,n,t));return l},m=function(e,t,n){var r;if(null==n&&(n=a),-1!==(r=e.indexOf(t)))return b(e,0,r,n),y(e,r,n)},g=function(e,t,n){var r,i,o,s,c;if(null==n&&(n=a),!(i=e.slice(0,t)).length)return i;for(l(i,n),o=0,s=(c=e.slice(t)).length;o<s;o++)r=c[o],d(i,r,n);return i.sort(n).reverse()},v=function(e,t,n){var r,i,o,s,u,d,f,g,v;if(null==n&&(n=a),10*t<=e.length){if(!(o=e.slice(0,t).sort(n)).length)return o;for(i=o[o.length-1],s=0,d=(f=e.slice(t)).length;s<d;s++)n(r=f[s],i)<0&&(p(o,r,0,null,n),o.pop(),i=o[o.length-1]);return o}for(l(e,n),v=[],u=0,g=h(t,e.length);0<=g?u<g:u>g;0<=g?++u:--u)v.push(c(e,n));return v},b=function(e,t,n,r){var i,o,s;for(null==r&&(r=a),i=e[n];n>t&&r(i,o=e[s=n-1>>1])<0;)e[n]=o,n=s;return e[n]=i},y=function(e,t,n){var r,i,o,s,l;for(null==n&&(n=a),i=e.length,l=t,o=e[t],r=2*t+1;r<i;)(s=r+1)<i&&!(n(e[r],e[s])<0)&&(r=s),e[t]=e[r],r=2*(t=r)+1;return e[t]=o,b(e,l,t,n)},n=function(){function e(e){this.cmp=null!=e?e:a,this.nodes=[]}return e.push=u,e.pop=c,e.replace=f,e.pushpop=d,e.heapify=l,e.updateItem=m,e.nlargest=g,e.nsmallest=v,e.prototype.push=function(e){return u(this.nodes,e,this.cmp)},e.prototype.pop=function(){return c(this.nodes,this.cmp)},e.prototype.peek=function(){return this.nodes[0]},e.prototype.contains=function(e){return-1!==this.nodes.indexOf(e)},e.prototype.replace=function(e){return f(this.nodes,e,this.cmp)},e.prototype.pushpop=function(e){return d(this.nodes,e,this.cmp)},e.prototype.heapify=function(){return l(this.nodes,this.cmp)},e.prototype.updateItem=function(e){return m(this.nodes,e,this.cmp)},e.prototype.clear=function(){return this.nodes=[]},e.prototype.empty=function(){return 0===this.nodes.length},e.prototype.size=function(){return this.nodes.length},e.prototype.clone=function(){var t;return(t=new e).nodes=this.nodes.slice(0),t},e.prototype.toArray=function(){return this.nodes.slice(0)},e.prototype.insert=e.prototype.push,e.prototype.top=e.prototype.peek,e.prototype.front=e.prototype.peek,e.prototype.has=e.prototype.contains,e.prototype.copy=e.prototype.clone,e}(),i=[],void 0===(o="function"==typeof(r=function(){return n})?r.apply(t,i):r)||(e.exports=o)}).call(this)},function(e,t,n){var r;!function(){"use strict";var i="undefined"==typeof jQuery?null:jQuery,o=function(e,t){if(e){var n,r={menuItems:[],menuItemClasses:[],contextMenuClasses:[]};e("core","contextMenus",(function(e){var i=this;i.scratch("cycontextmenus")||i.scratch("cycontextmenus",{});var o,a=l("options"),s=l("cxtMenu");function l(e){return i.scratch("cycontextmenus")[e]}function c(e,t){i.scratch("cycontextmenus")[e]=t}function u(e){for(var t="",n=0;n<e.length;n++){t+=e[n],n!==e.length-1&&(t+=" ")}return t}function d(e){e.css("display","block")}function f(e){e.css("display","none")}function p(e,n,r){function o(n){c("currentCyEvent",n),function(e){var n=l("cxtMenuPosition"),r=e.position||e.cyPosition;if(n!=r){s.children().css("display","none"),c("anyVisibleChild",!1),c("cxtMenuPosition",r);var o=t(i.container()).offset(),a=e.renderedPosition||e.cyRenderedPosition,u=o.left+a.x,d=o.top+a.y;s.css("left",u),s.css("top",d)}}(n),e.data("show")&&(s.is(":visible")||d(s),c("anyVisibleChild",!0),d(e)),!l("anyVisibleChild")&&s.is(":visible")&&f(s)}var a,u;r&&i.on("cxttap",u=function(e){(e.target||e.cyTarget)==i&&o(e)}),n&&i.on("cxttap",n,a=function(e){o(e)}),e.data("cy-context-menus-cxtfcn",a),e.data("cy-context-menus-cxtcorefcn",u)}function h(e,t,n,r){!function(e,t){var n;e.on("click",n=function(){t(l("currentCyEvent"))}),e.data("call-on-click-function",n)}(e,t),p(e,n,r)}function g(e){for(var t=0;t<e.length;t++)v(e[t])}function v(e){var t,n=b(e);t=n,s.append(t),function(e){e.click((function(){f(s),c("cxtMenuPosition",void 0)}))}(t),h(n,e.onClickFunction,e.selector,e.coreAsWell)}function m(e,n){var r,i,o=b(e);r=o,i=t("#"+n),r.insertBefore(i),h(o,e.onClickFunction,e.selector,e.coreAsWell)}function b(e){var n,r,i,o=(n=a.menuItemClasses,r=e.hasTrailingDivider,i=u(n),i+=" cy-context-menus-cxt-menuitem",r&&(i+=" cy-context-menus-divider"),i),s='<button id="'+e.id+'" class="'+o+'"';e.tooltipText&&(s+=' title="'+e.tooltipText+'"'),e.disabled&&(s+=" disabled"),e.image?s+='><img src="'+e.image.src+'" width="'+e.image.width+'px"; height="'+e.image.height+'px"; style="position:absolute; top: '+e.image.y+"px; left: "+e.image.x+'px;">'+e.content+"</button>":s+=">"+e.content+"</button>";var l=t(s);return l.data("selector",e.selector),l.data("on-click-function",e.onClickFunction),l.data("show",void 0===e.show||e.show),l}function y(){var e;l("active")&&(e=s.children(),t(e).each((function(){x(t(this))})),i.off("tapstart",n),s.remove(),c(s=void 0,void 0),c("active",!1),c("anyVisibleChild",!1))}function x(e){var n="string"==typeof e?t("#"+e):e,r=n.data("cy-context-menus-cxtfcn"),o=n.data("selector"),a=n.data("call-on-click-function"),s=n.data("cy-context-menus-cxtcorefcn");r&&i.off("cxttap",o,r),s&&i.off("cxttap",s),a&&n.off("click",a),n.remove()}"get"!==e&&(c("options",a=function(e,t){var n={};for(var r in e)n[r]=e[r];for(var r in t)n[r]=t[r];return n}(r,e)),l("active")&&y(),c("active",!0),o=u(a.contextMenuClasses),(s=t("<div class="+o+"></div>")).addClass("cy-context-menus-cxt-menu"),c("cxtMenu",s),t("body").append(s),s=s,g(a.menuItems),i.on("tapstart",n=function(){f(s),c("cxtMenuPosition",void 0),c("currentCyEvent",void 0)}),t(".cy-context-menus-cxt-menu").contextmenu((function(){return!1})));return function(e){return{isActive:function(){return l("active")},appendMenuItem:function(t){return v(t),e},appendMenuItems:function(t){return g(t),e},removeMenuItem:function(t){return x(t),e},setTrailingDivider:function(n,r){return function(e,n){var r=t("#"+e);n?r.addClass("cy-context-menus-divider"):r.removeClass("cy-context-menus-divider")}(n,r),e},insertBeforeMenuItem:function(t,n){return m(t,n),e},moveBeforeOtherMenuItem:function(n,r){return function(e,n){if(e!==n){var r=t("#"+e).detach(),i=t("#"+n);r.insertBefore(i)}}(n,r),e},disableMenuItem:function(n){return t("#"+n).attr("disabled",!0),e},enableMenuItem:function(n){return t("#"+n).attr("disabled",!1),e},hideMenuItem:function(n){return t("#"+n).data("show",!1),f(t("#"+n)),e},showMenuItem:function(n){return t("#"+n).data("show",!0),d(t("#"+n)),e},destroy:function(){return y(),e}}}(this)}))}};e.exports&&(e.exports=o),void 0===(r=function(){return o}.call(t,n,t,e))||(e.exports=r),"undefined"!=typeof cytoscape&&i&&o(cytoscape,i)}()},function(e,t,n){var r;r=function(e){return function(e){var t={};function n(r){if(t[r])return t[r].exports;var i=t[r]={i:r,l:!1,exports:{}};return e[r].call(i.exports,i,i.exports,n),i.l=!0,i.exports}return n.m=e,n.c=t,n.d=function(e,t,r){n.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:r})},n.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},n.t=function(e,t){if(1&t&&(e=n(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var r=Object.create(null);if(n.r(r),Object.defineProperty(r,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var i in e)n.d(r,i,function(t){return e[t]}.bind(null,i));return r},n.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return n.d(t,"a",t),t},n.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},n.p="",n(n.s=0)}([function(e,t,n){var r=n(1),i=function(e){e&&e("layout","dagre",r)};"undefined"!=typeof cytoscape&&i(cytoscape),e.exports=i},function(e,t,n){function r(e){return(r="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}var i=n(2),o=n(3),a=n(4);function s(e){this.options=o({},i,e)}s.prototype.run=function(){var e=this.options,t=e.cy,n=e.eles,i=function(e,t){return"function"==typeof t?t.apply(e,[e]):t},o=e.boundingBox||{x1:0,y1:0,w:t.width(),h:t.height()};void 0===o.x2&&(o.x2=o.x1+o.w),void 0===o.w&&(o.w=o.x2-o.x1),void 0===o.y2&&(o.y2=o.y1+o.h),void 0===o.h&&(o.h=o.y2-o.y1);var s=new a.graphlib.Graph({multigraph:!0,compound:!0}),l={},c=function(e,t){null!=t&&(l[e]=t)};c("nodesep",e.nodeSep),c("edgesep",e.edgeSep),c("ranksep",e.rankSep),c("rankdir",e.rankDir),c("ranker",e.ranker),s.setGraph(l),s.setDefaultEdgeLabel((function(){return{}})),s.setDefaultNodeLabel((function(){return{}}));for(var u=n.nodes(),d=0;d<u.length;d++){var f=u[d],p=f.layoutDimensions(e);s.setNode(f.id(),{width:p.w,height:p.h,name:f.id()})}for(var h=0;h<u.length;h++){var g=u[h];g.isChild()&&s.setParent(g.id(),g.parent().id())}for(var v=n.edges().stdFilter((function(e){return!e.source().isParent()&&!e.target().isParent()})),m=0;m<v.length;m++){var b=v[m];s.setEdge(b.source().id(),b.target().id(),{minlen:i(b,e.minLen),weight:i(b,e.edgeWeight),name:b.id()},b.id())}a.layout(s);for(var y,x=s.nodes(),w=0;w<x.length;w++){var k=x[w],A=s.node(k);t.getElementById(k).scratch().dagre=A}return e.boundingBox?(y={x1:1/0,x2:-1/0,y1:1/0,y2:-1/0},u.forEach((function(e){var t=e.scratch().dagre;y.x1=Math.min(y.x1,t.x),y.x2=Math.max(y.x2,t.x),y.y1=Math.min(y.y1,t.y),y.y2=Math.max(y.y2,t.y)})),y.w=y.x2-y.x1,y.h=y.y2-y.y1):y=o,u.layoutPositions(this,e,(function(t){var n=(t="object"===r(t)?t:this).scratch().dagre;return function(t){if(e.boundingBox){var n=0===y.w?0:(t.x-y.x1)/y.w,r=0===y.h?0:(t.y-y.y1)/y.h;return{x:o.x1+n*o.w,y:o.y1+r*o.h}}return t}({x:n.x,y:n.y})})),this},e.exports=s},function(e,t){var n={nodeSep:void 0,edgeSep:void 0,rankSep:void 0,rankDir:void 0,ranker:void 0,minLen:function(e){return 1},edgeWeight:function(e){return 1},fit:!0,padding:30,spacingFactor:void 0,nodeDimensionsIncludeLabels:!1,animate:!1,animateFilter:function(e,t){return!0},animationDuration:500,animationEasing:void 0,boundingBox:void 0,transform:function(e,t){return t},ready:function(){},stop:function(){}};e.exports=n},function(e,t){e.exports=null!=Object.assign?Object.assign.bind(Object):function(e){for(var t=arguments.length,n=new Array(t>1?t-1:0),r=1;r<t;r++)n[r-1]=arguments[r];return n.forEach((function(t){Object.keys(t).forEach((function(n){return e[n]=t[n]}))})),e}},function(t,n){t.exports=e}])},e.exports=r(n(246))},function(e,t,n){e.exports={graphlib:n(28),layout:n(359),debug:n(418),util:{time:n(20).time,notime:n(20).notime},version:n(419)}},function(e,t,n){e.exports={Graph:n(116),version:n(348)}},function(e,t,n){var r=n(149);e.exports=function(e){return r(e,4)}},function(e,t){e.exports=function(){this.__data__=[],this.size=0}},function(e,t,n){var r=n(74),i=Array.prototype.splice;e.exports=function(e){var t=this.__data__,n=r(t,e);return!(n<0)&&(n==t.length-1?t.pop():i.call(t,n,1),--this.size,!0)}},function(e,t,n){var r=n(74);e.exports=function(e){var t=this.__data__,n=r(t,e);return n<0?void 0:t[n][1]}},function(e,t,n){var r=n(74);e.exports=function(e){return r(this.__data__,e)>-1}},function(e,t,n){var r=n(74);e.exports=function(e,t){var n=this.__data__,i=r(n,e);return i<0?(++this.size,n.push([e,t])):n[i][1]=t,this}},function(e,t,n){var r=n(73);e.exports=function(){this.__data__=new r,this.size=0}},function(e,t){e.exports=function(e){var t=this.__data__,n=t.delete(e);return this.size=t.size,n}},function(e,t){e.exports=function(e){return this.__data__.get(e)}},function(e,t){e.exports=function(e){return this.__data__.has(e)}},function(e,t,n){var r=n(73),i=n(117),o=n(118);e.exports=function(e,t){var n=this.__data__;if(n instanceof r){var a=n.__data__;if(!i||a.length<199)return a.push([e,t]),this.size=++n.size,this;n=this.__data__=new o(a)}return n.set(e,t),this.size=n.size,this}},function(e,t,n){var r=n(63),i=n(262),o=n(23),a=n(151),s=/^\[object .+?Constructor\]$/,l=Function.prototype,c=Object.prototype,u=l.toString,d=c.hasOwnProperty,f=RegExp("^"+u.call(d).replace(/[\\^$.*+?()[\]{}|]/g,"\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,"$1.*?")+"$");e.exports=function(e){return!(!o(e)||i(e))&&(r(e)?f:s).test(a(e))}},function(e,t,n){var r=n(58),i=Object.prototype,o=i.hasOwnProperty,a=i.toString,s=r?r.toStringTag:void 0;e.exports=function(e){var t=o.call(e,s),n=e[s];try{e[s]=void 0;var r=!0}catch(e){}var i=a.call(e);return r&&(t?e[s]=n:delete e[s]),i}},function(e,t){var n=Object.prototype.toString;e.exports=function(e){return n.call(e)}},function(e,t,n){var r,i=n(263),o=(r=/[^.]+$/.exec(i&&i.keys&&i.keys.IE_PROTO||""))?"Symbol(src)_1."+r:"";e.exports=function(e){return!!o&&o in e}},function(e,t,n){var r=n(29)["__core-js_shared__"];e.exports=r},function(e,t){e.exports=function(e,t){return null==e?void 0:e[t]}},function(e,t,n){var r=n(266),i=n(73),o=n(117);e.exports=function(){this.size=0,this.__data__={hash:new r,map:new(o||i),string:new r}}},function(e,t,n){var r=n(267),i=n(268),o=n(269),a=n(270),s=n(271);function l(e){var t=-1,n=null==e?0:e.length;for(this.clear();++t<n;){var r=e[t];this.set(r[0],r[1])}}l.prototype.clear=r,l.prototype.delete=i,l.prototype.get=o,l.prototype.has=a,l.prototype.set=s,e.exports=l},function(e,t,n){var r=n(75);e.exports=function(){this.__data__=r?r(null):{},this.size=0}},function(e,t){e.exports=function(e){var t=this.has(e)&&delete this.__data__[e];return this.size-=t?1:0,t}},function(e,t,n){var r=n(75),i=Object.prototype.hasOwnProperty;e.exports=function(e){var t=this.__data__;if(r){var n=t[e];return"__lodash_hash_undefined__"===n?void 0:n}return i.call(t,e)?t[e]:void 0}},function(e,t,n){var r=n(75),i=Object.prototype.hasOwnProperty;e.exports=function(e){var t=this.__data__;return r?void 0!==t[e]:i.call(t,e)}},function(e,t,n){var r=n(75);e.exports=function(e,t){var n=this.__data__;return this.size+=this.has(e)?0:1,n[e]=r&&void 0===t?"__lodash_hash_undefined__":t,this}},function(e,t,n){var r=n(76);e.exports=function(e){var t=r(this,e).delete(e);return this.size-=t?1:0,t}},function(e,t){e.exports=function(e){var t=typeof e;return"string"==t||"number"==t||"symbol"==t||"boolean"==t?"__proto__"!==e:null===e}},function(e,t,n){var r=n(76);e.exports=function(e){return r(this,e).get(e)}},function(e,t,n){var r=n(76);e.exports=function(e){return r(this,e).has(e)}},function(e,t,n){var r=n(76);e.exports=function(e,t){var n=r(this,e),i=n.size;return n.set(e,t),this.size+=n.size==i?0:1,this}},function(e,t,n){var r=n(64),i=n(41);e.exports=function(e,t){return e&&r(t,i(t),e)}},function(e,t){e.exports=function(e,t){for(var n=-1,r=Array(e);++n<e;)r[n]=t(n);return r}},function(e,t,n){var r=n(47),i=n(32);e.exports=function(e){return i(e)&&"[object Arguments]"==r(e)}},function(e,t){e.exports=function(){return!1}},function(e,t,n){var r=n(47),i=n(120),o=n(32),a={};a["[object Float32Array]"]=a["[object Float64Array]"]=a["[object Int8Array]"]=a["[object Int16Array]"]=a["[object Int32Array]"]=a["[object Uint8Array]"]=a["[object Uint8ClampedArray]"]=a["[object Uint16Array]"]=a["[object Uint32Array]"]=!0,a["[object Arguments]"]=a["[object Array]"]=a["[object ArrayBuffer]"]=a["[object Boolean]"]=a["[object DataView]"]=a["[object Date]"]=a["[object Error]"]=a["[object Function]"]=a["[object Map]"]=a["[object Number]"]=a["[object Object]"]=a["[object RegExp]"]=a["[object Set]"]=a["[object String]"]=a["[object WeakMap]"]=!1,e.exports=function(e){return o(e)&&i(e.length)&&!!a[r(e)]}},function(e,t,n){var r=n(154)(Object.keys,Object);e.exports=r},function(e,t,n){var r=n(64),i=n(48);e.exports=function(e,t){return e&&r(t,i(t),e)}},function(e,t,n){var r=n(23),i=n(82),o=n(285),a=Object.prototype.hasOwnProperty;e.exports=function(e){if(!r(e))return o(e);var t=i(e),n=[];for(var s in e)("constructor"!=s||!t&&a.call(e,s))&&n.push(s);return n}},function(e,t){e.exports=function(e){var t=[];if(null!=e)for(var n in Object(e))t.push(n);return t}},function(e,t,n){var r=n(64),i=n(123);e.exports=function(e,t){return r(e,i(e),t)}},function(e,t,n){var r=n(64),i=n(159);e.exports=function(e,t){return r(e,i(e),t)}},function(e,t,n){var r=n(161),i=n(159),o=n(48);e.exports=function(e){return r(e,o,i)}},function(e,t,n){var r=n(46)(n(29),"DataView");e.exports=r},function(e,t,n){var r=n(46)(n(29),"Promise");e.exports=r},function(e,t,n){var r=n(46)(n(29),"WeakMap");e.exports=r},function(e,t){var n=Object.prototype.hasOwnProperty;e.exports=function(e){var t=e.length,r=new e.constructor(t);return t&&"string"==typeof e[0]&&n.call(e,"index")&&(r.index=e.index,r.input=e.input),r}},function(e,t,n){var r=n(125),i=n(294),o=n(295),a=n(296),s=n(164);e.exports=function(e,t,n){var l=e.constructor;switch(t){case"[object ArrayBuffer]":return r(e);case"[object Boolean]":case"[object Date]":return new l(+e);case"[object DataView]":return i(e,n);case"[object Float32Array]":case"[object Float64Array]":case"[object Int8Array]":case"[object Int16Array]":case"[object Int32Array]":case"[object Uint8Array]":case"[object Uint8ClampedArray]":case"[object Uint16Array]":case"[object Uint32Array]":return s(e,n);case"[object Map]":return new l;case"[object Number]":case"[object String]":return new l(e);case"[object RegExp]":return o(e);case"[object Set]":return new l;case"[object Symbol]":return a(e)}}},function(e,t,n){var r=n(125);e.exports=function(e,t){var n=t?r(e.buffer):e.buffer;return new e.constructor(n,e.byteOffset,e.byteLength)}},function(e,t){var n=/\w*$/;e.exports=function(e){var t=new e.constructor(e.source,n.exec(e));return t.lastIndex=e.lastIndex,t}},function(e,t,n){var r=n(58),i=r?r.prototype:void 0,o=i?i.valueOf:void 0;e.exports=function(e){return o?Object(o.call(e)):{}}},function(e,t,n){var r=n(298),i=n(81),o=n(121),a=o&&o.isMap,s=a?i(a):r;e.exports=s},function(e,t,n){var r=n(60),i=n(32);e.exports=function(e){return i(e)&&"[object Map]"==r(e)}},function(e,t,n){var r=n(300),i=n(81),o=n(121),a=o&&o.isSet,s=a?i(a):r;e.exports=s},function(e,t,n){var r=n(60),i=n(32);e.exports=function(e){return i(e)&&"[object Set]"==r(e)}},function(e,t){e.exports=function(e){return function(t,n,r){for(var i=-1,o=Object(t),a=r(t),s=a.length;s--;){var l=a[e?s:++i];if(!1===n(o[l],l,o))break}return t}}},function(e,t,n){var r=n(34);e.exports=function(e,t){return function(n,i){if(null==n)return n;if(!r(n))return e(n,i);for(var o=n.length,a=t?o:-1,s=Object(n);(t?a--:++a<o)&&!1!==i(s[a],a,s););return n}}},function(e,t,n){var r=n(84);e.exports=function(e,t){var n=[];return r(e,(function(e,r,i){t(e,r,i)&&n.push(e)})),n}},function(e,t,n){var r=n(305),i=n(313),o=n(176);e.exports=function(e){var t=i(e);return 1==t.length&&t[0][2]?o(t[0][0],t[0][1]):function(n){return n===e||r(n,e,t)}}},function(e,t,n){var r=n(72),i=n(171);e.exports=function(e,t,n,o){var a=n.length,s=a,l=!o;if(null==e)return!s;for(e=Object(e);a--;){var c=n[a];if(l&&c[2]?c[1]!==e[c[0]]:!(c[0]in e))return!1}for(;++a<s;){var u=(c=n[a])[0],d=e[u],f=c[1];if(l&&c[2]){if(void 0===d&&!(u in e))return!1}else{var p=new r;if(o)var h=o(d,f,u,e,t,p);if(!(void 0===h?i(f,d,3,o,p):h))return!1}}return!0}},function(e,t,n){var r=n(72),i=n(172),o=n(310),a=n(312),s=n(60),l=n(13),c=n(59),u=n(66),d="[object Object]",f=Object.prototype.hasOwnProperty;e.exports=function(e,t,n,p,h,g){var v=l(e),m=l(t),b=v?"[object Array]":s(e),y=m?"[object Array]":s(t),x=(b="[object Arguments]"==b?d:b)==d,w=(y="[object Arguments]"==y?d:y)==d,k=b==y;if(k&&c(e)){if(!c(t))return!1;v=!0,x=!1}if(k&&!x)return g||(g=new r),v||u(e)?i(e,t,n,p,h,g):o(e,t,b,n,p,h,g);if(!(1&n)){var A=x&&f.call(e,"__wrapped__"),E=w&&f.call(t,"__wrapped__");if(A||E){var S=A?e.value():e,C=E?t.value():t;return g||(g=new r),h(S,C,n,p,g)}}return!!k&&(g||(g=new r),a(e,t,n,p,h,g))}},function(e,t){e.exports=function(e){return this.__data__.set(e,"__lodash_hash_undefined__"),this}},function(e,t){e.exports=function(e){return this.__data__.has(e)}},function(e,t){e.exports=function(e,t){for(var n=-1,r=null==e?0:e.length;++n<r;)if(t(e[n],n,e))return!0;return!1}},function(e,t,n){var r=n(58),i=n(163),o=n(57),a=n(172),s=n(311),l=n(129),c=r?r.prototype:void 0,u=c?c.valueOf:void 0;e.exports=function(e,t,n,r,c,d,f){switch(n){case"[object DataView]":if(e.byteLength!=t.byteLength||e.byteOffset!=t.byteOffset)return!1;e=e.buffer,t=t.buffer;case"[object ArrayBuffer]":return!(e.byteLength!=t.byteLength||!d(new i(e),new i(t)));case"[object Boolean]":case"[object Date]":case"[object Number]":return o(+e,+t);case"[object Error]":return e.name==t.name&&e.message==t.message;case"[object RegExp]":case"[object String]":return e==t+"";case"[object Map]":var p=s;case"[object Set]":var h=1&r;if(p||(p=l),e.size!=t.size&&!h)return!1;var g=f.get(e);if(g)return g==t;r|=2,f.set(e,t);var v=a(p(e),p(t),r,c,d,f);return f.delete(e),v;case"[object Symbol]":if(u)return u.call(e)==u.call(t)}return!1}},function(e,t){e.exports=function(e){var t=-1,n=Array(e.size);return e.forEach((function(e,r){n[++t]=[r,e]})),n}},function(e,t,n){var r=n(160),i=Object.prototype.hasOwnProperty;e.exports=function(e,t,n,o,a,s){var l=1&n,c=r(e),u=c.length;if(u!=r(t).length&&!l)return!1;for(var d=u;d--;){var f=c[d];if(!(l?f in t:i.call(t,f)))return!1}var p=s.get(e),h=s.get(t);if(p&&h)return p==t&&h==e;var g=!0;s.set(e,t),s.set(t,e);for(var v=l;++d<u;){var m=e[f=c[d]],b=t[f];if(o)var y=l?o(b,m,f,t,e,s):o(m,b,f,e,t,s);if(!(void 0===y?m===b||a(m,b,n,o,s):y)){g=!1;break}v||(v="constructor"==f)}if(g&&!v){var x=e.constructor,w=t.constructor;x==w||!("constructor"in e)||!("constructor"in t)||"function"==typeof x&&x instanceof x&&"function"==typeof w&&w instanceof w||(g=!1)}return s.delete(e),s.delete(t),g}},function(e,t,n){var r=n(175),i=n(41);e.exports=function(e){for(var t=i(e),n=t.length;n--;){var o=t[n],a=e[o];t[n]=[o,a,r(a)]}return t}},function(e,t,n){var r=n(171),i=n(315),o=n(178),a=n(130),s=n(175),l=n(176),c=n(67);e.exports=function(e,t){return a(e)&&s(t)?l(c(e),t):function(n){var a=i(n,e);return void 0===a&&a===t?o(n,e):r(t,a,3)}}},function(e,t,n){var r=n(85);e.exports=function(e,t,n){var i=null==e?void 0:r(e,t);return void 0===i?n:i}},function(e,t,n){var r=n(317),i=/[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g,o=/\\(\\)?/g,a=r((function(e){var t=[];return 46===e.charCodeAt(0)&&t.push(""),e.replace(i,(function(e,n,r,i){t.push(r?i.replace(o,"$1"):n||e)})),t}));e.exports=a},function(e,t,n){var r=n(318);e.exports=function(e){var t=r(e,(function(e){return 500===n.size&&n.clear(),e})),n=t.cache;return t}},function(e,t,n){var r=n(118);function i(e,t){if("function"!=typeof e||null!=t&&"function"!=typeof t)throw new TypeError("Expected a function");var n=function(){var r=arguments,i=t?t.apply(this,r):r[0],o=n.cache;if(o.has(i))return o.get(i);var a=e.apply(this,r);return n.cache=o.set(i,a)||o,a};return n.cache=new(i.Cache||r),n}i.Cache=r,e.exports=i},function(e,t,n){var r=n(58),i=n(87),o=n(13),a=n(61),s=r?r.prototype:void 0,l=s?s.toString:void 0;e.exports=function e(t){if("string"==typeof t)return t;if(o(t))return i(t,e)+"";if(a(t))return l?l.call(t):"";var n=t+"";return"0"==n&&1/t==-1/0?"-0":n}},function(e,t){e.exports=function(e,t){return null!=e&&t in Object(e)}},function(e,t,n){var r=n(180),i=n(322),o=n(130),a=n(67);e.exports=function(e){return o(e)?r(a(e)):i(e)}},function(e,t,n){var r=n(85);e.exports=function(e){return function(t){return r(t,e)}}},function(e,t){var n=Object.prototype.hasOwnProperty;e.exports=function(e,t){return null!=e&&n.call(e,t)}},function(e,t,n){var r=n(122),i=n(60),o=n(65),a=n(13),s=n(34),l=n(59),c=n(82),u=n(66),d=Object.prototype.hasOwnProperty;e.exports=function(e){if(null==e)return!0;if(s(e)&&(a(e)||"string"==typeof e||"function"==typeof e.splice||l(e)||u(e)||o(e)))return!e.length;var t=i(e);if("[object Map]"==t||"[object Set]"==t)return!e.size;if(c(e))return!r(e).length;for(var n in e)if(d.call(e,n))return!1;return!0}},function(e,t){e.exports=function(e,t,n,r){var i=-1,o=null==e?0:e.length;for(r&&o&&(n=e[++i]);++i<o;)n=t(n,e[i],i,e);return n}},function(e,t){e.exports=function(e,t,n,r,i){return i(e,(function(e,i,o){n=r?(r=!1,e):t(n,e,i,o)})),n}},function(e,t,n){var r=n(122),i=n(60),o=n(34),a=n(328),s=n(329);e.exports=function(e){if(null==e)return 0;if(o(e))return a(e)?s(e):e.length;var t=i(e);return"[object Map]"==t||"[object Set]"==t?e.size:r(e).length}},function(e,t,n){var r=n(47),i=n(13),o=n(32);e.exports=function(e){return"string"==typeof e||!i(e)&&o(e)&&"[object String]"==r(e)}},function(e,t,n){var r=n(330),i=n(331),o=n(332);e.exports=function(e){return i(e)?o(e):r(e)}},function(e,t,n){var r=n(180)("length");e.exports=r},function(e,t){var n=RegExp("[\\u200d\\ud800-\\udfff\\u0300-\\u036f\\ufe20-\\ufe2f\\u20d0-\\u20ff\\ufe0e\\ufe0f]");e.exports=function(e){return n.test(e)}},function(e,t){var n="[\\ud800-\\udfff]",r="[\\u0300-\\u036f\\ufe20-\\ufe2f\\u20d0-\\u20ff]",i="\\ud83c[\\udffb-\\udfff]",o="[^\\ud800-\\udfff]",a="(?:\\ud83c[\\udde6-\\uddff]){2}",s="[\\ud800-\\udbff][\\udc00-\\udfff]",l="(?:"+r+"|"+i+")"+"?",c="[\\ufe0e\\ufe0f]?"+l+("(?:\\u200d(?:"+[o,a,s].join("|")+")[\\ufe0e\\ufe0f]?"+l+")*"),u="(?:"+[o+r+"?",r,a,s,n].join("|")+")",d=RegExp(i+"(?="+i+")|"+u+c,"g");e.exports=function(e){for(var t=d.lastIndex=0;d.test(e);)++t;return t}},function(e,t,n){var r=n(119),i=n(166),o=n(127),a=n(35),s=n(83),l=n(13),c=n(59),u=n(63),d=n(23),f=n(66);e.exports=function(e,t,n){var p=l(e),h=p||c(e)||f(e);if(t=a(t,4),null==n){var g=e&&e.constructor;n=h?p?new g:[]:d(e)&&u(g)?i(s(e)):{}}return(h?r:o)(e,(function(e,r,i){return t(n,e,r,i)})),n}},function(e,t,n){var r=n(131),i=n(88),o=n(339),a=n(189),s=i((function(e){return o(r(e,1,a,!0))}));e.exports=s},function(e,t,n){var r=n(58),i=n(65),o=n(13),a=r?r.isConcatSpreadable:void 0;e.exports=function(e){return o(e)||i(e)||!!(a&&e&&e[a])}},function(e,t){e.exports=function(e,t,n){switch(n.length){case 0:return e.call(t);case 1:return e.call(t,n[0]);case 2:return e.call(t,n[0],n[1]);case 3:return e.call(t,n[0],n[1],n[2])}return e.apply(t,n)}},function(e,t,n){var r=n(126),i=n(152),o=n(49),a=i?function(e,t){return i(e,"toString",{configurable:!0,enumerable:!1,value:r(t),writable:!0})}:o;e.exports=a},function(e,t){var n=Date.now;e.exports=function(e){var t=0,r=0;return function(){var i=n(),o=16-(i-r);if(r=i,o>0){if(++t>=800)return arguments[0]}else t=0;return e.apply(void 0,arguments)}}},function(e,t,n){var r=n(173),i=n(340),o=n(344),a=n(174),s=n(345),l=n(129);e.exports=function(e,t,n){var c=-1,u=i,d=e.length,f=!0,p=[],h=p;if(n)f=!1,u=o;else if(d>=200){var g=t?null:s(e);if(g)return l(g);f=!1,u=a,h=new r}else h=t?[]:p;e:for(;++c<d;){var v=e[c],m=t?t(v):v;if(v=n||0!==v?v:0,f&&m==m){for(var b=h.length;b--;)if(h[b]===m)continue e;t&&h.push(m),p.push(v)}else u(h,m,n)||(h!==p&&h.push(m),p.push(v))}return p}},function(e,t,n){var r=n(341);e.exports=function(e,t){return!!(null==e?0:e.length)&&r(e,t,0)>-1}},function(e,t,n){var r=n(188),i=n(342),o=n(343);e.exports=function(e,t,n){return t==t?o(e,t,n):r(e,i,n)}},function(e,t){e.exports=function(e){return e!=e}},function(e,t){e.exports=function(e,t,n){for(var r=n-1,i=e.length;++r<i;)if(e[r]===t)return r;return-1}},function(e,t){e.exports=function(e,t,n){for(var r=-1,i=null==e?0:e.length;++r<i;)if(n(t,e[r]))return!0;return!1}},function(e,t,n){var r=n(162),i=n(346),o=n(129),a=r&&1/o(new r([,-0]))[1]==1/0?function(e){return new r(e)}:i;e.exports=a},function(e,t){e.exports=function(){}},function(e,t,n){var r=n(87);e.exports=function(e,t){return r(t,(function(t){return e[t]}))}},function(e,t){e.exports="2.1.8"},function(e,t,n){var r=n(22),i=n(116);function o(e){return r.map(e.nodes(),(function(t){var n=e.node(t),i=e.parent(t),o={v:t};return r.isUndefined(n)||(o.value=n),r.isUndefined(i)||(o.parent=i),o}))}function a(e){return r.map(e.edges(),(function(t){var n=e.edge(t),i={v:t.v,w:t.w};return r.isUndefined(t.name)||(i.name=t.name),r.isUndefined(n)||(i.value=n),i}))}e.exports={write:function(e){var t={options:{directed:e.isDirected(),multigraph:e.isMultigraph(),compound:e.isCompound()},nodes:o(e),edges:a(e)};r.isUndefined(e.graph())||(t.value=r.clone(e.graph()));return t},read:function(e){var t=new i(e.options).setGraph(e.value);return r.each(e.nodes,(function(e){t.setNode(e.v,e.value),e.parent&&t.setParent(e.v,e.parent)})),r.each(e.edges,(function(e){t.setEdge({v:e.v,w:e.w,name:e.name},e.value)})),t}}},function(e,t,n){e.exports={components:n(351),dijkstra:n(191),dijkstraAll:n(352),findCycles:n(353),floydWarshall:n(354),isAcyclic:n(355),postorder:n(356),preorder:n(357),prim:n(358),tarjan:n(193),topsort:n(194)}},function(e,t,n){var r=n(22);e.exports=function(e){var t,n={},i=[];function o(i){r.has(n,i)||(n[i]=!0,t.push(i),r.each(e.successors(i),o),r.each(e.predecessors(i),o))}return r.each(e.nodes(),(function(e){t=[],o(e),t.length&&i.push(t)})),i}},function(e,t,n){var r=n(191),i=n(22);e.exports=function(e,t,n){return i.transform(e.nodes(),(function(i,o){i[o]=r(e,o,t,n)}),{})}},function(e,t,n){var r=n(22),i=n(193);e.exports=function(e){return r.filter(i(e),(function(t){return t.length>1||1===t.length&&e.hasEdge(t[0],t[0])}))}},function(e,t,n){var r=n(22);e.exports=function(e,t,n){return function(e,t,n){var r={},i=e.nodes();return i.forEach((function(e){r[e]={},r[e][e]={distance:0},i.forEach((function(t){e!==t&&(r[e][t]={distance:Number.POSITIVE_INFINITY})})),n(e).forEach((function(n){var i=n.v===e?n.w:n.v,o=t(n);r[e][i]={distance:o,predecessor:e}}))})),i.forEach((function(e){var t=r[e];i.forEach((function(n){var o=r[n];i.forEach((function(n){var r=o[e],i=t[n],a=o[n],s=r.distance+i.distance;s<a.distance&&(a.distance=s,a.predecessor=i.predecessor)}))}))})),r}(e,t||i,n||function(t){return e.outEdges(t)})};var i=r.constant(1)},function(e,t,n){var r=n(194);e.exports=function(e){try{r(e)}catch(e){if(e instanceof r.CycleException)return!1;throw e}return!0}},function(e,t,n){var r=n(195);e.exports=function(e,t){return r(e,t,"post")}},function(e,t,n){var r=n(195);e.exports=function(e,t){return r(e,t,"pre")}},function(e,t,n){var r=n(22),i=n(116),o=n(192);e.exports=function(e,t){var n,a=new i,s={},l=new o;function c(e){var r=e.v===n?e.w:e.v,i=l.priority(r);if(void 0!==i){var o=t(e);o<i&&(s[r]=n,l.decrease(r,o))}}if(0===e.nodeCount())return a;r.each(e.nodes(),(function(e){l.add(e,Number.POSITIVE_INFINITY),a.setNode(e)})),l.decrease(e.nodes()[0],0);var u=!1;for(;l.size()>0;){if(n=l.removeMin(),r.has(s,n))a.setEdge(n,s[n]);else{if(u)throw new Error("Input graph is not connected: "+e);u=!0}e.nodeEdges(n).forEach(c)}return a}},function(e,t,n){"use strict";var r=n(11),i=n(397),o=n(400),a=n(401),s=n(20).normalizeRanks,l=n(403),c=n(20).removeEmptyRanks,u=n(404),d=n(405),f=n(406),p=n(407),h=n(416),g=n(20),v=n(28).Graph;e.exports=function(e,t){var n=t&&t.debugTiming?g.time:g.notime;n("layout",(function(){var t=n(" buildLayoutGraph",(function(){return function(e){var t=new v({multigraph:!0,compound:!0}),n=C(e.graph());return t.setGraph(r.merge({},b,S(n,m),r.pick(n,y))),r.forEach(e.nodes(),(function(n){var i=C(e.node(n));t.setNode(n,r.defaults(S(i,x),w)),t.setParent(n,e.parent(n))})),r.forEach(e.edges(),(function(n){var i=C(e.edge(n));t.setEdge(n,r.merge({},A,S(i,k),r.pick(i,E)))})),t}(e)}));n(" runLayout",(function(){!function(e,t){t(" makeSpaceForEdgeLabels",(function(){!function(e){var t=e.graph();t.ranksep/=2,r.forEach(e.edges(),(function(n){var r=e.edge(n);r.minlen*=2,"c"!==r.labelpos.toLowerCase()&&("TB"===t.rankdir||"BT"===t.rankdir?r.width+=r.labeloffset:r.height+=r.labeloffset)}))}(e)})),t(" removeSelfEdges",(function(){!function(e){r.forEach(e.edges(),(function(t){if(t.v===t.w){var n=e.node(t.v);n.selfEdges||(n.selfEdges=[]),n.selfEdges.push({e:t,label:e.edge(t)}),e.removeEdge(t)}}))}(e)})),t(" acyclic",(function(){i.run(e)})),t(" nestingGraph.run",(function(){u.run(e)})),t(" rank",(function(){a(g.asNonCompoundGraph(e))})),t(" injectEdgeLabelProxies",(function(){!function(e){r.forEach(e.edges(),(function(t){var n=e.edge(t);if(n.width&&n.height){var r=e.node(t.v),i={rank:(e.node(t.w).rank-r.rank)/2+r.rank,e:t};g.addDummyNode(e,"edge-proxy",i,"_ep")}}))}(e)})),t(" removeEmptyRanks",(function(){c(e)})),t(" nestingGraph.cleanup",(function(){u.cleanup(e)})),t(" normalizeRanks",(function(){s(e)})),t(" assignRankMinMax",(function(){!function(e){var t=0;r.forEach(e.nodes(),(function(n){var i=e.node(n);i.borderTop&&(i.minRank=e.node(i.borderTop).rank,i.maxRank=e.node(i.borderBottom).rank,t=r.max(t,i.maxRank))})),e.graph().maxRank=t}(e)})),t(" removeEdgeLabelProxies",(function(){!function(e){r.forEach(e.nodes(),(function(t){var n=e.node(t);"edge-proxy"===n.dummy&&(e.edge(n.e).labelRank=n.rank,e.removeNode(t))}))}(e)})),t(" normalize.run",(function(){o.run(e)})),t(" parentDummyChains",(function(){l(e)})),t(" addBorderSegments",(function(){d(e)})),t(" order",(function(){p(e)})),t(" insertSelfEdges",(function(){!function(e){var t=g.buildLayerMatrix(e);r.forEach(t,(function(t){var n=0;r.forEach(t,(function(t,i){var o=e.node(t);o.order=i+n,r.forEach(o.selfEdges,(function(t){g.addDummyNode(e,"selfedge",{width:t.label.width,height:t.label.height,rank:o.rank,order:i+ ++n,e:t.e,label:t.label},"_se")})),delete o.selfEdges}))}))}(e)})),t(" adjustCoordinateSystem",(function(){f.adjust(e)})),t(" position",(function(){h(e)})),t(" positionSelfEdges",(function(){!function(e){r.forEach(e.nodes(),(function(t){var n=e.node(t);if("selfedge"===n.dummy){var r=e.node(n.e.v),i=r.x+r.width/2,o=r.y,a=n.x-i,s=r.height/2;e.setEdge(n.e,n.label),e.removeNode(t),n.label.points=[{x:i+2*a/3,y:o-s},{x:i+5*a/6,y:o-s},{x:i+a,y:o},{x:i+5*a/6,y:o+s},{x:i+2*a/3,y:o+s}],n.label.x=n.x,n.label.y=n.y}}))}(e)})),t(" removeBorderNodes",(function(){!function(e){r.forEach(e.nodes(),(function(t){if(e.children(t).length){var n=e.node(t),i=e.node(n.borderTop),o=e.node(n.borderBottom),a=e.node(r.last(n.borderLeft)),s=e.node(r.last(n.borderRight));n.width=Math.abs(s.x-a.x),n.height=Math.abs(o.y-i.y),n.x=a.x+n.width/2,n.y=i.y+n.height/2}})),r.forEach(e.nodes(),(function(t){"border"===e.node(t).dummy&&e.removeNode(t)}))}(e)})),t(" normalize.undo",(function(){o.undo(e)})),t(" fixupEdgeLabelCoords",(function(){!function(e){r.forEach(e.edges(),(function(t){var n=e.edge(t);if(r.has(n,"x"))switch("l"!==n.labelpos&&"r"!==n.labelpos||(n.width-=n.labeloffset),n.labelpos){case"l":n.x-=n.width/2+n.labeloffset;break;case"r":n.x+=n.width/2+n.labeloffset}}))}(e)})),t(" undoCoordinateSystem",(function(){f.undo(e)})),t(" translateGraph",(function(){!function(e){var t=Number.POSITIVE_INFINITY,n=0,i=Number.POSITIVE_INFINITY,o=0,a=e.graph(),s=a.marginx||0,l=a.marginy||0;function c(e){var r=e.x,a=e.y,s=e.width,l=e.height;t=Math.min(t,r-s/2),n=Math.max(n,r+s/2),i=Math.min(i,a-l/2),o=Math.max(o,a+l/2)}r.forEach(e.nodes(),(function(t){c(e.node(t))})),r.forEach(e.edges(),(function(t){var n=e.edge(t);r.has(n,"x")&&c(n)})),t-=s,i-=l,r.forEach(e.nodes(),(function(n){var r=e.node(n);r.x-=t,r.y-=i})),r.forEach(e.edges(),(function(n){var o=e.edge(n);r.forEach(o.points,(function(e){e.x-=t,e.y-=i})),r.has(o,"x")&&(o.x-=t),r.has(o,"y")&&(o.y-=i)})),a.width=n-t+s,a.height=o-i+l}(e)})),t(" assignNodeIntersects",(function(){!function(e){r.forEach(e.edges(),(function(t){var n,r,i=e.edge(t),o=e.node(t.v),a=e.node(t.w);i.points?(n=i.points[0],r=i.points[i.points.length-1]):(i.points=[],n=a,r=o),i.points.unshift(g.intersectRect(o,n)),i.points.push(g.intersectRect(a,r))}))}(e)})),t(" reversePoints",(function(){!function(e){r.forEach(e.edges(),(function(t){var n=e.edge(t);n.reversed&&n.points.reverse()}))}(e)})),t(" acyclic.undo",(function(){i.undo(e)}))}(t,n)})),n(" updateInputGraph",(function(){!function(e,t){r.forEach(e.nodes(),(function(n){var r=e.node(n),i=t.node(n);r&&(r.x=i.x,r.y=i.y,t.children(n).length&&(r.width=i.width,r.height=i.height))})),r.forEach(e.edges(),(function(n){var i=e.edge(n),o=t.edge(n);i.points=o.points,r.has(o,"x")&&(i.x=o.x,i.y=o.y)})),e.graph().width=t.graph().width,e.graph().height=t.graph().height}(e,t)}))}))};var m=["nodesep","edgesep","ranksep","marginx","marginy"],b={ranksep:50,edgesep:20,nodesep:50,rankdir:"tb"},y=["acyclicer","ranker","rankdir","align"],x=["width","height"],w={width:0,height:0},k=["minlen","weight","width","height","labeloffset"],A={minlen:1,weight:1,width:0,height:0,labeloffset:10,labelpos:"r"},E=["labelpos"];function S(e,t){return r.mapValues(r.pick(e,t),Number)}function C(e){var t={};return r.forEach(e,(function(e,n){t[n.toLowerCase()]=e})),t}},function(e,t,n){var r=n(149);e.exports=function(e){return r(e,5)}},function(e,t,n){var r=n(88),i=n(57),o=n(89),a=n(48),s=Object.prototype,l=s.hasOwnProperty,c=r((function(e,t){e=Object(e);var n=-1,r=t.length,c=r>2?t[2]:void 0;for(c&&o(t[0],t[1],c)&&(r=1);++n<r;)for(var u=t[n],d=a(u),f=-1,p=d.length;++f<p;){var h=d[f],g=e[h];(void 0===g||i(g,s[h])&&!l.call(e,h))&&(e[h]=u[h])}return e}));e.exports=c},function(e,t,n){var r=n(363)(n(364));e.exports=r},function(e,t,n){var r=n(35),i=n(34),o=n(41);e.exports=function(e){return function(t,n,a){var s=Object(t);if(!i(t)){var l=r(n,3);t=o(t),n=function(e){return l(s[e],e,s)}}var c=e(t,n,a);return c>-1?s[l?t[c]:c]:void 0}}},function(e,t,n){var r=n(188),i=n(35),o=n(365),a=Math.max;e.exports=function(e,t,n){var s=null==e?0:e.length;if(!s)return-1;var l=null==n?0:o(n);return l<0&&(l=a(s+l,0)),r(e,i(t,3),l)}},function(e,t,n){var r=n(196);e.exports=function(e){var t=r(e),n=t%1;return t==t?n?t-n:t:0}},function(e,t,n){var r=n(23),i=n(61),o=/^\s+|\s+$/g,a=/^[-+]0x[0-9a-f]+$/i,s=/^0b[01]+$/i,l=/^0o[0-7]+$/i,c=parseInt;e.exports=function(e){if("number"==typeof e)return e;if(i(e))return NaN;if(r(e)){var t="function"==typeof e.valueOf?e.valueOf():e;e=r(t)?t+"":t}if("string"!=typeof e)return 0===e?e:+e;e=e.replace(o,"");var n=s.test(e);return n||l.test(e)?c(e.slice(2),n?2:8):a.test(e)?NaN:+e}},function(e,t,n){var r=n(128),i=n(169),o=n(48);e.exports=function(e,t){return null==e?e:r(e,i(t),o)}},function(e,t){e.exports=function(e){var t=null==e?0:e.length;return t?e[t-1]:void 0}},function(e,t,n){var r=n(78),i=n(127),o=n(35);e.exports=function(e,t){var n={};return t=o(t,3),i(e,(function(e,i,o){r(n,i,t(e,i,o))})),n}},function(e,t,n){var r=n(132),i=n(371),o=n(49);e.exports=function(e){return e&&e.length?r(e,o,i):void 0}},function(e,t){e.exports=function(e,t){return e>t}},function(e,t,n){var r=n(373),i=n(377)((function(e,t,n){r(e,t,n)}));e.exports=i},function(e,t,n){var r=n(72),i=n(198),o=n(128),a=n(374),s=n(23),l=n(48),c=n(199);e.exports=function e(t,n,u,d,f){t!==n&&o(n,(function(o,l){if(f||(f=new r),s(o))a(t,n,l,u,e,d,f);else{var p=d?d(c(t,l),o,l+"",t,n,f):void 0;void 0===p&&(p=o),i(t,l,p)}}),l)}},function(e,t,n){var r=n(198),i=n(155),o=n(164),a=n(156),s=n(165),l=n(65),c=n(13),u=n(189),d=n(59),f=n(63),p=n(23),h=n(375),g=n(66),v=n(199),m=n(376);e.exports=function(e,t,n,b,y,x,w){var k=v(e,n),A=v(t,n),E=w.get(A);if(E)r(e,n,E);else{var S=x?x(k,A,n+"",e,t,w):void 0,C=void 0===S;if(C){var $=c(A),O=!$&&d(A),_=!$&&!O&&g(A);S=A,$||O||_?c(k)?S=k:u(k)?S=a(k):O?(C=!1,S=i(A,!0)):_?(C=!1,S=o(A,!0)):S=[]:h(A)||l(A)?(S=k,l(k)?S=m(k):p(k)&&!f(k)||(S=s(A))):C=!1}C&&(w.set(A,S),y(S,A,b,x,w),w.delete(A)),r(e,n,S)}}},function(e,t,n){var r=n(47),i=n(83),o=n(32),a=Function.prototype,s=Object.prototype,l=a.toString,c=s.hasOwnProperty,u=l.call(Object);e.exports=function(e){if(!o(e)||"[object Object]"!=r(e))return!1;var t=i(e);if(null===t)return!0;var n=c.call(t,"constructor")&&t.constructor;return"function"==typeof n&&n instanceof n&&l.call(n)==u}},function(e,t,n){var r=n(64),i=n(48);e.exports=function(e){return r(e,i(e))}},function(e,t,n){var r=n(88),i=n(89);e.exports=function(e){return r((function(t,n){var r=-1,o=n.length,a=o>1?n[o-1]:void 0,s=o>2?n[2]:void 0;for(a=e.length>3&&"function"==typeof a?(o--,a):void 0,s&&i(n[0],n[1],s)&&(a=o<3?void 0:a,o=1),t=Object(t);++r<o;){var l=n[r];l&&e(t,l,r,a)}return t}))}},function(e,t,n){var r=n(132),i=n(200),o=n(49);e.exports=function(e){return e&&e.length?r(e,o,i):void 0}},function(e,t,n){var r=n(132),i=n(35),o=n(200);e.exports=function(e,t){return e&&e.length?r(e,i(t,2),o):void 0}},function(e,t,n){var r=n(29);e.exports=function(){return r.Date.now()}},function(e,t,n){var r=n(382),i=n(385)((function(e,t){return null==e?{}:r(e,t)}));e.exports=i},function(e,t,n){var r=n(383),i=n(178);e.exports=function(e,t){return r(e,t,(function(t,n){return i(e,n)}))}},function(e,t,n){var r=n(85),i=n(384),o=n(86);e.exports=function(e,t,n){for(var a=-1,s=t.length,l={};++a<s;){var c=t[a],u=r(e,c);n(u,c)&&i(l,o(c,e),u)}return l}},function(e,t,n){var r=n(77),i=n(86),o=n(80),a=n(23),s=n(67);e.exports=function(e,t,n,l){if(!a(e))return e;for(var c=-1,u=(t=i(t,e)).length,d=u-1,f=e;null!=f&&++c<u;){var p=s(t[c]),h=n;if("__proto__"===p||"constructor"===p||"prototype"===p)return e;if(c!=d){var g=f[p];void 0===(h=l?l(g,p,f):void 0)&&(h=a(g)?g:o(t[c+1])?[]:{})}r(f,p,h),f=f[p]}return e}},function(e,t,n){var r=n(197),i=n(186),o=n(187);e.exports=function(e){return o(i(e,void 0,r),e+"")}},function(e,t,n){var r=n(387)();e.exports=r},function(e,t,n){var r=n(388),i=n(89),o=n(196);e.exports=function(e){return function(t,n,a){return a&&"number"!=typeof a&&i(t,n,a)&&(n=a=void 0),t=o(t),void 0===n?(n=t,t=0):n=o(n),a=void 0===a?t<n?1:-1:o(a),r(t,n,a,e)}}},function(e,t){var n=Math.ceil,r=Math.max;e.exports=function(e,t,i,o){for(var a=-1,s=r(n((t-e)/(i||1)),0),l=Array(s);s--;)l[o?s:++a]=e,e+=i;return l}},function(e,t,n){var r=n(131),i=n(390),o=n(88),a=n(89),s=o((function(e,t){if(null==e)return[];var n=t.length;return n>1&&a(e,t[0],t[1])?t=[]:n>2&&a(t[0],t[1],t[2])&&(t=[t[0]]),i(e,r(t,1),[])}));e.exports=s},function(e,t,n){var r=n(87),i=n(85),o=n(35),a=n(184),s=n(391),l=n(81),c=n(392),u=n(49),d=n(13);e.exports=function(e,t,n){t=t.length?r(t,(function(e){return d(e)?function(t){return i(t,1===e.length?e[0]:e)}:e})):[u];var f=-1;t=r(t,l(o));var p=a(e,(function(e,n,i){return{criteria:r(t,(function(t){return t(e)})),index:++f,value:e}}));return s(p,(function(e,t){return c(e,t,n)}))}},function(e,t){e.exports=function(e,t){var n=e.length;for(e.sort(t);n--;)e[n]=e[n].value;return e}},function(e,t,n){var r=n(393);e.exports=function(e,t,n){for(var i=-1,o=e.criteria,a=t.criteria,s=o.length,l=n.length;++i<s;){var c=r(o[i],a[i]);if(c)return i>=l?c:c*("desc"==n[i]?-1:1)}return e.index-t.index}},function(e,t,n){var r=n(61);e.exports=function(e,t){if(e!==t){var n=void 0!==e,i=null===e,o=e==e,a=r(e),s=void 0!==t,l=null===t,c=t==t,u=r(t);if(!l&&!u&&!a&&e>t||a&&s&&c&&!l&&!u||i&&s&&c||!n&&c||!o)return 1;if(!i&&!a&&!u&&e<t||u&&n&&o&&!i&&!a||l&&n&&o||!s&&o||!c)return-1}return 0}},function(e,t,n){var r=n(177),i=0;e.exports=function(e){var t=++i;return r(e)+t}},function(e,t,n){var r=n(77),i=n(396);e.exports=function(e,t){return i(e||[],t||[],r)}},function(e,t){e.exports=function(e,t,n){for(var r=-1,i=e.length,o=t.length,a={};++r<i;){var s=r<o?t[r]:void 0;n(a,e[r],s)}return a}},function(e,t,n){"use strict";var r=n(11),i=n(398);e.exports={run:function(e){var t="greedy"===e.graph().acyclicer?i(e,function(e){return function(t){return e.edge(t).weight}}(e)):function(e){var t=[],n={},i={};function o(a){r.has(i,a)||(i[a]=!0,n[a]=!0,r.forEach(e.outEdges(a),(function(e){r.has(n,e.w)?t.push(e):o(e.w)})),delete n[a])}return r.forEach(e.nodes(),o),t}(e);r.forEach(t,(function(t){var n=e.edge(t);e.removeEdge(t),n.forwardName=t.name,n.reversed=!0,e.setEdge(t.w,t.v,n,r.uniqueId("rev"))}))},undo:function(e){r.forEach(e.edges(),(function(t){var n=e.edge(t);if(n.reversed){e.removeEdge(t);var r=n.forwardName;delete n.reversed,delete n.forwardName,e.setEdge(t.w,t.v,n,r)}}))}}},function(e,t,n){var r=n(11),i=n(28).Graph,o=n(399);e.exports=function(e,t){if(e.nodeCount()<=1)return[];var n=function(e,t){var n=new i,a=0,s=0;r.forEach(e.nodes(),(function(e){n.setNode(e,{v:e,in:0,out:0})})),r.forEach(e.edges(),(function(e){var r=n.edge(e.v,e.w)||0,i=t(e),o=r+i;n.setEdge(e.v,e.w,o),s=Math.max(s,n.node(e.v).out+=i),a=Math.max(a,n.node(e.w).in+=i)}));var c=r.range(s+a+3).map((function(){return new o})),u=a+1;return r.forEach(n.nodes(),(function(e){l(c,u,n.node(e))})),{graph:n,buckets:c,zeroIdx:u}}(e,t||a),c=function(e,t,n){var r,i=[],o=t[t.length-1],a=t[0];for(;e.nodeCount();){for(;r=a.dequeue();)s(e,t,n,r);for(;r=o.dequeue();)s(e,t,n,r);if(e.nodeCount())for(var l=t.length-2;l>0;--l)if(r=t[l].dequeue()){i=i.concat(s(e,t,n,r,!0));break}}return i}(n.graph,n.buckets,n.zeroIdx);return r.flatten(r.map(c,(function(t){return e.outEdges(t.v,t.w)})),!0)};var a=r.constant(1);function s(e,t,n,i,o){var a=o?[]:void 0;return r.forEach(e.inEdges(i.v),(function(r){var i=e.edge(r),s=e.node(r.v);o&&a.push({v:r.v,w:r.w}),s.out-=i,l(t,n,s)})),r.forEach(e.outEdges(i.v),(function(r){var i=e.edge(r),o=r.w,a=e.node(o);a.in-=i,l(t,n,a)})),e.removeNode(i.v),a}function l(e,t,n){n.out?n.in?e[n.out-n.in+t].enqueue(n):e[e.length-1].enqueue(n):e[0].enqueue(n)}},function(e,t){function n(){var e={};e._next=e._prev=e,this._sentinel=e}function r(e){e._prev._next=e._next,e._next._prev=e._prev,delete e._next,delete e._prev}function i(e,t){if("_next"!==e&&"_prev"!==e)return t}e.exports=n,n.prototype.dequeue=function(){var e=this._sentinel,t=e._prev;if(t!==e)return r(t),t},n.prototype.enqueue=function(e){var t=this._sentinel;e._prev&&e._next&&r(e),e._next=t._next,t._next._prev=e,t._next=e,e._prev=t},n.prototype.toString=function(){for(var e=[],t=this._sentinel,n=t._prev;n!==t;)e.push(JSON.stringify(n,i)),n=n._prev;return"["+e.join(", ")+"]"}},function(e,t,n){"use strict";var r=n(11),i=n(20);e.exports={run:function(e){e.graph().dummyChains=[],r.forEach(e.edges(),(function(t){!function(e,t){var n,r,o,a=t.v,s=e.node(a).rank,l=t.w,c=e.node(l).rank,u=t.name,d=e.edge(t),f=d.labelRank;if(c===s+1)return;for(e.removeEdge(t),o=0,++s;s<c;++o,++s)d.points=[],r={width:0,height:0,edgeLabel:d,edgeObj:t,rank:s},n=i.addDummyNode(e,"edge",r,"_d"),s===f&&(r.width=d.width,r.height=d.height,r.dummy="edge-label",r.labelpos=d.labelpos),e.setEdge(a,n,{weight:d.weight},u),0===o&&e.graph().dummyChains.push(n),a=n;e.setEdge(a,l,{weight:d.weight},u)}(e,t)}))},undo:function(e){r.forEach(e.graph().dummyChains,(function(t){var n,r=e.node(t),i=r.edgeLabel;for(e.setEdge(r.edgeObj,i);r.dummy;)n=e.successors(t)[0],e.removeNode(t),i.points.push({x:r.x,y:r.y}),"edge-label"===r.dummy&&(i.x=r.x,i.y=r.y,i.width=r.width,i.height=r.height),t=n,r=e.node(t)}))}}},function(e,t,n){"use strict";var r=n(90).longestPath,i=n(201),o=n(402);e.exports=function(e){switch(e.graph().ranker){case"network-simplex":s(e);break;case"tight-tree":!function(e){r(e),i(e)}(e);break;case"longest-path":a(e);break;default:s(e)}};var a=r;function s(e){o(e)}},function(e,t,n){"use strict";var r=n(11),i=n(201),o=n(90).slack,a=n(90).longestPath,s=n(28).alg.preorder,l=n(28).alg.postorder,c=n(20).simplify;function u(e){e=c(e),a(e);var t,n=i(e);for(p(n),d(n,e);t=g(n);)m(n,e,t,v(n,e,t))}function d(e,t){var n=l(e,e.nodes());n=n.slice(0,n.length-1),r.forEach(n,(function(n){!function(e,t,n){var r=e.node(n).parent;e.edge(n,r).cutvalue=f(e,t,n)}(e,t,n)}))}function f(e,t,n){var i=e.node(n).parent,o=!0,a=t.edge(n,i),s=0;return a||(o=!1,a=t.edge(i,n)),s=a.weight,r.forEach(t.nodeEdges(n),(function(r){var a,l,c=r.v===n,u=c?r.w:r.v;if(u!==i){var d=c===o,f=t.edge(r).weight;if(s+=d?f:-f,a=n,l=u,e.hasEdge(a,l)){var p=e.edge(n,u).cutvalue;s+=d?-p:p}}})),s}function p(e,t){arguments.length<2&&(t=e.nodes()[0]),h(e,{},1,t)}function h(e,t,n,i,o){var a=n,s=e.node(i);return t[i]=!0,r.forEach(e.neighbors(i),(function(o){r.has(t,o)||(n=h(e,t,n,o,i))})),s.low=a,s.lim=n++,o?s.parent=o:delete s.parent,n}function g(e){return r.find(e.edges(),(function(t){return e.edge(t).cutvalue<0}))}function v(e,t,n){var i=n.v,a=n.w;t.hasEdge(i,a)||(i=n.w,a=n.v);var s=e.node(i),l=e.node(a),c=s,u=!1;s.lim>l.lim&&(c=l,u=!0);var d=r.filter(t.edges(),(function(t){return u===b(e,e.node(t.v),c)&&u!==b(e,e.node(t.w),c)}));return r.minBy(d,(function(e){return o(t,e)}))}function m(e,t,n,i){var o=n.v,a=n.w;e.removeEdge(o,a),e.setEdge(i.v,i.w,{}),p(e),d(e,t),function(e,t){var n=r.find(e.nodes(),(function(e){return!t.node(e).parent})),i=s(e,n);i=i.slice(1),r.forEach(i,(function(n){var r=e.node(n).parent,i=t.edge(n,r),o=!1;i||(i=t.edge(r,n),o=!0),t.node(n).rank=t.node(r).rank+(o?i.minlen:-i.minlen)}))}(e,t)}function b(e,t,n){return n.low<=t.lim&&t.lim<=n.lim}e.exports=u,u.initLowLimValues=p,u.initCutValues=d,u.calcCutValue=f,u.leaveEdge=g,u.enterEdge=v,u.exchangeEdges=m},function(e,t,n){var r=n(11);e.exports=function(e){var t=function(e){var t={},n=0;function i(o){var a=n;r.forEach(e.children(o),i),t[o]={low:a,lim:n++}}return r.forEach(e.children(),i),t}(e);r.forEach(e.graph().dummyChains,(function(n){for(var r=e.node(n),i=r.edgeObj,o=function(e,t,n,r){var i,o,a=[],s=[],l=Math.min(t[n].low,t[r].low),c=Math.max(t[n].lim,t[r].lim);i=n;do{i=e.parent(i),a.push(i)}while(i&&(t[i].low>l||c>t[i].lim));o=i,i=r;for(;(i=e.parent(i))!==o;)s.push(i);return{path:a.concat(s.reverse()),lca:o}}(e,t,i.v,i.w),a=o.path,s=o.lca,l=0,c=a[l],u=!0;n!==i.w;){if(r=e.node(n),u){for(;(c=a[l])!==s&&e.node(c).maxRank<r.rank;)l++;c===s&&(u=!1)}if(!u){for(;l<a.length-1&&e.node(c=a[l+1]).minRank<=r.rank;)l++;c=a[l]}e.setParent(n,c),n=e.successors(n)[0]}}))}},function(e,t,n){var r=n(11),i=n(20);e.exports={run:function(e){var t=i.addDummyNode(e,"root",{},"_root"),n=function(e){var t={};return r.forEach(e.children(),(function(n){!function n(i,o){var a=e.children(i);a&&a.length&&r.forEach(a,(function(e){n(e,o+1)}));t[i]=o}(n,1)})),t}(e),o=r.max(r.values(n))-1,a=2*o+1;e.graph().nestingRoot=t,r.forEach(e.edges(),(function(t){e.edge(t).minlen*=a}));var s=function(e){return r.reduce(e.edges(),(function(t,n){return t+e.edge(n).weight}),0)}(e)+1;r.forEach(e.children(),(function(l){!function e(t,n,o,a,s,l,c){var u=t.children(c);if(!u.length)return void(c!==n&&t.setEdge(n,c,{weight:0,minlen:o}));var d=i.addBorderNode(t,"_bt"),f=i.addBorderNode(t,"_bb"),p=t.node(c);t.setParent(d,c),p.borderTop=d,t.setParent(f,c),p.borderBottom=f,r.forEach(u,(function(r){e(t,n,o,a,s,l,r);var i=t.node(r),u=i.borderTop?i.borderTop:r,p=i.borderBottom?i.borderBottom:r,h=i.borderTop?a:2*a,g=u!==p?1:s-l[c]+1;t.setEdge(d,u,{weight:h,minlen:g,nestingEdge:!0}),t.setEdge(p,f,{weight:h,minlen:g,nestingEdge:!0})})),t.parent(c)||t.setEdge(n,d,{weight:0,minlen:s+l[c]})}(e,t,a,s,o,n,l)})),e.graph().nodeRankFactor=a},cleanup:function(e){var t=e.graph();e.removeNode(t.nestingRoot),delete t.nestingRoot,r.forEach(e.edges(),(function(t){e.edge(t).nestingEdge&&e.removeEdge(t)}))}}},function(e,t,n){var r=n(11),i=n(20);function o(e,t,n,r,o,a){var s={width:0,height:0,rank:a,borderType:t},l=o[t][a-1],c=i.addDummyNode(e,"border",s,n);o[t][a]=c,e.setParent(c,r),l&&e.setEdge(l,c,{weight:1})}e.exports=function(e){r.forEach(e.children(),(function t(n){var i=e.children(n),a=e.node(n);if(i.length&&r.forEach(i,t),r.has(a,"minRank")){a.borderLeft=[],a.borderRight=[];for(var s=a.minRank,l=a.maxRank+1;s<l;++s)o(e,"borderLeft","_bl",n,a,s),o(e,"borderRight","_br",n,a,s)}}))}},function(e,t,n){"use strict";var r=n(11);function i(e){r.forEach(e.nodes(),(function(t){o(e.node(t))})),r.forEach(e.edges(),(function(t){o(e.edge(t))}))}function o(e){var t=e.width;e.width=e.height,e.height=t}function a(e){e.y=-e.y}function s(e){var t=e.x;e.x=e.y,e.y=t}e.exports={adjust:function(e){var t=e.graph().rankdir.toLowerCase();"lr"!==t&&"rl"!==t||i(e)},undo:function(e){var t=e.graph().rankdir.toLowerCase();"bt"!==t&&"rl"!==t||function(e){r.forEach(e.nodes(),(function(t){a(e.node(t))})),r.forEach(e.edges(),(function(t){var n=e.edge(t);r.forEach(n.points,a),r.has(n,"y")&&a(n)}))}(e);"lr"!==t&&"rl"!==t||(!function(e){r.forEach(e.nodes(),(function(t){s(e.node(t))})),r.forEach(e.edges(),(function(t){var n=e.edge(t);r.forEach(n.points,s),r.has(n,"x")&&s(n)}))}(e),i(e))}}},function(e,t,n){"use strict";var r=n(11),i=n(408),o=n(409),a=n(410),s=n(414),l=n(415),c=n(28).Graph,u=n(20);function d(e,t,n){return r.map(t,(function(t){return s(e,t,n)}))}function f(e,t){var n=new c;r.forEach(e,(function(e){var i=e.graph().root,o=a(e,i,n,t);r.forEach(o.vs,(function(t,n){e.node(t).order=n})),l(e,n,o.vs)}))}function p(e,t){r.forEach(t,(function(t){r.forEach(t,(function(t,n){e.node(t).order=n}))}))}e.exports=function(e){var t=u.maxRank(e),n=d(e,r.range(1,t+1),"inEdges"),a=d(e,r.range(t-1,-1,-1),"outEdges"),s=i(e);p(e,s);for(var l,c=Number.POSITIVE_INFINITY,h=0,g=0;g<4;++h,++g){f(h%2?n:a,h%4>=2),s=u.buildLayerMatrix(e);var v=o(e,s);v<c&&(g=0,l=r.cloneDeep(s),c=v)}p(e,l)}},function(e,t,n){"use strict";var r=n(11);e.exports=function(e){var t={},n=r.filter(e.nodes(),(function(t){return!e.children(t).length})),i=r.max(r.map(n,(function(t){return e.node(t).rank}))),o=r.map(r.range(i+1),(function(){return[]}));var a=r.sortBy(n,(function(t){return e.node(t).rank}));return r.forEach(a,(function n(i){if(r.has(t,i))return;t[i]=!0;var a=e.node(i);o[a.rank].push(i),r.forEach(e.successors(i),n)})),o}},function(e,t,n){"use strict";var r=n(11);function i(e,t,n){for(var i=r.zipObject(n,r.map(n,(function(e,t){return t}))),o=r.flatten(r.map(t,(function(t){return r.sortBy(r.map(e.outEdges(t),(function(t){return{pos:i[t.w],weight:e.edge(t).weight}})),"pos")})),!0),a=1;a<n.length;)a<<=1;var s=2*a-1;a-=1;var l=r.map(new Array(s),(function(){return 0})),c=0;return r.forEach(o.forEach((function(e){var t=e.pos+a;l[t]+=e.weight;for(var n=0;t>0;)t%2&&(n+=l[t+1]),l[t=t-1>>1]+=e.weight;c+=e.weight*n}))),c}e.exports=function(e,t){for(var n=0,r=1;r<t.length;++r)n+=i(e,t[r-1],t[r]);return n}},function(e,t,n){var r=n(11),i=n(411),o=n(412),a=n(413);e.exports=function e(t,n,s,l){var c=t.children(n),u=t.node(n),d=u?u.borderLeft:void 0,f=u?u.borderRight:void 0,p={};d&&(c=r.filter(c,(function(e){return e!==d&&e!==f})));var h=i(t,c);r.forEach(h,(function(n){if(t.children(n.v).length){var i=e(t,n.v,s,l);p[n.v]=i,r.has(i,"barycenter")&&(o=n,a=i,r.isUndefined(o.barycenter)?(o.barycenter=a.barycenter,o.weight=a.weight):(o.barycenter=(o.barycenter*o.weight+a.barycenter*a.weight)/(o.weight+a.weight),o.weight+=a.weight))}var o,a}));var g=o(h,s);!function(e,t){r.forEach(e,(function(e){e.vs=r.flatten(e.vs.map((function(e){return t[e]?t[e].vs:e})),!0)}))}(g,p);var v=a(g,l);if(d&&(v.vs=r.flatten([d,v.vs,f],!0),t.predecessors(d).length)){var m=t.node(t.predecessors(d)[0]),b=t.node(t.predecessors(f)[0]);r.has(v,"barycenter")||(v.barycenter=0,v.weight=0),v.barycenter=(v.barycenter*v.weight+m.order+b.order)/(v.weight+2),v.weight+=2}return v}},function(e,t,n){var r=n(11);e.exports=function(e,t){return r.map(t,(function(t){var n=e.inEdges(t);if(n.length){var i=r.reduce(n,(function(t,n){var r=e.edge(n),i=e.node(n.v);return{sum:t.sum+r.weight*i.order,weight:t.weight+r.weight}}),{sum:0,weight:0});return{v:t,barycenter:i.sum/i.weight,weight:i.weight}}return{v:t}}))}},function(e,t,n){"use strict";var r=n(11);e.exports=function(e,t){var n={};return r.forEach(e,(function(e,t){var i=n[e.v]={indegree:0,in:[],out:[],vs:[e.v],i:t};r.isUndefined(e.barycenter)||(i.barycenter=e.barycenter,i.weight=e.weight)})),r.forEach(t.edges(),(function(e){var t=n[e.v],i=n[e.w];r.isUndefined(t)||r.isUndefined(i)||(i.indegree++,t.out.push(n[e.w]))})),function(e){var t=[];function n(e){return function(t){t.merged||(r.isUndefined(t.barycenter)||r.isUndefined(e.barycenter)||t.barycenter>=e.barycenter)&&function(e,t){var n=0,r=0;e.weight&&(n+=e.barycenter*e.weight,r+=e.weight);t.weight&&(n+=t.barycenter*t.weight,r+=t.weight);e.vs=t.vs.concat(e.vs),e.barycenter=n/r,e.weight=r,e.i=Math.min(t.i,e.i),t.merged=!0}(e,t)}}function i(t){return function(n){n.in.push(t),0==--n.indegree&&e.push(n)}}for(;e.length;){var o=e.pop();t.push(o),r.forEach(o.in.reverse(),n(o)),r.forEach(o.out,i(o))}return r.map(r.filter(t,(function(e){return!e.merged})),(function(e){return r.pick(e,["vs","i","barycenter","weight"])}))}(r.filter(n,(function(e){return!e.indegree})))}},function(e,t,n){var r=n(11),i=n(20);function o(e,t,n){for(var i;t.length&&(i=r.last(t)).i<=n;)t.pop(),e.push(i.vs),n++;return n}e.exports=function(e,t){var n=i.partition(e,(function(e){return r.has(e,"barycenter")})),a=n.lhs,s=r.sortBy(n.rhs,(function(e){return-e.i})),l=[],c=0,u=0,d=0;a.sort((f=!!t,function(e,t){return e.barycenter<t.barycenter?-1:e.barycenter>t.barycenter?1:f?t.i-e.i:e.i-t.i})),d=o(l,s,d),r.forEach(a,(function(e){d+=e.vs.length,l.push(e.vs),c+=e.barycenter*e.weight,u+=e.weight,d=o(l,s,d)}));var f;var p={vs:r.flatten(l,!0)};u&&(p.barycenter=c/u,p.weight=u);return p}},function(e,t,n){var r=n(11),i=n(28).Graph;e.exports=function(e,t,n){var o=function(e){var t;for(;e.hasNode(t=r.uniqueId("_root")););return t}(e),a=new i({compound:!0}).setGraph({root:o}).setDefaultNodeLabel((function(t){return e.node(t)}));return r.forEach(e.nodes(),(function(i){var s=e.node(i),l=e.parent(i);(s.rank===t||s.minRank<=t&&t<=s.maxRank)&&(a.setNode(i),a.setParent(i,l||o),r.forEach(e[n](i),(function(t){var n=t.v===i?t.w:t.v,o=a.edge(n,i),s=r.isUndefined(o)?0:o.weight;a.setEdge(n,i,{weight:e.edge(t).weight+s})})),r.has(s,"minRank")&&a.setNode(i,{borderLeft:s.borderLeft[t],borderRight:s.borderRight[t]}))})),a}},function(e,t,n){var r=n(11);e.exports=function(e,t,n){var i,o={};r.forEach(n,(function(n){for(var r,a,s=e.parent(n);s;){if((r=e.parent(s))?(a=o[r],o[r]=s):(a=i,i=s),a&&a!==s)return void t.setEdge(a,s);s=r}}))}},function(e,t,n){"use strict";var r=n(11),i=n(20),o=n(417).positionX;e.exports=function(e){(function(e){var t=i.buildLayerMatrix(e),n=e.graph().ranksep,o=0;r.forEach(t,(function(t){var i=r.max(r.map(t,(function(t){return e.node(t).height})));r.forEach(t,(function(t){e.node(t).y=o+i/2})),o+=i+n}))})(e=i.asNonCompoundGraph(e)),r.forEach(o(e),(function(t,n){e.node(n).x=t}))}},function(e,t,n){"use strict";var r=n(11),i=n(28).Graph,o=n(20);function a(e,t){var n={};return r.reduce(t,(function(t,i){var o=0,a=0,s=t.length,c=r.last(i);return r.forEach(i,(function(t,u){var d=function(e,t){if(e.node(t).dummy)return r.find(e.predecessors(t),(function(t){return e.node(t).dummy}))}(e,t),f=d?e.node(d).order:s;(d||t===c)&&(r.forEach(i.slice(a,u+1),(function(t){r.forEach(e.predecessors(t),(function(r){var i=e.node(r),a=i.order;!(a<o||f<a)||i.dummy&&e.node(t).dummy||l(n,r,t)}))})),a=u+1,o=f)})),i})),n}function s(e,t){var n={};function i(t,i,o,a,s){var c;r.forEach(r.range(i,o),(function(i){c=t[i],e.node(c).dummy&&r.forEach(e.predecessors(c),(function(t){var r=e.node(t);r.dummy&&(r.order<a||r.order>s)&&l(n,t,c)}))}))}return r.reduce(t,(function(t,n){var o,a=-1,s=0;return r.forEach(n,(function(r,l){if("border"===e.node(r).dummy){var c=e.predecessors(r);c.length&&(o=e.node(c[0]).order,i(n,s,l,a,o),s=l,a=o)}i(n,s,n.length,o,t.length)})),n})),n}function l(e,t,n){if(t>n){var r=t;t=n,n=r}var i=e[t];i||(e[t]=i={}),i[n]=!0}function c(e,t,n){if(t>n){var i=t;t=n,n=i}return r.has(e[t],n)}function u(e,t,n,i){var o={},a={},s={};return r.forEach(t,(function(e){r.forEach(e,(function(e,t){o[e]=e,a[e]=e,s[e]=t}))})),r.forEach(t,(function(e){var t=-1;r.forEach(e,(function(e){var l=i(e);if(l.length)for(var u=((l=r.sortBy(l,(function(e){return s[e]}))).length-1)/2,d=Math.floor(u),f=Math.ceil(u);d<=f;++d){var p=l[d];a[e]===e&&t<s[p]&&!c(n,e,p)&&(a[p]=e,a[e]=o[e]=o[p],t=s[p])}}))})),{root:o,align:a}}function d(e,t,n,o,a){var s={},l=function(e,t,n,o){var a=new i,s=e.graph(),l=function(e,t,n){return function(i,o,a){var s,l=i.node(o),c=i.node(a),u=0;if(u+=l.width/2,r.has(l,"labelpos"))switch(l.labelpos.toLowerCase()){case"l":s=-l.width/2;break;case"r":s=l.width/2}if(s&&(u+=n?s:-s),s=0,u+=(l.dummy?t:e)/2,u+=(c.dummy?t:e)/2,u+=c.width/2,r.has(c,"labelpos"))switch(c.labelpos.toLowerCase()){case"l":s=c.width/2;break;case"r":s=-c.width/2}return s&&(u+=n?s:-s),s=0,u}}(s.nodesep,s.edgesep,o);return r.forEach(t,(function(t){var i;r.forEach(t,(function(t){var r=n[t];if(a.setNode(r),i){var o=n[i],s=a.edge(o,r);a.setEdge(o,r,Math.max(l(e,t,i),s||0))}i=t}))})),a}(e,t,n,a),c=a?"borderLeft":"borderRight";function u(e,t){for(var n=l.nodes(),r=n.pop(),i={};r;)i[r]?e(r):(i[r]=!0,n.push(r),n=n.concat(t(r))),r=n.pop()}return u((function(e){s[e]=l.inEdges(e).reduce((function(e,t){return Math.max(e,s[t.v]+l.edge(t))}),0)}),l.predecessors.bind(l)),u((function(t){var n=l.outEdges(t).reduce((function(e,t){return Math.min(e,s[t.w]-l.edge(t))}),Number.POSITIVE_INFINITY),r=e.node(t);n!==Number.POSITIVE_INFINITY&&r.borderType!==c&&(s[t]=Math.max(s[t],n))}),l.successors.bind(l)),r.forEach(o,(function(e){s[e]=s[n[e]]})),s}function f(e,t){return r.minBy(r.values(t),(function(t){var n=Number.NEGATIVE_INFINITY,i=Number.POSITIVE_INFINITY;return r.forIn(t,(function(t,r){var o=function(e,t){return e.node(t).width}(e,r)/2;n=Math.max(t+o,n),i=Math.min(t-o,i)})),n-i}))}function p(e,t){var n=r.values(t),i=r.min(n),o=r.max(n);r.forEach(["u","d"],(function(n){r.forEach(["l","r"],(function(a){var s,l=n+a,c=e[l];if(c!==t){var u=r.values(c);(s="l"===a?i-r.min(u):o-r.max(u))&&(e[l]=r.mapValues(c,(function(e){return e+s})))}}))}))}function h(e,t){return r.mapValues(e.ul,(function(n,i){if(t)return e[t.toLowerCase()][i];var o=r.sortBy(r.map(e,i));return(o[1]+o[2])/2}))}e.exports={positionX:function(e){var t,n=o.buildLayerMatrix(e),i=r.merge(a(e,n),s(e,n)),l={};r.forEach(["u","d"],(function(o){t="u"===o?n:r.values(n).reverse(),r.forEach(["l","r"],(function(n){"r"===n&&(t=r.map(t,(function(e){return r.values(e).reverse()})));var a=("u"===o?e.predecessors:e.successors).bind(e),s=u(e,t,i,a),c=d(e,t,s.root,s.align,"r"===n);"r"===n&&(c=r.mapValues(c,(function(e){return-e}))),l[o+n]=c}))}));var c=f(e,l);return p(l,c),h(l,e.graph().align)},findType1Conflicts:a,findType2Conflicts:s,addConflict:l,hasConflict:c,verticalAlignment:u,horizontalCompaction:d,alignCoordinates:p,findSmallestWidthAlignment:f,balance:h}},function(e,t,n){var r=n(11),i=n(20),o=n(28).Graph;e.exports={debugOrdering:function(e){var t=i.buildLayerMatrix(e),n=new o({compound:!0,multigraph:!0}).setGraph({});return r.forEach(e.nodes(),(function(t){n.setNode(t,{label:t}),n.setParent(t,"layer"+e.node(t).rank)})),r.forEach(e.edges(),(function(e){n.setEdge(e.v,e.w,{},e.name)})),r.forEach(t,(function(e,t){var i="layer"+t;n.setNode(i,{rank:"same"}),r.reduce(e,(function(e,t){return n.setEdge(e,t,{style:"invis"}),t}))})),n}}},function(e,t){e.exports="0.8.5"},function(e,t,n){"use strict";const r=n(421);angular.module("dbt").directive("modelTree",[function(){return{scope:{tree:"="},templateUrl:r,link:function(e){e.nav_selected="project"}}}])},function(e,t){var n="/components/model_tree/model_tree.html";window.angular.module("ng").run(["$templateCache",function(e){e.put(n,'<style>\n.menu ul ul {\n margin-left: 12px;\n}\n</style>\n\n<div class="menu">\n <ul>\n <li>\n <a ui-sref="dbt.overview()" class="menu-link menu-main">\n Overview\n </a>\n </li>\n\n <li>\n <div class="switches">\n <div class="switch ">\n <span\n class="switch-label btn btn-sm"\n ng-class="{active: (nav_selected == \'project\')}"\n ng-click="nav_selected = \'project\'">\n <svg class="icn menu-icon-on"><use xlink:href="#icn-dir-on"></use></svg>\n Project\n </span>\n </div>\n <div class="switch">\n <span\n class="switch-label btn btn-sm"\n ng-class="{active: (nav_selected == \'database\')}"\n ng-click="nav_selected = \'database\'">\n <svg class="icn menu-icon-on"><use xlink:href="#icn-tree-on"></use></svg>\n Database\n </span>\n </div>\n </div>\n </li>\n\n <li>\n <div class="menu" ng-show="nav_selected == \'project\'">\n <div ng-show="tree.sources.length > 0">\n <strong>Sources</strong>\n <ul style="display: block">\n <model-tree-line\n item="item"\n resource-type="source"\n ng-repeat="item in tree.sources"></source-tree-line>\n </ul>\n <br />\n </div>\n\n <div ng-show="tree.exposures.length > 0">\n <strong>Exposures</strong>\n <ul style="display: block">\n <model-tree-line\n item="item"\n resource-type="exposure"\n ng-repeat="item in tree.exposures"></model-tree-line>\n </ul>\n <br />\n </div>\n \n <div ng-show="tree.metrics.length > 0">\n <strong>Metrics</strong>\n <ul style="display: block">\n <model-tree-line\n item="item"\n resource-type="metric"\n ng-repeat="item in tree.metrics"></model-tree-line>\n </ul>\n <br />\n </div>\n\n <strong>Projects</strong>\n <ul>\n <model-tree-line\n item="item"\n resource-type="model"\n ng-repeat="item in tree.project"></model-tree-line>\n </ul>\n </div>\n </li>\n\n <li>\n <div class="menu" ng-show="nav_selected == \'database\'">\n <strong>Tables and Views</strong>\n <ul>\n <model-tree-line\n item="item"\n resource-type="model"\n ng-repeat="item in tree.database"></model-tree-line>\n </ul>\n </div>\n </li>\n </ul>\n</div>\n')}]),e.exports=n},function(e,t,n){"use strict";const r=n(423),i=n(21);n(424),angular.module("dbt").directive("modelTreeLine",["$state",function(e){return{scope:{item:"=",depth:"<",resourceType:"@"},replace:!0,templateUrl:r,link:function(t,n,r,o){t.depth||(t.depth=0);var a=t.item.name,s=i.last(a,15).join(""),l=i.initial(a,s.length).join("");t.name={name:a,start:l,end:s},t.name_start=l,t.name_end=s,t.onFolderClick=function(n){if(n.active=!n.active,"source"==t.resourceType){var r=n.name;e.go("dbt.source_list",{source:r})}else 0===t.depth&&"database"!==n.type&&e.go("dbt.project_overview",{project_name:n.name})},t.activate=function(n){t.$emit("clearSearch"),n.active=!0;var r="dbt."+n.node.resource_type;e.go(r,{unique_id:n.unique_id})},t.getIcon=function(e,t){return"#"+{header:{on:"icn-down",off:"icn-right"},database:{on:"icn-db-on",off:"icn-db"},schema:{on:"icn-tree-on",off:"icn-tree"},table:{on:"icn-doc-on",off:"icn-doc"},folder:{on:"icn-dir-on",off:"icn-dir"},file:{on:"icn-doc-on",off:"icn-doc"}}[e][t]},t.getClass=function(e){return{active:e.active,"menu-tree":"header"==e.type||"schema"==e.type||"folder"==e.type,"menu-main":"header"==e.type,"menu-node":"file"==e.type||"table"==e.type}}}}}])},function(e,t){var n="/components/model_tree/model_tree_line.html";window.angular.module("ng").run(["$templateCache",function(e){e.put(n,'<li class=\'unselectable\'>\n\n <a ng-if="!item.unique_id"\n class=\'unselectable\'\n ng-class="getClass(item)"\n ng-click="onFolderClick(item)">\n <span class="filename">\n <span class="filename-normal">\n <svg class="icn menu-icon-on"><use xlink:href="{{ getIcon(item.type, \'on\') }}"></use></svg>\n <svg class="icn menu-icon-off"><use xlink:href="{{ getIcon(item.type, \'off\') }}"></use></svg>\n </span>\n <span class="filename-ellip">{{name.start}}</span>\n <span class="filename-normal">{{name.end}}</span>\n </span>\n </a>\n\n <a ng-if="item.unique_id"\n class=\'unselectable\'\n ng-class="getClass(item)"\n ng-click="activate(item)"\n data-nav-unique-id="{{ item.unique_id }}"\n title="{{ name.name }}">\n <span class="filename">\n <span class="filename-normal">\n <svg class="icn menu-icon-on"><use xlink:href="{{ getIcon(item.type, \'on\') }}"></use></svg>\n <svg class="icn menu-icon-off"><use xlink:href="{{ getIcon(item.type, \'off\') }}"></use></svg>\n </span>\n <span class="filename-ellip">{{name.start}}</span>\n <span class="filename-normal">{{name.end}}</span>\n </span>\n </a>\n\n <ul ng-if="item.items">\n <model-tree-line\n resource-type="{{ resourceType }}"\n item="subitem"\n depth="depth + 1"\n ng-repeat="subitem in item.items" />\n </ul>\n</li>\n')}]),e.exports=n},function(e,t,n){var r=n(425);"string"==typeof r&&(r=[[e.i,r,""]]);var i={hmr:!0,transform:void 0,insertInto:void 0};n(40)(r,i);r.locals&&(e.exports=r.locals)},function(e,t,n){(e.exports=n(39)(!1)).push([e.i,"\n.unselectable{\n -webkit-user-select: none;\n -moz-user-select: none;\n -ms-user-select: none;\n user-select: none;\n}\n",""])},function(e,t,n){"use strict";const r=n(9),i=n(427);n(31);n(206),r.module("dbt").directive("docsSearch",["$sce","project",function(e,t){return{scope:{query:"=",results:"=",onSelect:"&"},replace:!0,templateUrl:i,link:function(n){n.max_results=20,n.show_all=!1,n.max_results_columns=3,n.limit_columns={},n.checkboxStatus={show_names:!1,show_descriptions:!1,show_columns:!1,show_code:!1,show_tags:!1},n.limit_search=function(e,t,r){return t<n.max_results||n.show_all},n.getState=function(e){return"dbt."+e.resource_type},n.getModelName=function(e){return"source"==e.resource_type?e.source_name+"."+e.name:"macro"==e.resource_type?e.package_name+"."+e.name:e.name};n.$watchGroup(["query","checkboxStatus.show_names","checkboxStatus.show_descriptions","checkboxStatus.show_columns","checkboxStatus.show_code","checkboxStatus.show_tags"],(function(){n.results=function(e,t){if(!_.some(_.values(t)))return e;let n=[],r=[];const{show_names:i,show_descriptions:o,show_columns:a,show_code:s,show_tags:l}=t;return _.each(e,(function(e){_.each(e.matches,(function(t){r.includes(e.model.unique_id)||(i&&"name"===t.key||o&&"description"===t.key||a&&"columns"===t.key||s&&"raw_sql"===t.key||l&&"tags"===t.key)&&(r.push(e.model.unique_id),n.push(e))}))})),n}(t.search(n.query),n.checkboxStatus)})),n.shorten=function(e){if(null!=e&&e.length>0){let t=e.replace(/\s+/g," "),r=t.search(n.query),i=r-75<0?0:r-75,o=r+75>t.length?t.length:r+75;return"..."+t.substring(i,o)+"..."}return e},n.highlight=function(t){return n.query&&t?e.trustAsHtml(t.replace(new RegExp(n.query,"gi"),'<span class="search-result-match">$&</span>')):e.trustAsHtml(t)},n.$watch("query",(function(e,t){0==e.length&&(n.show_all=!1,n.limit_columns={})})),n.columnFilter=function(e){var t=[];for(var r in e)-1!=r.toLowerCase().indexOf(n.query.toLowerCase())&&t.push(r);return t},n.limitColumns=function(e){return void 0!==n.limit_columns[e]?n.limit_columns[e]:3}}}}])},function(e,t){var n="/components/search/search.html";window.angular.module("ng").run(["$templateCache",function(e){e.put(n,'<div class="app-scroll">\n <style>\n .search-result-match {\n background-color: #eee;\n }\n .spacing {\n margin-right: 0.25em;\n }\n .sub-results {\n margin-left: 36px;\n }\n </style>\n <div class="app-title">\n <div class="app-frame app-pad">\n <h1>\n <span class="break">{{ query }}</span>\n <small><span>{{ results.length }}</span> search results</small>\n </h1>\n <input type="checkbox" id="name" ng-model="checkboxStatus.show_names" ng-click="filterResults(results, checkboxStatus)" style = "margin-left:10px;margin-right:5px">\n <label for="name" style="margin-right:25px">Name</label> \n <input type="checkbox" id="desc" ng-model="checkboxStatus.show_descriptions" ng-click = "filterResults(results, checkboxStatus)" style = "margin-right:5px">\n <label for="desc" style="margin-right:25px;">Description</label> \n <input type="checkbox" id="column" ng-model="checkboxStatus.show_columns" ng-click = "filterResults(results, checkboxStatus)" style = "margin-right:5px">\n <label for="column" style="margin-right:25px;">Column</label> \n <input type="checkbox" id="code" ng-model="checkboxStatus.show_code" ng-click = "filterResults(results, checkboxStatus)" style = "margin-right:5px">\n <label for="code" style="margin-right:15px;">SQL</label>\n <input type="checkbox" id="code" ng-model="checkboxStatus.show_tags" ng-click = "filterResults(results, checkboxStatus)" style = "margin-right:5px">\n <label for="code" style="margin-right:15px;">Tags</label>\n </div>\n </div>\n <div class="app-details">\n <div class="app-frame app-pad">\n <div class="results">\n <div ng-repeat="result in results | filter:limit_search | orderBy:\'overallWeight\':true track by result.model.unique_id"\n data-ui-state="getState(result.model)" data-ui-state-params="{unique_id: result.model.unique_id}"\n ng-click="onSelect()"\n class="result search-result a">\n <div class="result-content">\n <div class="result-icn">\n <svg class="icn "><use xlink:href="#icn-doc"></use></svg>\n </div>\n <div class="result-body">\n <h4 class="a">\n <span ng-bind-html="highlight(getModelName(result.model))"></span>\n <small>{{result.model.resource_type}}</small>\n </h4>\n <p ng-bind-html="highlight(shorten(result.model.description))"></p>\n </div>\n </div>\n <div class="sub-results" ng-show="query.length > 0">\n <span ng-repeat="column in columnFilter(result.model.columns) | limitTo:limitColumns(result.model.unique_id)">\n <span ng-show="$first === true">columns:</span>\n <span ng-bind-html="highlight(column + \',\')" ng-show="$last === false"></span>\n <span ng-bind-html="highlight(column)" ng-show="$last === true"></span>\n </span>\n <a\n ng-show="columnFilter(result.model.columns).length > max_results_columns && !limit_columns[result.model.unique_id]"\n ng-click="$event.stopPropagation(); limit_columns[result.model.unique_id] = 100">Show {{ columnFilter(result.model.columns).length - max_results_columns }} more</a>\n </div>\n <div class="sub-results" ng-show="query.length > 0">\n <span>\n <span ng-bind-html = "highlight(shorten(result.model[\'raw_sql\']))"></span>\n </span>\n </div>\n <div class="sub-results" ng-show="query.length > 0">\n <span ng-repeat="tag in result.model.tags">\n <span ng-show="$first === true">tags:</span>\n <span ng-bind-html="highlight(tag + \',\')" ng-show="$last === false"></span>\n <span ng-bind-html="highlight(tag)" ng-show="$last === true"></span>\n </span>\n </div>\n </div>\n <a\n ng-show="results.length >= max_results && !show_all"\n ng-click="show_all = true">Show {{ results.length - max_results }} more</a>\n </div>\n </div>\n </div>\n</div>\n')}]),e.exports=n},function(e,t,n){"use strict";const r=n(429);n(430);const i=n(21);angular.module("dbt").directive("tableDetails",["$sce","$filter",function(e,t){return{scope:{model:"=",extras:"=",exclude:"<"},templateUrl:r,link:function(e){function n(e,t){if(0==e)return"0 bytes";if(e<1&&(e*=1e6),isNaN(parseFloat(e))||!isFinite(e))return"-";void 0===t&&(t=0);var n=Math.floor(Math.log(e)/Math.log(1024));return(e/Math.pow(1024,Math.floor(n))).toFixed(t)+" "+["bytes","KB","MB","GB","TB","PB"][n]}function r(e,n){return void 0===n&&(n=2),t("number")(100*e,n)+"%"}function o(e,n){return void 0===n&&(n=0),t("number")(e,n)}e.details=[],e.extended=[],e.exclude=e.exclude||[],e.meta=null,e._show_expanded=!1,e.show_expanded=function(t){return void 0!==t&&(e._show_expanded=t),e._show_expanded},e.hasData=function(e){return!(!e||i.isEmpty(e))&&(1!=e.length||0!=e[0].include)},e.$watch("model",(function(t,a){i.property(["metadata","type"])(t);var s,l,c,u=t.hasOwnProperty("sources")&&null!=t.sources[0]?t.sources[0].source_meta:null;if(e.meta=t.meta||u,e.details=function(e){var t,n,r=!e.metadata,o=e.metadata||{};t=e.database?e.database+".":"",n=r?void 0:"source"==e.resource_type?t+e.schema+"."+e.identifier:t+e.schema+"."+e.alias;var a,s=[{name:"Owner",value:o.owner},{name:"Type",value:r?void 0:(a=o.type,"BASE TABLE"==a?{type:"table",name:"table"}:"LATE BINDING VIEW"==a?{type:"view",name:"late binding view"}:{type:a.toLowerCase(),name:a.toLowerCase()}).name},{name:"Package",value:e.package_name},{name:"Relation",value:n}];return i.filter(s,(function(e){return void 0!==e.value}))}(t),e.extended=(s=t.stats,l={rows:o,row_count:o,num_rows:o,max_varchar:o,pct_used:r,size:n,bytes:n,num_bytes:n},c=i.sortBy(i.values(s),"label"),i.map(c,(function(e){var t=i.clone(e),n=l[e.id];return n&&(t.value=n(e.value),t.label=e.label.replace("Approximate","~"),t.label=e.label.replace("Utilization","Used")),t}))),e.extras){var d=i.filter(e.extras,(function(e){return void 0!==e.value&&null!==e.value}));e.details=e.details.concat(d)}e.show_extended=i.where(e.extended,{include:!0}).length>0})),e.queryTag=function(t){e.$emit("query",t)}}}}])},function(e,t){var n="/components/table_details/table_details.html";window.angular.module("ng").run(["$templateCache",function(e){e.put(n,'<div class="section-content">\n <h6>Details</h6>\n <div class="panel">\n <div class="panel-body">\n <div class="details">\n <div class="details-content">\n <div class="detail-group" ng-if="hasData(meta)">\n <div class="detail-body">\n <dl class="detail"\n ng-repeat="(k, v) in meta">\n <dt class="detail-label">{{ k }}</dt>\n <dd class="detail-value">{{ v }}</dd>\n </dl>\n </div>\n </div>\n <div class="detail-group">\n <div class="detail-body">\n <dl class=\'detail\' ng-if="model.tags != undefined && exclude.indexOf(\'tags\') == -1">\n <dt class="detail-label">Tags</dt>\n <dd ng-if="model.tags.length > 0" class="detail-value">\n <span ng-repeat="tag in model.tags"><code><a ng-click=queryTag(tag)>{{ tag }}</a></code> </span>\n </dd>\n <dd ng-if="model.tags.length == 0" class="detail-value">untagged</dd>\n </dl>\n <dl class="detail"\n ng-repeat="item in details">\n <dt class="detail-label">{{ item.name }}</dt>\n <dd class="detail-value">{{ item.value }}</dd>\n </dl>\n </div>\n </div>\n <div class="detail-group" ng-if="hasData(extended)">\n <div class="detail-body">\n <dl class="detail"\n ng-repeat="item in extended"\n ng-if="item.include">\n <dt data-toggle="tooltip" title="{{ item.description }}" class="detail-label">{{ item.label }}</dt>\n <dd class="detail-value">{{ item.value }}</dd>\n </dl>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n</div>\n')}]),e.exports=n},function(e,t,n){var r=n(431);"string"==typeof r&&(r=[[e.i,r,""]]);var i={hmr:!0,transform:void 0,insertInto:void 0};n(40)(r,i);r.locals&&(e.exports=r.locals)},function(e,t,n){(e.exports=n(39)(!1)).push([e.i,"\n\n.details-content {\n table-layout: fixed;\n}\n\n.detail-body {\n white-space: nowrap;\n overflow-x: scroll;\n}\n",""])},function(e,t,n){"use strict";const r=n(433),i=n(21);angular.module("dbt").directive("columnDetails",["project",function(e){return{scope:{model:"="},templateUrl:r,link:function(t){t.has_test=function(e,t){return-1!=i.pluck(e.tests,"short").indexOf(t)},t.has_more_info=function(e){var t=e.tests||[],n=e.description||"",r=e.meta||{};return t.length||n.length||!i.isEmpty(r)},t.toggle_column_expanded=function(e){t.has_more_info(e)&&(e.expanded=!e.expanded)},t.getState=function(e){return"dbt."+e.resource_type},t.get_col_name=function(t){return e.caseColumn(t)},t.get_columns=function(e){var t=i.chain(e.columns).values().sortBy("index").value();return i.each(t,(function(e,t){e.index=t})),t}}}}])},function(e,t){var n="/components/column_details/column_details.html";window.angular.module("ng").run(["$templateCache",function(e){e.put(n,'<div class="panel">\n <div class="panel-body">\n <div ng-if="_.isEmpty(model.columns)">\n Column information is not available for this seed\n </div>\n <div class="table-responsive"\n style="max-height: 800px; overflow-y: scroll;"\n ng-if="!_.isEmpty(model.columns)">\n <table class="table table-borderless table-hover">\n <thead>\n <tr>\n <th style="background-color: white; position: sticky; top: 0; z-index: 1;">Column</th>\n <th style="background-color: white; position: sticky; top: 0; z-index: 1;">Type</th>\n <th style="background-color: white; position: sticky; top: 0; z-index: 1;">Description</th>\n <th style="width: 1px; background-color: white; position: sticky; top: 0; z-index: 1;">Tests</th>\n <th style="width: 1px; background-color: white; position: sticky; top: 0; z-index: 1;" class=\'text-center\'>More?</th>\n </tr>\n </thead>\n <tbody>\n <tr\n ng-repeat-start="column in get_columns(model) track by column.index"\n ng-click="toggle_column_expanded(column)"\n class="column-row"\n ng-class="{\'column-row-selected\': column.expanded}"\n ng-style="{cursor: has_more_info(column) ? \'pointer\' : \'auto\'}">\n <td>\n <div>\n <span class=\'text-dark\'>{{ get_col_name(column.name) }}</span>\n </div>\n </td>\n <td>\n <span class=\'text-dark\'>{{ column.type }}</p>\n </td>\n <td style="text-overflow: ellipsis; overflow-x: hidden; white-space: nowrap; max-width: 1px;">\n <span ng-show="!column.expanded">{{ column.description }}</span>\n </td>\n <td>\n <span class="text-light" ng-show="!column.expanded">\n <span data-toggle="tooltip" title="Unique" ng-if="has_test(column, \'U\')">U</span>\n <span data-toggle="tooltip" title="Not Null" ng-if="has_test(column, \'N\')">N</span>\n <span data-toggle="tooltip" title="Foreign Key" ng-if="has_test(column, \'F\')">F</span>\n <span data-toggle="tooltip" title="Accepted Values" ng-if="has_test(column, \'A\')">A</span>\n <span data-toggle="tooltip" title="Custom Test" ng-if="has_test(column, \'+\')">+</span>\n </span>\n </td>\n <td class=\'text-center\'>\n <span class=\'text-light\' ng-show="has_more_info(column)">\n <span ng-if="column.expanded">\n <svg class="icn"><use xlink:href="#icn-up"></use></svg>\n </span>\n <span ng-if="!column.expanded">\n <svg class="icn"><use xlink:href="#icn-right"></use></svg>\n </span>\n </span>\n </td>\n </tr>\n <tr ng-repeat-end ng-show="column.expanded" style="background-color: white; padding: 10px">\n <td colspan="5" class="column-expanded">\n <div style="padding: 5px 20px">\n <div ng-show="column.meta">\n <h5>Details</h5>\n <div class="detail-group" style="padding-bottom: 0">\n <div class="detail-body" style="padding-left: 0">\n <dl class="detail"\n ng-style="{\'padding-left\': $index == 0 ? 0 : \'auto\'}"\n ng-repeat="(k, v) in column.meta">\n <dt class="detail-label">{{ k }}</dt>\n <dd class="detail-value">{{ v }}</dd>\n </dl>\n </div>\n </div>\n </div>\n\n <div style="margin-bottom: 15px" ng-if="column.description.length">\n <h5>Description</h5>\n <span marked="column.description"></span>\n </div>\n\n <div ng-show="column.tests && column.tests.length" style="margin-bottom: 15px">\n <h5>Generic Tests</h5>\n <ul class="list-unstyled" style="margin-top: 2px">\n <li ng-repeat="test in column.tests" ng-switch on="test.short" class=\'text-light\'>\n <span ng-switch-when="F">\n Foreign Key\n <span ng-if="test.fk_model.unique_id">\n <a data-ui-state="getState(test.fk_model)"\n data-ui-state-params="{unique_id: test.fk_model.unique_id}">\n to {{ test.fk_model.name }}\n </a> on <code>{{ test.fk_field }}</code>\n </span>\n </span>\n <span ng-switch-when="P">Primary Key</span>\n <span ng-switch-when="U">Unique</span>\n <span ng-switch-when="N">Not Null</span>\n <span ng-switch-default>{{ test.label }}</span>\n </li>\n </ul>\n </div>\n </div>\n </td>\n </tr>\n </tbody>\n </table>\n </div>\n </div>\n</div>\n')}]),e.exports=n},function(e,t,n){"use strict";const r=n(435);n(31),n(436);angular.module("dbt").directive("codeBlock",["code","$timeout",function(e,t){return{scope:{versions:"=",default:"<"},restrict:"E",templateUrl:r,link:function(n,r){n.selected_version=n.default,n.source=null,n.setSelected=function(r){n.selected_version=r,n.source=n.versions[r]||"";const i=n.source.trim();n.highlighted=e.highlight(i),t((function(){Prism.highlightAll()}))},n.titleCase=function(e){return e.charAt(0).toUpperCase()+e.substring(1)},n.copied=!1,n.copy_to_clipboard=function(){e.copy_to_clipboard(n.source),n.copied=!0,setTimeout((function(){n.$apply((function(){n.copied=!1}))}),1e3)},n.$watch("versions",(function(e,t){if(e)if(n.default)n.setSelected(n.default);else{var r=Object.keys(n.versions);r.length>0&&n.setSelected(r[0])}}),!0)}}}])},function(e,t){var n="/components/code_block/code_block.html";window.angular.module("ng").run(["$templateCache",function(e){e.put(n,'<h6>Code</h6>\n<div class="panel">\n <div class="panel-body">\n <ul class="nav nav-tabs">\n <li\n ng-repeat="(version_name, version) in versions"\n ng-class="{active: version_name == selected_version}">\n <a ng-click="setSelected(version_name)">{{ titleCase(version_name) }}</a>\n </li>\n <li class=\'nav-pull-right\'></li>\n <li>\n <a class=\'unselectable\'\n ng-click="copy_to_clipboard()">{{ copied ? \'copied\' : \'copy to clipboard\' }}</a>\n </li>\n </ul>\n <div style="margin-top: 1px">\n <pre style="background-color: white"\n class=\'code line-numbers\'><code class="source-code highlight language-sql" ng-bind-html="highlighted"></code></pre>\n </div>\n </div>\n</div>\n')}]),e.exports=n},function(e,t,n){var r=n(437);"string"==typeof r&&(r=[[e.i,r,""]]);var i={hmr:!0,transform:void 0,insertInto:void 0};n(40)(r,i);r.locals&&(e.exports=r.locals)},function(e,t,n){(e.exports=n(39)(!1)).push([e.i,"pre.code {\n border: none !important;\n overflow-y: visible !important;\n overflow-x: scroll !important;\n padding-bottom: 10px;\n}\n\npre.code code {\n font-family: Monaco, monospace !important;\n font-weight: 400 !important;\n}\n\n.line-numbers-rows {\n border: none !important;\n}\n",""])},function(e,t,n){"use strict";const r=n(439);angular.module("dbt").directive("macroArguments",[function(){return{scope:{macro:"="},templateUrl:r,link:function(e){_.each(e.macro.arguments,(function(e){e.expanded=!1}))}}}])},function(e,t){var n="/components/macro_arguments/index.html";window.angular.module("ng").run(["$templateCache",function(e){e.put(n,'<style>\n.arg-header {\n background-color: white;\n position: sticky;\n top: 0;\n z-index: 1;\n}\n\n</style>\n\n<div class="panel">\n <div class="panel-body">\n <div ng-if="macro.arguments.length == 0">\n Details are not available for this macro\n </div>\n <div\n ng-if="macro.arguments.length > 0"\n class="table-responsive"\n style="max-height: 800px; overflow-y: scroll;">\n <table class="table table-borderless table-hover">\n <thead>\n <tr>\n <th class="arg-header">Argument</th>\n <th class="arg-header">Type</th>\n <th class="arg-header">Description</th>\n <th style="width: 1px;" class=\'text-center\'>More?</th>\n </tr>\n </thead>\n <tbody>\n <tr ng-repeat-start="arg in macro.arguments"\n ng-click="arg.expanded = !arg.expanded"\n ng-class="{\'column-row-selected\': arg.expanded}"\n ng-style="{cursor: arg.description ? \'pointer\' : \'auto\'}"\n class="column-row">\n <td>\n <div>\n <span class=\'text-dark\'>{{ arg.name }}</span>\n </div>\n </td>\n <td>\n <span class=\'text-dark\'>{{ arg.type }}</p>\n </td>\n <td style="text-overflow: ellipsis; overflow-x: hidden; white-space: nowrap; max-width: 1px;">\n <span ng-show="!arg.expanded">{{ arg.description }}</span>\n </td>\n <td class=\'text-center\'>\n <span class=\'text-light\' ng-show="arg.description">\n <span ng-if="arg.expanded">\n <svg class="icn"><use xlink:href="#icn-up"></use></svg>\n </span>\n <span ng-if="!arg.expanded">\n <svg class="icn"><use xlink:href="#icn-right"></use></svg>\n </span>\n </span>\n </td>\n </tr>\n <tr ng-repeat-end\n ng-show="arg.expanded"\n style="background-color: white; padding: 10px">\n <td colspan="4" class="column-expanded">\n <div style="padding: 5px 20px">\n <div style="margin-bottom: 15px">\n <h5>Description</h5>\n <span marked="arg.description"></span>\n </div>\n </div>\n </td>\n </tr>\n </tbody>\n </table>\n </div>\n </div>\n</div>\n')}]),e.exports=n},function(e,t,n){"use strict";const r=n(441);angular.module("dbt").directive("referenceList",["$state",function(e){return{scope:{references:"=",node:"="},restrict:"E",templateUrl:r,link:function(t){t.selected_type=null,t.setType=function(e){t.selected_type=e,t.nodes=t.references[t.selected_type]},t.getNodeUrl=function(t){var n="dbt."+t.resource_type;return e.href(n,{unique_id:t.unique_id,"#":null})},t.mapResourceType=function(e){return"model"==e?"Models":"seed"==e?"Seeds":"test"==e?"Tests":"snapshot"==e?"Snapshots":"analysis"==e?"Analyses":"macro"==e?"Macros":"exposure"==e?"Exposures":"metric"==e?"Metrics":"Nodes"},t.$watch("references",(function(e){e&&_.size(e)>0?(t.selected_type=_.keys(e)[0],t.has_references=!0,t.nodes=t.references[t.selected_type]):t.has_references=!1}))}}}])},function(e,t){var n="/components/references/index.html";window.angular.module("ng").run(["$templateCache",function(e){e.put(n,'<div class="panel">\n <div class="panel-body" ng-if="!has_references">\n No resources reference this {{ node.resource_type }}\n </div>\n <div class="panel-body" ng-if="has_references">\n <ul class="nav nav-tabs">\n <li\n ng-repeat="(resource_type, nodes) in references"\n ng-class="{active: resource_type == selected_type}">\n <a ng-click="setType(resource_type)">\n {{ mapResourceType(resource_type) }}\n </a>\n </li>\n </ul>\n <div style="margin-top: 15px">\n <ul class=\'list-unstyled\'>\n <li ng-repeat="node in nodes">\n <a ng-href="{{ getNodeUrl(node) }}">{{ node.name }}</a>\n </li>\n </ul>\n <div>\n </div>\n</div>\n')}]),e.exports=n},function(e,t,n){n(443),n(445),n(446),n(447),n(448),n(449),n(450),n(451),n(452)},function(e,t,n){"use strict";const r=n(9),i=n(36);n(37),r.module("dbt").controller("ModelCtrl",["$scope","$state","project","code","$anchorScroll","$location",function(e,t,n,r,o,a){e.model_uid=t.params.unique_id,e.tab=t.params.tab,e.project=n,e.codeService=r,e.versions={},e.copied=!1,e.copy_to_clipboard=function(t){r.copy_to_clipboard(t),e.copied=!0,setTimeout((function(){e.$apply((function(){e.copied=!1}))}),1e3)},e.model={},n.ready((function(t){let n=t.nodes[e.model_uid];e.model=n,e.references=i.getReferences(t,n),e.referencesLength=Object.keys(e.references).length,e.parents=i.getParents(t,n),e.parentsLength=Object.keys(e.parents).length;e.versions={Source:e.model.raw_sql,Compiled:e.model.compiled_sql||"\n-- compiled SQL not found for this model\n"},setTimeout((function(){o()}),0)}))}])},function(e,t,n){(e.exports=n(39)(!1)).push([e.i,"\n.nav-tabs li.nav-pull-right {\n flex: 1 0 auto;\n text-align: right;\n}\n\ntr.column-row-selected {\n\n}\n\ntd.column-expanded{\n padding: 0px !important;\n}\n\ntd.column-expanded > div {\n padding: 5px 10px;\n margin-left: 20px;\n height: 100%;\n\n border-left: 1px solid #ccc !important;\n}\n",""])},function(e,t,n){"use strict";const r=n(9),i=n(36);n(37),r.module("dbt").controller("SourceCtrl",["$scope","$state","project","code","$anchorScroll","$location",function(e,t,n,r,o,a){e.model_uid=t.params.unique_id,e.project=n,e.codeService=r,e.extra_table_fields=[],e.versions={},e.model={},n.ready((function(t){let n=t.nodes[e.model_uid];e.model=n,e.references=i.getReferences(t,n),e.referencesLength=Object.keys(e.references).length,e.parents=i.getParents(t,n),e.parentsLength=Object.keys(e.parents).length,e.versions={"Sample SQL":r.generateSourceSQL(e.model)},e.extra_table_fields=[{name:"Loader",value:e.model.loader},{name:"Source",value:e.model.source_name}]}))}])},function(e,t,n){"use strict";const r=n(9),i=n(36);n(37),r.module("dbt").controller("SeedCtrl",["$scope","$state","project","code","$transitions","$anchorScroll","$location",function(e,t,n,r,o,a,s){e.model_uid=t.params.unique_id,e.tab=t.params.tab,e.project=n,e.codeService=r,e.versions={},e.model={},n.ready((function(t){let n=t.nodes[e.model_uid];e.model=n,e.references=i.getReferences(t,n),e.referencesLength=Object.keys(e.references).length,e.parents=i.getParents(t,n),e.parentsLength=Object.keys(e.parents).length,e.versions={"Example SQL":r.generateSourceSQL(e.model)}}))}])},function(e,t,n){"use strict";const r=n(9),i=n(36);n(37),r.module("dbt").controller("SnapshotCtrl",["$scope","$state","project","code","$anchorScroll","$location",function(e,t,n,r,o,a){e.model_uid=t.params.unique_id,e.tab=t.params.tab,e.project=n,e.codeService=r,e.versions={},e.model={},n.ready((function(t){let n=t.nodes[e.model_uid];e.model=n,e.references=i.getReferences(t,n),e.referencesLength=Object.keys(e.references).length,e.parents=i.getParents(t,n),e.parentsLength=Object.keys(e.parents).length;e.versions={Source:e.model.raw_sql,Compiled:e.model.compiled_sql||"Compiled SQL is not available for this snapshot"},setTimeout((function(){o()}),0)}))}])},function(e,t,n){"use strict";const r=n(9),i=n(36);n(37),r.module("dbt").controller("TestCtrl",["$scope","$state","project","code","$anchorScroll","$location",function(e,t,n,r,o,a){e.model_uid=t.params.unique_id,e.tab=t.params.tab,e.project=n,e.codeService=r,e.versions={},e.model={},n.ready((function(t){let n=t.nodes[e.model_uid];e.model=n,e.references=i.getReferences(t,n),e.referencesLength=Object.keys(e.references).length,e.parents=i.getParents(t,n),e.parentsLength=Object.keys(e.parents).length;e.versions={Source:e.model.raw_sql,Compiled:e.model.compiled_sql||"\n-- compiled SQL not found for this model\n"},setTimeout((function(){o()}),0)}))}])},function(e,t,n){"use strict";const r=n(9),i=n(21),o=n(36);n(37),r.module("dbt").controller("MacroCtrl",["$scope","$state","project","code","$transitions","$anchorScroll","$location",function(e,t,n,r,a,s,l){e.model_uid=t.params.unique_id,e.tab=t.params.tab,e.project=n,e.codeService=r,e.macro={},n.ready((function(t){let n=t.macros[e.model_uid];if(e.macro=n,e.references=o.getMacroReferences(t,n),e.referencesLength=Object.keys(e.references).length,e.parents=o.getMacroParents(t,n),e.parentsLength=Object.keys(e.parents).length,e.macro.is_adapter_macro){var r=t.metadata.adapter_type;e.versions=n.impls,n.impls[r]?e.default_version=r:n.impls.default?e.default_version="default":e.default_version=i.keys(n.impls)[0]}else e.default_version="Source",e.versions={Source:e.macro.macro_sql}}))}])},function(e,t,n){"use strict";const r=n(9),i=n(36);n(37),r.module("dbt").controller("AnalysisCtrl",["$scope","$state","project","code","$transitions","$anchorScroll","$location",function(e,t,n,r,o,a,s){e.model_uid=t.params.unique_id,e.project=n,e.codeService=r,e.default_version="Source",e.versions={Source:"",Compiled:""},e.model={},n.ready((function(t){let n=t.nodes[e.model_uid];e.model=n,e.references=i.getReferences(t,n),e.referencesLength=Object.keys(e.references).length,e.parents=i.getParents(t,n),e.parentsLength=Object.keys(e.parents).length,e.versions={Source:e.model.raw_sql,Compiled:e.model.compiled_sql}}))}])},function(e,t,n){"use strict";const r=n(9),i=n(36);n(37),r.module("dbt").controller("ReportCtrl",["$scope","$state","project","code","$anchorScroll","$location",function(e,t,n,r,o,a){e.model_uid=t.params.unique_id,e.project=n,e.codeService=r,e.extra_table_fields=[],e.versions={},e.exposure={},n.ready((function(t){let n=t.nodes[e.model_uid];e.exposure=n,e.parents=i.getParents(t,n),e.parentsLength=e.parents.length,e.extra_table_fields=[{name:"Maturity",value:e.exposure.maturity},{name:"Owner",value:e.exposure.owner.name},{name:"Owner email",value:e.exposure.owner.email}]}))}])},function(e,t,n){"use strict";const r=n(9),i=n(36);n(37),r.module("dbt").controller("ReportCtrl",["$scope","$state","project","code","$anchorScroll","$location",function(e,t,n,r,o,a){e.model_uid=t.params.unique_id,e.project=n,e.codeService=r,e.extra_table_fields=[],e.versions={},e.metric={},n.ready((function(t){let n=t.nodes[e.model_uid];e.metric=n,e.parents=i.getParents(t,n),e.parentsLength=e.parents.length}))}])},function(e,t,n){"use strict";n(9).module("dbt").controller("GraphCtrl",["$scope","$state","$window","graph","project","selectorService",function(e,t,n,r,i,o){function a(e){return e&&"source"==e.resource_type?"source:"+e.source_name+"."+e.name:e&&"exposure"==e.resource_type?"exposure:"+e.name:e&&"metric"==e.resource_type?"metric:"+e.name:e.name?e.name:"*"}e.graph=r.graph,e.graphService=r,e.graphRendered=function(e){r.setGraphReady(e)},e.$watch((function(){return t.params.unique_id}),(function(e,t){e&&e!=t&&i.find_by_id(e,(function(e){e&&("sidebar"==r.orientation?r.showVerticalGraph(a(e),!1):r.showFullGraph(a(e)))})),e||o.clearViewNode()}))}])},function(e,t,n){"use strict";const r=n(9),i=n(21),o=n(31),a=n(455);n(456),n(206),n(463),n(464),n(467),n(471),r.module("dbt").controller("MainController",["$scope","$route","$state","project","graph","selectorService","trackingService","locationService","$transitions",function(e,t,n,r,s,l,c,u,d){function f(t){e.model_uid=t;var n=r.node(t);n&&l.resetSelection(n)}function p(e){e&&setTimeout((function(){var t=o("*[data-nav-unique-id='"+e+"']");t.length&&t[0].scrollIntoView&&t[0].scrollIntoView({behavior:"smooth",block:"center",inline:"center"})}),1)}e.tree={database:{},project:{},sources:{}},e.search={query:"",results:[],is_focused:!1},e.logo=a,e.model_uid=null,e.project={},o("body").bind("keydown",(function(e){"t"==event.key&&"INPUT"!=event.target.tagName&&(console.log("Opening search"),o("#search").focus(),event.preventDefault())})),e.onSearchFocus=function(t,n){e.search.is_focused=n},e.clearSearch=function(){e.search.is_focused=!1,e.search.query="",e.search.results=[],o("#search").blur()},e.$on("clearSearch",(function(){e.clearSearch()})),e.$on("query",(function(t,n){e.search.is_focused=!0,e.search.query=n})),e.onSearchKeypress=function(t){console.log(t),"Escape"==t.key&&(e.clearSearch(),t.preventDefault())},r.getModelTree(n.params.unique_id,(function(t){e.tree.database=t.database,e.tree.project=t.project,e.tree.sources=t.sources,e.tree.exposures=t.exposures,e.tree.metrics=t.metrics,setTimeout((function(){p(e.model_uid)}))})),d.onSuccess({},(function(t,n){var i=t.router.globals.params,o=l.getViewNode(),a=o?o.unique_id:null,s=i.unique_id,u=!0;if(t.from().name==t.to().name&&a==s&&(u=!1),u&&i.unique_id){var d=r.updateSelected(i.unique_id);e.tree.database=d.database,e.tree.project=d.project,e.tree.sources=d.sources,e.search.query="",console.log("updating selected model to: ",i),f(i.unique_id),setTimeout((function(){p(i.unique_id)}))}u&&c.track_pageview()})),e.$watch("search.query",(function(t){e.search.results=function(t){if(""===e.search.query)return t;let n={name:10,tags:5,description:3,raw_sql:2,columns:1};return i.each(t,(function(t){t.overallWeight=0,i.each(Object.keys(n),(function(r){if(null!=t.model[r]){let o=0,a=t.model[r],s=e.search.query.toLowerCase();if("columns"===r)i.each(a,(function(e){let t=e.name.toLowerCase(),n=0;for(;-1!=n;)n=t.indexOf(s,n),-1!=n&&(o++,n++)}));else if("tags"===r)i.each(a,(function(e){let t=e.toLowerCase(),n=0;for(;-1!=n;)n=t.indexOf(s,n),-1!=n&&(o++,n++)}));else{a=a.toLowerCase();let e=0;for(;-1!=e;)e=a.indexOf(s,e),-1!=e&&(o++,e++)}t.overallWeight+=o*n[r]}}))})),t}(r.search(t))})),r.init(),r.ready((function(t){e.project=t,e.search.results=r.search("");var o=i.unique(i.pluck(i.values(t.nodes),"package_name")),a=[null];i.each(t.nodes,(function(e){var t=e.tags;a=i.union(a,t)})),l.init({packages:o,tags:a}),f(n.params.unique_id);var d=u.parseState(n.params);d.show_graph&&s.ready((function(){i.assign(l.selection.dirty,d.selected);var e=l.updateSelection();s.updateGraph(e)}));var p=t.metadata||{};c.init({track:p.send_anonymous_usage_stats,project_id:p.project_id})}))}])},function(e,t){e.exports="data:image/svg+xml,%3Csvg width='242' height='90' viewBox='0 0 242 90' fill='none' xmlns='http://www.w3.org/2000/svg'%3E %3Cpath d='M240.384 74.5122L239.905 75.8589H239.728L239.249 74.5156V75.8589H238.941V74.0234H239.324L239.816 75.3872L240.309 74.0234H240.691V75.8589H240.384V74.5122ZM238.671 74.3003H238.169V75.8589H237.858V74.3003H237.352V74.0234H238.671V74.3003Z' fill='%23262A38'/%3E %3Cpath d='M154.123 13.915V75.3527H141.672V69.0868C140.37 71.2839 138.499 73.0742 136.22 74.2134C133.779 75.434 131.012 76.085 128.246 76.085C124.828 76.1664 121.41 75.1899 118.562 73.2369C115.633 71.2839 113.354 68.5986 111.889 65.425C110.262 61.7631 109.448 57.8572 109.529 53.8698C109.448 49.8825 110.262 45.9765 111.889 42.3961C113.354 39.3038 115.633 36.6185 118.481 34.7469C121.41 32.8753 124.828 31.9801 128.246 32.0615C130.931 32.0615 133.616 32.6311 135.976 33.8517C138.255 34.991 140.126 36.6999 141.428 38.8156V18.0651L154.123 13.915ZM139.15 63.2279C140.777 61.1121 141.672 58.0199 141.672 54.0326C141.672 50.0452 140.859 47.0344 139.15 44.9187C137.441 42.8029 134.755 41.5823 131.989 41.6637C129.222 41.5009 126.537 42.7215 124.746 44.8373C123.038 46.953 122.142 49.9639 122.142 53.8698C122.142 57.8572 123.038 60.9494 124.746 63.1465C126.455 65.3436 129.222 66.5642 131.989 66.4828C135.081 66.4828 137.522 65.3436 139.15 63.2279Z' fill='%23262A38'/%3E %3Cpath d='M198.635 34.6655C201.564 36.5371 203.843 39.2225 205.226 42.3147C206.853 45.8952 207.667 49.8011 207.586 53.7885C207.667 57.7758 206.853 61.7632 205.226 65.3436C203.761 68.5172 201.483 71.2026 198.553 73.1556C195.705 75.0272 192.287 76.0037 188.87 75.9223C186.103 76.0037 183.336 75.3527 180.895 74.0507C178.617 72.9114 176.745 71.1212 175.524 68.9241V75.2713H162.993V18.0651L175.606 13.915V38.9783C176.826 36.7812 178.698 34.991 180.976 33.8517C183.418 32.5498 186.103 31.8988 188.87 31.9801C192.287 31.8988 195.705 32.8753 198.635 34.6655ZM192.45 63.1465C194.159 60.9494 194.973 57.8572 194.973 53.7885C194.973 49.8825 194.159 46.8716 192.45 44.7559C190.741 42.6402 188.381 41.5823 185.289 41.5823C182.523 41.4196 179.837 42.6402 178.047 44.8373C176.338 47.0344 175.524 50.0452 175.524 53.9512C175.524 57.9386 176.338 61.0308 178.047 63.1465C179.756 65.3436 182.441 66.5642 185.289 66.4015C188.056 66.5642 190.741 65.3436 192.45 63.1465Z' fill='%23262A38'/%3E %3Cpath d='M225 42.4774V58.915C225 61.2749 225.651 62.9838 226.791 64.0416C228.093 65.1809 229.801 65.7505 231.592 65.6691C232.975 65.6691 234.44 65.425 235.742 65.0995V74.8644C233.382 75.6782 230.941 76.085 228.499 76.0037C223.292 76.0037 219.304 74.5389 216.537 71.6094C213.771 68.68 212.387 64.5299 212.387 59.1592V23.1103L225 19.0416V33.038H235.742V42.4774H225Z' fill='%23262A38'/%3E %3Cpath d='M86.1754 3.74322C88.2911 5.77758 89.6745 8.46293 90 11.3924C90 12.613 89.6745 13.4268 88.9421 14.9729C88.2098 16.519 79.1772 32.1429 76.4919 36.4557C74.9458 38.9783 74.132 41.9892 74.132 44.9186C74.132 47.9295 74.9458 50.859 76.4919 53.3816C79.1772 57.6944 88.2098 73.3996 88.9421 74.9457C89.6745 76.4919 90 77.2242 90 78.4448C89.6745 81.3743 88.3725 84.0597 86.2568 86.0127C84.2224 88.1284 81.5371 89.5118 78.689 89.7559C77.4684 89.7559 76.6546 89.4304 75.1899 88.698C73.7251 87.9656 57.7758 79.1772 53.4629 76.4919C53.1374 76.3291 52.8119 76.085 52.4051 75.9222L31.085 63.3092C31.5732 67.3779 33.3635 71.2839 36.2929 74.132C36.8626 74.7016 37.4322 75.1899 38.0832 75.6781C37.5949 75.9222 37.0253 76.1664 36.5371 76.4919C32.2242 79.1772 16.519 88.2098 14.9729 88.9421C13.4268 89.6745 12.6944 90 11.3924 90C8.46293 89.6745 5.77758 88.3725 3.82459 86.2568C1.70886 84.2224 0.325497 81.5371 0 78.6076C0.0813743 77.387 0.406872 76.1664 1.05787 75.1085C1.79024 73.5624 10.8228 57.8571 13.5081 53.5443C15.0542 51.0217 15.868 48.0922 15.868 45.0814C15.868 42.0705 15.0542 39.141 13.5081 36.6184C10.8228 32.1429 1.70886 16.4376 1.05787 14.8915C0.406872 13.8336 0.0813743 12.613 0 11.3924C0.325497 8.46293 1.62749 5.77758 3.74322 3.74322C5.77758 1.62749 8.46293 0.325497 11.3924 0C12.613 0.0813743 13.8336 0.406872 14.9729 1.05787C16.2749 1.62749 27.7486 8.30018 33.8517 11.8807L35.2351 12.6944C35.7233 13.0199 36.1302 13.264 36.4557 13.4268L37.1067 13.8336L58.8336 26.6908C58.3454 21.8083 55.8228 17.3327 51.9168 14.3219C52.4051 14.0778 52.9747 13.8336 53.4629 13.5081C57.7758 10.8228 73.481 1.70886 75.0271 1.05787C76.085 0.406872 77.3056 0.0813743 78.6076 0C81.4557 0.325497 84.1411 1.62749 86.1754 3.74322ZM46.1392 50.7776L50.7776 46.1392C51.4286 45.4882 51.4286 44.5118 50.7776 43.8608L46.1392 39.2224C45.4882 38.5714 44.5118 38.5714 43.8608 39.2224L39.2224 43.8608C38.5714 44.5118 38.5714 45.4882 39.2224 46.1392L43.8608 50.7776C44.4304 51.3472 45.4882 51.3472 46.1392 50.7776Z' fill='%23FF694A'/%3E %3C/svg%3E"},function(e,t,n){"use strict";n.r(t);var r=n(115),i=n.n(r);n(457),n(458),n(459),n(461);const o=n(9),a=(n(31),n(21));window.Prism=i.a,o.module("dbt").factory("code",["$sce",function(e){var t={copied:!1,highlight:function(t){var n=i.a.highlight(t,i.a.languages.sql,"sql");return e.trustAsHtml(n)},copy_to_clipboard:function(e){var t=document.createElement("textarea");t.value=e,t.setAttribute("readonly",""),t.style.position="absolute",t.style.left="-9999px",document.body.appendChild(t),t.select(),document.execCommand("copy"),document.body.removeChild(t)},generateSourceSQL:function(e){var t=["select"],n=a.size(e.columns),r=a.keys(e.columns);a.each(r,(function(e,r){var i=" "+e;r+1!=n&&(i+=","),t.push(i)}));var i=[e.database,e.schema,e.identifier||e.alias||e.name].join(".");return t.push("from "+i),t.join("\n")}};return t}])},function(e,t){Prism.languages.sql={comment:{pattern:/(^|[^\\])(?:\/\*[\s\S]*?\*\/|(?:--|\/\/|#).*)/,lookbehind:!0},variable:[{pattern:/@(["'`])(?:\\[\s\S]|(?!\1)[^\\])+\1/,greedy:!0},/@[\w.$]+/],string:{pattern:/(^|[^@\\])("|')(?:\\[\s\S]|(?!\2)[^\\]|\2\2)*\2/,greedy:!0,lookbehind:!0},function:/\b(?:AVG|COUNT|FIRST|FORMAT|LAST|LCASE|LEN|MAX|MID|MIN|MOD|NOW|ROUND|SUM|UCASE)(?=\s*\()/i,keyword:/\b(?:ACTION|ADD|AFTER|ALGORITHM|ALL|ALTER|ANALYZE|ANY|APPLY|AS|ASC|AUTHORIZATION|AUTO_INCREMENT|BACKUP|BDB|BEGIN|BERKELEYDB|BIGINT|BINARY|BIT|BLOB|BOOL|BOOLEAN|BREAK|BROWSE|BTREE|BULK|BY|CALL|CASCADED?|CASE|CHAIN|CHAR(?:ACTER|SET)?|CHECK(?:POINT)?|CLOSE|CLUSTERED|COALESCE|COLLATE|COLUMNS?|COMMENT|COMMIT(?:TED)?|COMPUTE|CONNECT|CONSISTENT|CONSTRAINT|CONTAINS(?:TABLE)?|CONTINUE|CONVERT|CREATE|CROSS|CURRENT(?:_DATE|_TIME|_TIMESTAMP|_USER)?|CURSOR|CYCLE|DATA(?:BASES?)?|DATE(?:TIME)?|DAY|DBCC|DEALLOCATE|DEC|DECIMAL|DECLARE|DEFAULT|DEFINER|DELAYED|DELETE|DELIMITERS?|DENY|DESC|DESCRIBE|DETERMINISTIC|DISABLE|DISCARD|DISK|DISTINCT|DISTINCTROW|DISTRIBUTED|DO|DOUBLE|DROP|DUMMY|DUMP(?:FILE)?|DUPLICATE|ELSE(?:IF)?|ENABLE|ENCLOSED|END|ENGINE|ENUM|ERRLVL|ERRORS|ESCAPED?|EXCEPT|EXEC(?:UTE)?|EXISTS|EXIT|EXPLAIN|EXTENDED|FETCH|FIELDS|FILE|FILLFACTOR|FIRST|FIXED|FLOAT|FOLLOWING|FOR(?: EACH ROW)?|FORCE|FOREIGN|FREETEXT(?:TABLE)?|FROM|FULL|FUNCTION|GEOMETRY(?:COLLECTION)?|GLOBAL|GOTO|GRANT|GROUP|HANDLER|HASH|HAVING|HOLDLOCK|HOUR|IDENTITY(?:_INSERT|COL)?|IF|IGNORE|IMPORT|INDEX|INFILE|INNER|INNODB|INOUT|INSERT|INT|INTEGER|INTERSECT|INTERVAL|INTO|INVOKER|ISOLATION|ITERATE|JOIN|KEYS?|KILL|LANGUAGE|LAST|LEAVE|LEFT|LEVEL|LIMIT|LINENO|LINES|LINESTRING|LOAD|LOCAL|LOCK|LONG(?:BLOB|TEXT)|LOOP|MATCH(?:ED)?|MEDIUM(?:BLOB|INT|TEXT)|MERGE|MIDDLEINT|MINUTE|MODE|MODIFIES|MODIFY|MONTH|MULTI(?:LINESTRING|POINT|POLYGON)|NATIONAL|NATURAL|NCHAR|NEXT|NO|NONCLUSTERED|NULLIF|NUMERIC|OFF?|OFFSETS?|ON|OPEN(?:DATASOURCE|QUERY|ROWSET)?|OPTIMIZE|OPTION(?:ALLY)?|ORDER|OUT(?:ER|FILE)?|OVER|PARTIAL|PARTITION|PERCENT|PIVOT|PLAN|POINT|POLYGON|PRECEDING|PRECISION|PREPARE|PREV|PRIMARY|PRINT|PRIVILEGES|PROC(?:EDURE)?|PUBLIC|PURGE|QUICK|RAISERROR|READS?|REAL|RECONFIGURE|REFERENCES|RELEASE|RENAME|REPEAT(?:ABLE)?|REPLACE|REPLICATION|REQUIRE|RESIGNAL|RESTORE|RESTRICT|RETURN(?:S|ING)?|REVOKE|RIGHT|ROLLBACK|ROUTINE|ROW(?:COUNT|GUIDCOL|S)?|RTREE|RULE|SAVE(?:POINT)?|SCHEMA|SECOND|SELECT|SERIAL(?:IZABLE)?|SESSION(?:_USER)?|SET(?:USER)?|SHARE|SHOW|SHUTDOWN|SIMPLE|SMALLINT|SNAPSHOT|SOME|SONAME|SQL|START(?:ING)?|STATISTICS|STATUS|STRIPED|SYSTEM_USER|TABLES?|TABLESPACE|TEMP(?:ORARY|TABLE)?|TERMINATED|TEXT(?:SIZE)?|THEN|TIME(?:STAMP)?|TINY(?:BLOB|INT|TEXT)|TOP?|TRAN(?:SACTIONS?)?|TRIGGER|TRUNCATE|TSEQUAL|TYPES?|UNBOUNDED|UNCOMMITTED|UNDEFINED|UNION|UNIQUE|UNLOCK|UNPIVOT|UNSIGNED|UPDATE(?:TEXT)?|USAGE|USE|USER|USING|VALUES?|VAR(?:BINARY|CHAR|CHARACTER|YING)|VIEW|WAITFOR|WARNINGS|WHEN|WHERE|WHILE|WITH(?: ROLLUP|IN)?|WORK|WRITE(?:TEXT)?|YEAR)\b/i,boolean:/\b(?:TRUE|FALSE|NULL)\b/i,number:/\b0x[\da-f]+\b|\b\d+(?:\.\d*)?|\B\.\d+\b/i,operator:/[-+*\/=%^~]|&&?|\|\|?|!=?|<(?:=>?|<|>)?|>[>=]?|\b(?:AND|BETWEEN|DIV|IN|ILIKE|IS|LIKE|NOT|OR|REGEXP|RLIKE|SOUNDS LIKE|XOR)\b/i,punctuation:/[;[\]()`,.]/}},function(e,t){!function(){if("undefined"!=typeof Prism&&"undefined"!=typeof document){var e=/\n(?!$)/g,t=Prism.plugins.lineNumbers={getLine:function(e,t){if("PRE"===e.tagName&&e.classList.contains("line-numbers")){var n=e.querySelector(".line-numbers-rows");if(n){var r=parseInt(e.getAttribute("data-start"),10)||1,i=r+(n.children.length-1);t<r&&(t=r),t>i&&(t=i);var o=t-r;return n.children[o]}}},resize:function(e){r([e])},assumeViewportIndependence:!0},n=void 0;window.addEventListener("resize",(function(){t.assumeViewportIndependence&&n===window.innerWidth||(n=window.innerWidth,r(Array.prototype.slice.call(document.querySelectorAll("pre.line-numbers"))))})),Prism.hooks.add("complete",(function(t){if(t.code){var n=t.element,i=n.parentNode;if(i&&/pre/i.test(i.nodeName)&&!n.querySelector(".line-numbers-rows")&&Prism.util.isActive(n,"line-numbers")){n.classList.remove("line-numbers"),i.classList.add("line-numbers");var o,a=t.code.match(e),s=a?a.length+1:1,l=new Array(s+1).join("<span></span>");(o=document.createElement("span")).setAttribute("aria-hidden","true"),o.className="line-numbers-rows",o.innerHTML=l,i.hasAttribute("data-start")&&(i.style.counterReset="linenumber "+(parseInt(i.getAttribute("data-start"),10)-1)),t.element.appendChild(o),r([i]),Prism.hooks.run("line-numbers",t)}}})),Prism.hooks.add("line-numbers",(function(e){e.plugins=e.plugins||{},e.plugins.lineNumbers=!0}))}function r(t){if(0!=(t=t.filter((function(e){var t=function(e){if(!e)return null;return window.getComputedStyle?getComputedStyle(e):e.currentStyle||null}(e)["white-space"];return"pre-wrap"===t||"pre-line"===t}))).length){var n=t.map((function(t){var n=t.querySelector("code"),r=t.querySelector(".line-numbers-rows");if(n&&r){var i=t.querySelector(".line-numbers-sizer"),o=n.textContent.split(e);i||((i=document.createElement("span")).className="line-numbers-sizer",n.appendChild(i)),i.innerHTML="0",i.style.display="block";var a=i.getBoundingClientRect().height;return i.innerHTML="",{element:t,lines:o,lineHeights:[],oneLinerHeight:a,sizer:i}}})).filter(Boolean);n.forEach((function(e){var t=e.sizer,n=e.lines,r=e.lineHeights,i=e.oneLinerHeight;r[n.length-1]=void 0,n.forEach((function(e,n){if(e&&e.length>1){var o=t.appendChild(document.createElement("span"));o.style.display="block",o.textContent=e}else r[n]=i}))})),n.forEach((function(e){for(var t=e.sizer,n=e.lineHeights,r=0,i=0;i<n.length;i++)void 0===n[i]&&(n[i]=t.children[r++].getBoundingClientRect().height)})),n.forEach((function(e){var t=e.sizer,n=e.element.querySelector(".line-numbers-rows");t.style.display="none",t.innerHTML="",e.lineHeights.forEach((function(e,t){n.children[t].style.height=e+"px"}))}))}}}()},function(e,t,n){var r=n(460);"string"==typeof r&&(r=[[e.i,r,""]]);var i={hmr:!0,transform:void 0,insertInto:void 0};n(40)(r,i);r.locals&&(e.exports=r.locals)},function(e,t,n){(e.exports=n(39)(!1)).push([e.i,'pre[class*="language-"].line-numbers {\n\tposition: relative;\n\tpadding-left: 3.8em;\n\tcounter-reset: linenumber;\n}\n\npre[class*="language-"].line-numbers > code {\n\tposition: relative;\n\twhite-space: inherit;\n}\n\n.line-numbers .line-numbers-rows {\n\tposition: absolute;\n\tpointer-events: none;\n\ttop: 0;\n\tfont-size: 100%;\n\tleft: -3.8em;\n\twidth: 3em; /* works for line-numbers below 1000 lines */\n\tletter-spacing: -1px;\n\tborder-right: 1px solid #999;\n\n\t-webkit-user-select: none;\n\t-moz-user-select: none;\n\t-ms-user-select: none;\n\tuser-select: none;\n\n}\n\n\t.line-numbers-rows > span {\n\t\tdisplay: block;\n\t\tcounter-increment: linenumber;\n\t}\n\n\t\t.line-numbers-rows > span:before {\n\t\t\tcontent: counter(linenumber);\n\t\t\tcolor: #999;\n\t\t\tdisplay: block;\n\t\t\tpadding-right: 0.8em;\n\t\t\ttext-align: right;\n\t\t}\n',""])},function(e,t,n){var r=n(462);"string"==typeof r&&(r=[[e.i,r,""]]);var i={hmr:!0,transform:void 0,insertInto:void 0};n(40)(r,i);r.locals&&(e.exports=r.locals)},function(e,t,n){(e.exports=n(39)(!1)).push([e.i,'/**\n * GHColors theme by Avi Aryan (http://aviaryan.in)\n * Inspired by Github syntax coloring\n */\n\ncode[class*="language-"],\npre[class*="language-"] {\n\tcolor: #393A34;\n\tfont-family: "Consolas", "Bitstream Vera Sans Mono", "Courier New", Courier, monospace;\n\tdirection: ltr;\n\ttext-align: left;\n\twhite-space: pre;\n\tword-spacing: normal;\n\tword-break: normal;\n\tfont-size: .9em;\n\tline-height: 1.2em;\n\n\t-moz-tab-size: 4;\n\t-o-tab-size: 4;\n\ttab-size: 4;\n\n\t-webkit-hyphens: none;\n\t-moz-hyphens: none;\n\t-ms-hyphens: none;\n\thyphens: none;\n}\n\npre > code[class*="language-"] {\n\tfont-size: 1em;\n}\n\npre[class*="language-"]::-moz-selection, pre[class*="language-"] ::-moz-selection,\ncode[class*="language-"]::-moz-selection, code[class*="language-"] ::-moz-selection {\n\tbackground: #b3d4fc;\n}\n\npre[class*="language-"]::selection, pre[class*="language-"] ::selection,\ncode[class*="language-"]::selection, code[class*="language-"] ::selection {\n\tbackground: #b3d4fc;\n}\n\n/* Code blocks */\npre[class*="language-"] {\n\tpadding: 1em;\n\tmargin: .5em 0;\n\toverflow: auto;\n\tborder: 1px solid #dddddd;\n\tbackground-color: white;\n}\n\n/* Inline code */\n:not(pre) > code[class*="language-"] {\n\tpadding: .2em;\n\tpadding-top: 1px;\n\tpadding-bottom: 1px;\n\tbackground: #f8f8f8;\n\tborder: 1px solid #dddddd;\n}\n\n.token.comment,\n.token.prolog,\n.token.doctype,\n.token.cdata {\n\tcolor: #999988;\n\tfont-style: italic;\n}\n\n.token.namespace {\n\topacity: .7;\n}\n\n.token.string,\n.token.attr-value {\n\tcolor: #e3116c;\n}\n\n.token.punctuation,\n.token.operator {\n\tcolor: #393A34; /* no highlight */\n}\n\n.token.entity,\n.token.url,\n.token.symbol,\n.token.number,\n.token.boolean,\n.token.variable,\n.token.constant,\n.token.property,\n.token.regex,\n.token.inserted {\n\tcolor: #36acaa;\n}\n\n.token.atrule,\n.token.keyword,\n.token.attr-name,\n.language-autohotkey .token.selector {\n\tcolor: #00a4db;\n}\n\n.token.function,\n.token.deleted,\n.language-autohotkey .token.tag {\n\tcolor: #9a050f;\n}\n\n.token.tag,\n.token.selector,\n.language-autohotkey .token.keyword {\n\tcolor: #00009f;\n}\n\n.token.important,\n.token.function,\n.token.bold {\n\tfont-weight: bold;\n}\n\n.token.italic {\n\tfont-style: italic;\n}\n',""])},function(e,t,n){n(31);const r=n(21),i=n(148),o=n(203);angular.module("dbt").factory("graph",["$state","$window","$q","selectorService","project","locationService",function(e,t,n,a,s,l){var c={vertical:{userPanningEnabled:!1,boxSelectionEnabled:!1,maxZoom:1.5},horizontal:{userPanningEnabled:!0,boxSelectionEnabled:!1,maxZoom:1,minZoom:.05}},u={none:{name:"null"},left_right:{name:"dagre",rankDir:"LR",rankSep:200,edgeSep:30,nodeSep:50},top_down:{name:"preset",positions:function(t){var n=e.params.unique_id;if(!n)return{x:0,y:0};var a=d.graph.pristine.dag,s=r.sortBy(o.ancestorNodes(a,n,1)),l=r.sortBy(o.descendentNodes(a,n,1)),c=r.partial(r.includes,s),u=r.partial(r.includes,l),f=a.filterNodes(c),p=a.filterNodes(u);return function(e,t,n,i){console.log("Getting position for ",i,". Primary: ",e);var o,a=100/(1+Math.max(t.length,n.length));if(e==i)return{x:0,y:0};if(r.includes(t,i))o={set:t,index:r.indexOf(t,i),factor:-1,type:"parent"};else{if(!r.includes(n,i))return{x:0,y:0};o={set:n,index:r.indexOf(n,i),factor:1,type:"child"}}var s=o.set.length;if("parent"==o.type)var l={x:(0+o.index)*a,y:-200-100*(s-o.index-1)};else l={x:(0+o.index)*a,y:200+100*(s-o.index-1)};return l}(n,i.alg.topsort(f),i.alg.topsort(p).reverse(),t.data("id"))}}},d={loading:!0,loaded:n.defer(),graph_element:null,orientation:"sidebar",expanded:!1,graph:{options:c.vertical,pristine:{nodes:{},edges:{},dag:null},elements:[],layout:u.none,style:[{selector:"edge.vertical",style:{"curve-style":"unbundled-bezier","target-arrow-shape":"triangle-backcurve","target-arrow-color":"#027599","arrow-scale":1.5,"line-color":"#027599",width:3,"target-distance-from-node":"5px","source-endpoint":"0% 50%","target-endpoint":"0deg"}},{selector:"edge.horizontal",style:{"curve-style":"unbundled-bezier","target-arrow-shape":"triangle-backcurve","target-arrow-color":"#006f8a","arrow-scale":1.5,"target-distance-from-node":"10px","source-distance-from-node":"5px","line-color":"#006f8a",width:3,"source-endpoint":"50% 0%","target-endpoint":"270deg"}},{selector:"edge[selected=1]",style:{"line-color":"#bd6bb6","target-arrow-color":"#bd6bb6","z-index":1}},{selector:'node[display="none"]',style:{display:"none"}},{selector:"node.vertical",style:{"text-margin-x":"5px","background-color":"#0094b3","font-size":"16px",shape:"ellipse",color:"#fff",width:"5px",height:"5px",padding:"5px",content:"data(label)","font-weight":300,"text-valign":"center","text-halign":"right"}},{selector:"node.horizontal",style:{"background-color":"#0094b3","font-size":"24px",shape:"roundrectangle",color:"#fff",width:"label",height:"label",padding:"12px",content:"data(label)","font-weight":300,"font-family":'-apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen, Ubuntu, Cantarell, "Fira Sans", "Droid Sans", "Helvetica Neue", Helvetica, Arial, sans-serif',"text-valign":"center","text-halign":"center",ghost:"yes","ghost-offset-x":"2px","ghost-offset-y":"4px","ghost-opacity":.5,"text-outline-color":"#000","text-outline-width":"1px","text-outline-opacity":.2}},{selector:'node[resource_type="source"]',style:{"background-color":"#5fb825"}},{selector:'node[resource_type="exposure"]',style:{"background-color":"#ff694b"}},{selector:'node[resource_type="metric"]',style:{"background-color":"#ff5688"}},{selector:"node[selected=1]",style:{"background-color":"#bd6bb6"}},{selector:"node.horizontal[selected=1]",style:{"background-color":"#88447d"}},{selector:"node.horizontal.dirty",style:{"background-color":"#919599"}},{selector:"node[hidden=1]",style:{"background-color":"#919599","background-opacity":.5}}],ready:function(e){console.log("graph ready")}}};function f(e,t,n){var i=r.map(e,(function(e){return d.graph.pristine.nodes[e]})),o=[];r.flatten(r.each(e,(function(t){var n=d.graph.pristine.edges[t];r.each(n,(function(t){r.includes(e,t.data.target)&&r.includes(e,t.data.source)&&o.push(t)}))})));var a=r.compact(i).concat(r.compact(o));return r.each(d.graph.elements,(function(e){e.data.display="none",e.data.selected=0,e.data.hidden=0,e.classes=n})),r.each(a,(function(e){e.data.display="element",e.classes=n,t&&r.includes(t,e.data.unique_id)&&(e.data.selected=1),e.data.docs&&!1===e.data.docs.show&&(e.data.hidden=1)})),d.graph.elements=r.filter(a,(function(e){return"element"==e.data.display})),e}function p(e,t,n){var r=d.graph.pristine.dag;if(r){var i=d.graph.pristine.nodes,o=a.selectNodes(r,i,e),s=n?o.matched:[];return f(o.selected,s,t)}}return d.setGraphReady=function(e){d.loading=!1,d.loaded.resolve(),d.graph_element=e},d.ready=function(e){d.loaded.promise.then((function(){e(d)}))},d.manifest={},d.packages=[],d.selected_node=null,d.getCanvasHeight=function(){return.8*t.innerHeight+"px"},s.ready((function(e){d.manifest=e,d.packages=r.uniq(r.map(d.manifest.nodes,"package_name")),r.each(r.filter(d.manifest.nodes,(function(e){var t=r.includes(["model","seed","source","snapshot","analysis","exposure","metric"],e.resource_type),n="test"==e.resource_type&&!e.hasOwnProperty("test_metadata");return t||n})),(function(e){var t={group:"nodes",data:r.assign(e,{parent:e.package_name,id:e.unique_id,is_group:"false"})};d.graph.pristine.nodes[e.unique_id]=t})),r.each(d.manifest.parent_map,(function(e,t){r.each(e,(function(e){var n=d.manifest.nodes[e],i=d.manifest.nodes[t];if(r.includes(["model","source","seed","snapshot"],n.resource_type)&&("test"!=i.resource_type||!i.hasOwnProperty("test_metadata"))){var o=n.unique_id+"|"+i.unique_id,a={group:"edges",data:{source:n.unique_id,target:i.unique_id,unique_id:o}},s=i.unique_id;d.graph.pristine.edges[s]||(d.graph.pristine.edges[s]=[]),d.graph.pristine.edges[s].push(a)}}))}));var t=new i.Graph({directed:!0});r.each(d.graph.pristine.nodes,(function(e){t.setNode(e.data.unique_id,e.data.name)})),r.each(d.graph.pristine.edges,(function(e){r.each(e,(function(e){t.setEdge(e.data.source,e.data.target)}))})),d.graph.pristine.dag=t,d.graph.elements=r.flatten(r.values(d.graph.pristine.nodes).concat(r.values(d.graph.pristine.edges))),f(t.nodes())})),d.hideGraph=function(){d.orientation="sidebar",d.expanded=!1},d.showVerticalGraph=function(e,t){d.orientation="sidebar",t&&(d.expanded=!0);var n=p(r.assign({},a.options,{include:"+"+e+"+",exclude:"",hops:1}),"vertical",!0);return d.graph.layout=u.top_down,d.graph.options=c.vertical,n},d.showFullGraph=function(e){d.orientation="fullscreen",d.expanded=!0;var t=r.assign({},a.options);e?(t.include="+"+e+"+",t.exclude=""):(t.include="",t.exclude="");var n=p(t,"horizontal",!0);return d.graph.layout=u.left_right,d.graph.options=c.horizontal,l.setState(t),n},d.updateGraph=function(e){d.orientation="fullscreen",d.expanded=!0;var t=p(e,"horizontal",!1);return d.graph.layout=u.left_right,d.graph.options=c.horizontal,l.setState(e),t},d.deselectNodes=function(){"fullscreen"==d.orientation&&d.graph_element.elements().data("selected",0)},d.selectNode=function(e){if("fullscreen"==d.orientation){d.graph.pristine.nodes[e];var t=d.graph.pristine.dag,n=r.indexBy(o.ancestorNodes(t,e)),i=r.indexBy(o.descendentNodes(t,e));n[e]=e,i[e]=e;var a=d.graph_element;r.each(d.graph.elements,(function(t){var r=a.$id(t.data.id);n[t.data.source]&&n[t.data.target]||i[t.data.source]&&i[t.data.target]||t.data.unique_id==e?r.data("selected",1):r.data("selected",0)}))}},d.markDirty=function(e){d.markAllClean(),r.each(e,(function(e){d.graph_element.$id(e).addClass("dirty")}))},d.markAllClean=function(){d.graph_element&&d.graph_element.elements().removeClass("dirty")},d}])},function(e,t,n){n(31);const r=n(21),i=n(465);angular.module("dbt").factory("selectorService",["$state",function(e){var t={include:"",exclude:"",packages:[],tags:[null],resource_types:["model","seed","snapshot","source","test","analysis","exposure","metric"],depth:1},n={view_node:null,selection:{clean:r.clone(t),dirty:r.clone(t)},options:{packages:[],tags:[null],resource_types:["model","seed","snapshot","source","test","analysis","exposure","metric"]},init:function(e){r.each(e,(function(e,r){n.options[r]=e,t[r]=e,n.selection.clean[r]=e,n.selection.dirty[r]=e}))},resetSelection:function(e){var i={include:e&&r.includes(["model","seed","snapshot"],e.resource_type)?"+"+e.name+"+":e&&"source"==e.resource_type?"+source:"+e.source_name+"."+e.name+"+":e&&"exposure"==e.resource_type?"+exposure:"+e.name:e&&"metric"==e.resource_type?"+metric:"+e.name:e&&r.includes(["analysis","test"],e.resource_type)?"+"+e.name:""},o=r.assign({},t,i);n.selection.clean=r.clone(o),n.selection.dirty=r.clone(o),n.view_node=e},getViewNode:function(){return n.view_node},excludeNode:function(e,t){var r,i=n.selection.dirty.exclude,o=t.parents?"+":"",a=t.children?"+":"",s=i.length>0?" ":"";"source"==e.resource_type?(o+="source:",r=e.source_name+"."+e.name):["exposure","metric"].indexOf(e.resource_type)>-1?(o+=e.resource_type+":",r=e.name):r=e.name;var l=i+s+o+r+a;return n.selection.dirty.exclude=l,n.updateSelection()},selectSource:function(e,t){var r="source:"+e+(t.children?"+":"");return n.selection.dirty.include=r,n.updateSelection()},clearViewNode:function(){n.view_node=null},isDirty:function(){return!r.isEqual(n.selection.clean,n.selection.dirty)},updateSelection:function(){return n.selection.clean=r.clone(n.selection.dirty),n.selection.clean},selectNodes:function(e,t,n){return i.selectNodes(e,t,n)}};return n}])},function(e,t,n){const r=n(21),i=n(466);function o(e,t){return t||(t=" "),r.filter(r.uniq(e.split(t)),(function(e){return e.length>0}))}function a(e){var t={raw:e,select_at:!1,select_children:!1,children_depth:null,select_parents:!1,parents_depth:null};const n=new RegExp(""+/^/.source+/(?<childs_parents>(\@))?/.source+/(?<parents>((?<parents_depth>(\d*))\+))?/.source+/((?<method>([\w.]+)):)?/.source+/(?<value>(.*?))/.source+/(?<children>(\+(?<children_depth>(\d*))))?/.source+/$/.source).exec(e).groups;t.select_at="@"==n.childs_parents,t.select_parents=!!n.parents,t.select_children=!!n.children,n.parents_depth&&(t.parents_depth=parseInt(n.parents_depth)),n.children_depth&&(t.children_depth=parseInt(n.children_depth));var r=n.method,i=n.value;return r?-1!=r.indexOf(".")&&([r,selector_modifier]=r.split(".",2),i={config:selector_modifier,value:i}):r="implicit",t.selector_type=r,t.selector_value=i,t}function s(e){var t=o(e," ");return r.map(t,(function(e){var t=o(e,",");return t.length>1?{method:"intersect",selectors:r.map(t,a)}:{method:"none",selectors:r.map([e],a)}}))}function l(e,t){var n=s(e),i=null,o=null;return r.each(n,(function(e){var n="intersect"==e.method?r.intersection:r.union;r.each(e.selectors,(function(e){var r=t(e);null===i?(i=r.matched,o=r.selected):(i=n(i,r.matched),o=n(o,r.selected))}))})),{matched:i||[],selected:o||[]}}e.exports={splitSpecs:o,parseSpec:a,parseSpecs:s,buildSpec:function(e,t,n){return{include:s(e),exclude:s(t),hops:n}},applySpec:l,selectNodes:function(e,t,n){n.include,n.exclude;var o,a=r.partial(i.getNodesFromSpec,e,t,n.hops);r.values(t),o=0==n.include.trim().length?{selected:e.nodes(),matched:[]}:l(n.include,a);var s=l(n.exclude,a),c=o.selected,u=o.matched;c=r.difference(c,s.selected),u=r.difference(u,s.matched);var d=[];return r.each(c,(function(e){var i=t[e];i.data.tags||(i.data.tags=[]);var o=r.includes(n.packages,i.data.package_name),a=r.intersection(n.tags,i.data.tags).length>0,s=r.includes(n.tags,null)&&0==i.data.tags.length,l=r.includes(n.resource_types,i.data.resource_type);o&&(a||s)&&l||d.push(i.data.unique_id)})),{selected:r.difference(c,d),matched:r.difference(u,d)}}}},function(e,t,n){const r=n(21),i=n(203);var o="fqn",a="tag",s="source",l="exposure",c="metric",u="path",d="package",f="config",p="test_name",h="test_type",g={};function v(e,t){if(t===r.last(e))return!0;var n=e.reduce((e,t)=>e.concat(t.split(".")),[]),i=t.split(".");if(n.length<i.length)return!1;for(var o=0;o<i.length;o++){var a=i[o];if("*"==a)return!0;if(n[o]!=a)return!1}return!0}function m(e,t){var n=[];return r.each(e,(function(e){var i=e.data,o=i.fqn;if(o&&"source"!=i.resource_type&&"exposure"!=i.resource_type&&"metric"!=i.resource_type){var a=r.rest(o);(v(o,t)||v(a,t))&&n.push(i)}})),r.uniq(n)}function b(e,t){var n=[],i=t.split("/");return r.each(e,(function(e){var t=(e.data.original_file_path||"").split("/"),o=!0;r.each(i,(function(e,n){"*"==e||""==e||e!=t[n]&&(o=!1)})),o&&n.push(e.data)})),n}function y(e,t){var n=[];return r.each(e,(function(e){var i=e.data.tags;r.includes(i,t)&&n.push(e.data)})),n}function x(e,t){var n=[];return r.each(e,(function(e){e.data.package_name==t&&n.push(e.data)})),n}function w(e,t){var n=[];return r.each(e,(function(e){var r=e.data;r.config&&r.config[t.config]==t.value&&n.push(r)})),n}function k(e,t){var n=[];return r.each(e,(function(e){var r=e.data;r.test_metadata&&r.test_metadata.name==t&&n.push(r)})),n}function A(e,t){var n=[];return r.each(e,(function(e){var r=e.data;if("test"!=r.resource_type)return!1;(r.hasOwnProperty("test_metadata")&&["schema","generic"].indexOf(t)>-1||!r.hasOwnProperty("test_metadata")&&["data","singular"].indexOf(t)>-1)&&n.push(r)})),n}function E(e,t){var n=[];return r.each(e,(function(e){var r=e.data;if("source"==r.resource_type){var i,o,a=r.source_name,s=r.name;-1!=t.indexOf(".")?[i,o]=t.split(".",2):(i=t,o=null),("*"==i||i==a&&"*"===o||i==a&&o===s||i==a&&null===o)&&n.push(e.data)}})),n}g["implicit"]=function(e,t){var n=m(e,t),i=b(e,t),o=r.uniq(r.map(n,"unique_id").concat(r.map(i,"unique_id")));return r.map(o,t=>e[t].data)},g[o]=m,g[a]=y,g[s]=E,g[l]=function(e,t){var n=[];return r.each(e,(function(e){var r=e.data;if("exposure"==r.resource_type){var i=r.name;("*"==t||t==i)&&n.push(e.data)}})),n},g[c]=function(e,t){var n=[];return r.each(e,(function(e){var r=e.data;if("metric"==r.resource_type){var i=r.name;("*"==t||t==i)&&n.push(e.data)}})),n},g[u]=b,g[d]=x,g[f]=w,g[p]=k,g[h]=A,e.exports={isFQNMatch:v,getNodesByFQN:m,getNodesByTag:y,getNodesBySource:E,getNodesByPath:b,getNodesByPackage:x,getNodesByConfig:w,getNodesByTestName:k,getNodesByTestType:A,getNodesFromSpec:function(e,t,n,o){const a=g[o.selector_type];if(!a)return console.log("Node matcher for selector",o.selector_type,"is invalid"),{selected:[],matched:[]};var s=a(t,o.selector_value),l=[],c=[];return r.each(s,(function(t){var a=t.unique_id;c.push(t.unique_id);var s=[],u=[],d=[];if(o.select_at&&(d=r.union(i.selectAt(e,a))),o.select_parents){var f=n||o.parents_depth;s=i.ancestorNodes(e,a,f)}if(o.select_children){f=n||o.children_depth;u=i.descendentNodes(e,a,f)}l=r.union([a],l,u,s,d)})),{selected:l,matched:c}}}},function(e,t,n){const r=n(9);n(468);r.module("dbt").factory("trackingService",["$location","selectorService","$rootScope",function(e,t,n){var r={initialized:!1,snowplow:null,project_id:null,init:function(e){r.initialized||(r.initialized=!0,r.project_id=e.project_id,!0===e.track&&r.turn_on_tracking())},isHosted:function(){return window.location.hostname.indexOf(".getdbt.com")>-1},turn_on_tracking:function(){var e,t,n,i,o,a;e=window,t=document,n="script",e[i="snowplow"]||(e.GlobalSnowplowNamespace=e.GlobalSnowplowNamespace||[],e.GlobalSnowplowNamespace.push(i),e[i]=function(){(e[i].q=e[i].q||[]).push(arguments)},e[i].q=e[i].q||[],o=t.createElement(n),a=t.getElementsByTagName(n)[0],o.async=1,o.src="//d1fc8wv8zag5ca.cloudfront.net/2.9.0/sp.js",a.parentNode.insertBefore(o,a));var s={appId:"dbt-docs",forceSecureTracker:!0,respectDoNotTrack:!0,userFingerprint:!1,contexts:{webPage:!0}};r.isHosted()&&(s.cookieDomain=".getdbt.com"),r.snowplow=window.snowplow,r.snowplow("newTracker","sp","fishtownanalytics.sinter-collect.com",s),r.snowplow("enableActivityTracking",30,30),r.track_pageview()},fuzzUrls:function(){r.isHosted()||(r.snowplow("setCustomUrl","https://fuzzed.getdbt.com/"),r.snowplow("setReferrerUrl","https://fuzzed.getdbt.com/"))},getContext:function(){return[{schema:"iglu:com.dbt/dbt_docs/jsonschema/1-0-0",data:{is_cloud_hosted:r.isHosted(),core_project_id:r.project_id}}]},track_pageview:function(){if(r.snowplow){r.fuzzUrls();r.snowplow("trackPageView",null,r.getContext())}},track_event:function(e,t,n,i){r.snowplow&&(r.fuzzUrls(),r.snowplow("trackStructEvent","dbt-docs",e,t,n,i,r.getContext()))},track_graph_interaction:function(e,t){r.snowplow&&(r.fuzzUrls(),r.track_event("graph","interact",e,t))}};return r}])},function(e,t,n){var r,i,o,a,s;r=n(469),i=n(204).utf8,o=n(470),a=n(204).bin,(s=function(e,t){e.constructor==String?e=t&&"binary"===t.encoding?a.stringToBytes(e):i.stringToBytes(e):o(e)?e=Array.prototype.slice.call(e,0):Array.isArray(e)||e.constructor===Uint8Array||(e=e.toString());for(var n=r.bytesToWords(e),l=8*e.length,c=1732584193,u=-271733879,d=-1732584194,f=271733878,p=0;p<n.length;p++)n[p]=16711935&(n[p]<<8|n[p]>>>24)|4278255360&(n[p]<<24|n[p]>>>8);n[l>>>5]|=128<<l%32,n[14+(l+64>>>9<<4)]=l;var h=s._ff,g=s._gg,v=s._hh,m=s._ii;for(p=0;p<n.length;p+=16){var b=c,y=u,x=d,w=f;c=h(c,u,d,f,n[p+0],7,-680876936),f=h(f,c,u,d,n[p+1],12,-389564586),d=h(d,f,c,u,n[p+2],17,606105819),u=h(u,d,f,c,n[p+3],22,-1044525330),c=h(c,u,d,f,n[p+4],7,-176418897),f=h(f,c,u,d,n[p+5],12,1200080426),d=h(d,f,c,u,n[p+6],17,-1473231341),u=h(u,d,f,c,n[p+7],22,-45705983),c=h(c,u,d,f,n[p+8],7,1770035416),f=h(f,c,u,d,n[p+9],12,-1958414417),d=h(d,f,c,u,n[p+10],17,-42063),u=h(u,d,f,c,n[p+11],22,-1990404162),c=h(c,u,d,f,n[p+12],7,1804603682),f=h(f,c,u,d,n[p+13],12,-40341101),d=h(d,f,c,u,n[p+14],17,-1502002290),c=g(c,u=h(u,d,f,c,n[p+15],22,1236535329),d,f,n[p+1],5,-165796510),f=g(f,c,u,d,n[p+6],9,-1069501632),d=g(d,f,c,u,n[p+11],14,643717713),u=g(u,d,f,c,n[p+0],20,-373897302),c=g(c,u,d,f,n[p+5],5,-701558691),f=g(f,c,u,d,n[p+10],9,38016083),d=g(d,f,c,u,n[p+15],14,-660478335),u=g(u,d,f,c,n[p+4],20,-405537848),c=g(c,u,d,f,n[p+9],5,568446438),f=g(f,c,u,d,n[p+14],9,-1019803690),d=g(d,f,c,u,n[p+3],14,-187363961),u=g(u,d,f,c,n[p+8],20,1163531501),c=g(c,u,d,f,n[p+13],5,-1444681467),f=g(f,c,u,d,n[p+2],9,-51403784),d=g(d,f,c,u,n[p+7],14,1735328473),c=v(c,u=g(u,d,f,c,n[p+12],20,-1926607734),d,f,n[p+5],4,-378558),f=v(f,c,u,d,n[p+8],11,-2022574463),d=v(d,f,c,u,n[p+11],16,1839030562),u=v(u,d,f,c,n[p+14],23,-35309556),c=v(c,u,d,f,n[p+1],4,-1530992060),f=v(f,c,u,d,n[p+4],11,1272893353),d=v(d,f,c,u,n[p+7],16,-155497632),u=v(u,d,f,c,n[p+10],23,-1094730640),c=v(c,u,d,f,n[p+13],4,681279174),f=v(f,c,u,d,n[p+0],11,-358537222),d=v(d,f,c,u,n[p+3],16,-722521979),u=v(u,d,f,c,n[p+6],23,76029189),c=v(c,u,d,f,n[p+9],4,-640364487),f=v(f,c,u,d,n[p+12],11,-421815835),d=v(d,f,c,u,n[p+15],16,530742520),c=m(c,u=v(u,d,f,c,n[p+2],23,-995338651),d,f,n[p+0],6,-198630844),f=m(f,c,u,d,n[p+7],10,1126891415),d=m(d,f,c,u,n[p+14],15,-1416354905),u=m(u,d,f,c,n[p+5],21,-57434055),c=m(c,u,d,f,n[p+12],6,1700485571),f=m(f,c,u,d,n[p+3],10,-1894986606),d=m(d,f,c,u,n[p+10],15,-1051523),u=m(u,d,f,c,n[p+1],21,-2054922799),c=m(c,u,d,f,n[p+8],6,1873313359),f=m(f,c,u,d,n[p+15],10,-30611744),d=m(d,f,c,u,n[p+6],15,-1560198380),u=m(u,d,f,c,n[p+13],21,1309151649),c=m(c,u,d,f,n[p+4],6,-145523070),f=m(f,c,u,d,n[p+11],10,-1120210379),d=m(d,f,c,u,n[p+2],15,718787259),u=m(u,d,f,c,n[p+9],21,-343485551),c=c+b>>>0,u=u+y>>>0,d=d+x>>>0,f=f+w>>>0}return r.endian([c,u,d,f])})._ff=function(e,t,n,r,i,o,a){var s=e+(t&n|~t&r)+(i>>>0)+a;return(s<<o|s>>>32-o)+t},s._gg=function(e,t,n,r,i,o,a){var s=e+(t&r|n&~r)+(i>>>0)+a;return(s<<o|s>>>32-o)+t},s._hh=function(e,t,n,r,i,o,a){var s=e+(t^n^r)+(i>>>0)+a;return(s<<o|s>>>32-o)+t},s._ii=function(e,t,n,r,i,o,a){var s=e+(n^(t|~r))+(i>>>0)+a;return(s<<o|s>>>32-o)+t},s._blocksize=16,s._digestsize=16,e.exports=function(e,t){if(null==e)throw new Error("Illegal argument "+e);var n=r.wordsToBytes(s(e,t));return t&&t.asBytes?n:t&&t.asString?a.bytesToString(n):r.bytesToHex(n)}},function(e,t){var n,r;n="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",r={rotl:function(e,t){return e<<t|e>>>32-t},rotr:function(e,t){return e<<32-t|e>>>t},endian:function(e){if(e.constructor==Number)return 16711935&r.rotl(e,8)|4278255360&r.rotl(e,24);for(var t=0;t<e.length;t++)e[t]=r.endian(e[t]);return e},randomBytes:function(e){for(var t=[];e>0;e--)t.push(Math.floor(256*Math.random()));return t},bytesToWords:function(e){for(var t=[],n=0,r=0;n<e.length;n++,r+=8)t[r>>>5]|=e[n]<<24-r%32;return t},wordsToBytes:function(e){for(var t=[],n=0;n<32*e.length;n+=8)t.push(e[n>>>5]>>>24-n%32&255);return t},bytesToHex:function(e){for(var t=[],n=0;n<e.length;n++)t.push((e[n]>>>4).toString(16)),t.push((15&e[n]).toString(16));return t.join("")},hexToBytes:function(e){for(var t=[],n=0;n<e.length;n+=2)t.push(parseInt(e.substr(n,2),16));return t},bytesToBase64:function(e){for(var t=[],r=0;r<e.length;r+=3)for(var i=e[r]<<16|e[r+1]<<8|e[r+2],o=0;o<4;o++)8*r+6*o<=8*e.length?t.push(n.charAt(i>>>6*(3-o)&63)):t.push("=");return t.join("")},base64ToBytes:function(e){e=e.replace(/[^A-Z0-9+\/]/gi,"");for(var t=[],r=0,i=0;r<e.length;i=++r%4)0!=i&&t.push((n.indexOf(e.charAt(r-1))&Math.pow(2,-2*i+8)-1)<<2*i|n.indexOf(e.charAt(r))>>>6-2*i);return t}},e.exports=r},function(e,t){function n(e){return!!e.constructor&&"function"==typeof e.constructor.isBuffer&&e.constructor.isBuffer(e)} +/*! Runge-Kutta spring physics function generator. Adapted from Framer.js, copyright Koen Bok. MIT License: http://en.wikipedia.org/wiki/MIT_License */var r=function(){function e(e){return-e.tension*e.x-e.friction*e.v}function t(t,n,r){var i={x:t.x+r.dx*n,v:t.v+r.dv*n,tension:t.tension,friction:t.friction};return{dx:i.v,dv:e(i)}}function n(n,r){var i={dx:n.v,dv:e(n)},o=t(n,.5*r,i),a=t(n,.5*r,o),s=t(n,r,a),l=1/6*(i.dx+2*(o.dx+a.dx)+s.dx),c=1/6*(i.dv+2*(o.dv+a.dv)+s.dv);return n.x=n.x+l*r,n.v=n.v+c*r,n}return function e(t,r,i){var o,a={x:-1,v:0,tension:null,friction:null},s=[0],l=0,c=void 0,u=void 0;for(t=parseFloat(t)||500,r=parseFloat(r)||20,i=i||null,a.tension=t,a.friction=r,c=(o=null!==i)?(l=e(t,r))/i*.016:.016;u=n(u||a,c),s.push(1+u.x),l+=16,Math.abs(u.x)>1e-4&&Math.abs(u.v)>1e-4;);return o?function(e){return s[e*(s.length-1)|0]}:l}}();e.exports=r},function(e,t,n){"use strict";var r=n(0);function i(e,t,n,r,i){if(1===r)return n;var o=i(t,n,r);return null==e||((e.roundValue||e.color)&&(o=Math.round(o)),void 0!==e.min&&(o=Math.max(o,e.min)),void 0!==e.max&&(o=Math.min(o,e.max))),o}function o(e,t){return null!=e.pfValue||null!=e.value?null==e.pfValue||null!=t&&"%"===t.type.units?e.value:e.pfValue:e}e.exports=function(e,t,n,a,s){var l=null!=s?s.type:null;n<0?n=0:n>1&&(n=1);var c=o(e,s),u=o(t,s);if(r.number(c)&&r.number(u))return i(l,c,u,n,a);if(r.array(c)&&r.array(u)){for(var d=[],f=0;f<u.length;f++){var p=c[f],h=u[f];if(null!=p&&null!=h){var g=i(l,p,h,n,a);d.push(g)}else d.push(h)}return d}}},function(e,t,n){"use strict";e.exports=function(e,t,n,r){var i=!r,o=e,a=t._private,s=r?e:e.cy(),l=s.style();if(i){var c=o.position();a.startPosition=a.startPosition||{x:c.x,y:c.y},a.startStyle=a.startStyle||l.getAnimationStartStyle(o,a.style)}if(r){var u=s._private.pan;a.startPan=a.startPan||{x:u.x,y:u.y},a.startZoom=null!=a.startZoom?a.startZoom:s._private.zoom}a.started=!0,a.startTime=n-a.progress*a.duration}},function(e,t,n){"use strict";var r=n(11),i=n(4),o=n(0),a=n(1),s=n(6),l={qualifierCompare:function(e,t){return null==e||null==t?null==e&&null==t:e.sameText(t)},eventMatches:function(e,t,n){var r=t.qualifier;return null==r||e!==n.target&&o.element(n.target)&&r.matches(n.target)},eventFields:function(e){return{cy:e,target:e}},callbackContext:function(e,t,n){return null!=t.qualifier?n.target:e}},c=function(e){return o.string(e)?new s(e):e},u={createEmitter:function(){var e=this._private;return e.emitter||(e.emitter=new r(a.assign({context:this},l))),this},emitter:function(){return this._private.emitter},on:function(e,t,n){return this.emitter().on(e,c(t),n),this},removeListener:function(e,t,n){return this.emitter().removeListener(e,c(t),n),this},one:function(e,t,n){return this.emitter().one(e,c(t),n),this},once:function(e,t,n){return this.emitter().one(e,c(t),n),this},emit:function(e,t){return this.emitter().emit(e,t),this}};i.eventAliasesOn(u),e.exports=u},function(e,t,n){"use strict";var r={png:function(e){return e=e||{},this._private.renderer.png(e)},jpg:function(e){var t=this._private.renderer;return(e=e||{}).bg=e.bg||"#fff",t.jpg(e)}};r.jpeg=r.jpg,e.exports=r},function(e,t,n){"use strict";var r=n(1),i=n(0),o={layout:function(e){if(null!=e)if(null!=e.name){var t=e.name,n=this.extension("layout",t);if(null!=n){var o=void 0;o=i.string(e.eles)?this.$(e.eles):null!=e.eles?e.eles:this.$();var a=new n(r.extend({},e,{cy:this,eles:o}));return a}r.error("Can not apply layout: No such layout `"+t+"` found; did you include its JS file?")}else r.error("A `name` must be specified to make a layout");else r.error("Layout options must be specified to make a layout")}};o.createLayout=o.makeLayout=o.layout,e.exports=o},function(e,t,n){"use strict";var r={notify:function(e){var t=this._private;if(t.batchingNotify){var n=t.batchNotifyEles,r=t.batchNotifyTypes;return e.eles&&n.merge(e.eles),void(r.ids[e.type]||(r.push(e.type),r.ids[e.type]=!0))}if(t.notificationsEnabled){var i=this.renderer();!this.isDestroyed()&&i&&i.notify(e)}},notifications:function(e){var t=this._private;if(void 0===e)return t.notificationsEnabled;t.notificationsEnabled=!!e},noNotifications:function(e){this.notifications(!1),e(),this.notifications(!0)},batching:function(){return this._private.batchCount>0},startBatch:function(){var e=this._private;return null==e.batchCount&&(e.batchCount=0),0===e.batchCount&&(e.batchingStyle=e.batchingNotify=!0,e.batchStyleEles=this.collection(),e.batchNotifyEles=this.collection(),e.batchNotifyTypes=[],e.batchNotifyTypes.ids={}),e.batchCount++,this},endBatch:function(){var e=this._private;return e.batchCount--,0===e.batchCount&&(e.batchingStyle=!1,e.batchStyleEles.updateStyle(),e.batchingNotify=!1,this.notify({type:e.batchNotifyTypes,eles:e.batchNotifyEles})),this},batch:function(e){return this.startBatch(),e(),this.endBatch(),this},batchData:function(e){var t=this;return this.batch((function(){for(var n=Object.keys(e),r=0;r<n.length;r++){var i=n[r],o=e[i];t.getElementById(i).data(o)}}))}};e.exports=r},function(e,t,n){"use strict";var r=n(1),i={renderTo:function(e,t,n,r){return this._private.renderer.renderTo(e,t,n,r),this},renderer:function(){return this._private.renderer},forceRender:function(){return this.notify({type:"draw"}),this},resize:function(){return this.invalidateSize(),this.notify({type:"resize"}),this.emit("resize"),this},initRenderer:function(e){var t=this.extension("renderer",e.name);null!=t?(this._private.renderer=new t(r.extend({},e,{cy:this})),this.notify({type:"init"})):r.error("Can not initialise: No such renderer `%s` found; did you include its JS file?",e.name)},destroyRenderer:function(){this.notify({type:"destroy"});var e=this.container();if(e)for(e._cyreg=null;e.childNodes.length>0;)e.removeChild(e.childNodes[0]);this._private.renderer=null},onRender:function(e){return this.on("render",e)},offRender:function(e){return this.off("render",e)}};i.invalidateDimensions=i.resize,e.exports=i},function(e,t,n){"use strict";var r=n(0),i=n(7),o={collection:function(e,t){return r.string(e)?this.$(e):r.elementOrCollection(e)?e.collection():r.array(e)?new i(this,e,t):new i(this)},nodes:function(e){var t=this.$((function(e){return e.isNode()}));return e?t.filter(e):t},edges:function(e){var t=this.$((function(e){return e.isEdge()}));return e?t.filter(e):t},$:function(e){var t=this._private.elements;return e?t.filter(e):t.spawnSelf()},mutableElements:function(){return this._private.elements}};o.elements=o.filter=o.$,e.exports=o},function(e,t,n){"use strict";var r=n(0),i=n(18),o={style:function(e){return e&&this.setStyle(e).update(),this._private.style},setStyle:function(e){var t=this._private;return r.stylesheet(e)?t.style=e.generateStyle(this):r.array(e)?t.style=i.fromJson(this,e):r.string(e)?t.style=i.fromString(this,e):t.style=i(this),t.style}};e.exports=o},function(e,t,n){"use strict";var r=n(1),i=n(0),o=n(5),a={apply:function(e){var t=this._private,n=t.cy.collection();t.newStyle&&(t.contextStyles={},t.propDiffs={},this.cleanElements(e,!0));for(var r=0;r<e.length;r++){var i=e[r],o=this.getContextMeta(i);if(!o.empty){n.merge(i);var a=this.getContextStyle(o),s=this.applyContextStyle(o,a,i);t.newStyle||this.updateTransitions(i,s.diffProps),this.updateStyleHints(i)}}return t.newStyle=!1,n},getPropertiesDiff:function(e,t){var n=this._private.propDiffs=this._private.propDiffs||{},r=e+"-"+t,i=n[r];if(i)return i;for(var o=[],a={},s=0;s<this.length;s++){var l=this[s],c="t"===e[s]!=("t"===t[s]),u=l.mappedProperties.length>0;if(c||u){var d=void 0;c&&u||c?d=l.properties:u&&(d=l.mappedProperties);for(var f=0;f<d.length;f++){for(var p=d[f],h=p.name,g=!1,v=s+1;v<this.length;v++){var m=this[v];if("t"===t[v]&&(g=null!=m.properties[p.name]))break}a[h]||g||(a[h]=!0,o.push(h))}}}return n[r]=o,o},getContextMeta:function(e){var t,n="",r=e._private.styleCxtKey||"";this._private.newStyle&&(r="");for(var i=0;i<this.length;i++){var o=this[i];n+=o.selector&&o.selector.matches(e)?"t":"f"}return t=this.getPropertiesDiff(r,n),e._private.styleCxtKey=n,{key:n,diffPropNames:t,empty:0===t.length}},getContextStyle:function(e){var t=e.key,n=this._private.contextStyles=this._private.contextStyles||{};if(n[t])return n[t];for(var r={_private:{key:t}},i=0;i<this.length;i++){var o=this[i];if("t"===t[i])for(var a=0;a<o.properties.length;a++){var s=o.properties[a];r[s.name]=s}}return n[t]=r,r},applyContextStyle:function(e,t,n){for(var r=e.diffPropNames,i={},o=0;o<r.length;o++){var a=r[o],s=t[a],l=n.pstyle(a);if(!s){if(!l)continue;s=l.bypass?{name:a,deleteBypassed:!0}:{name:a,delete:!0}}if(l!==s){var c=i[a]={prev:l};this.applyParsedProperty(n,s),c.next=n.pstyle(a),c.next&&c.next.bypass&&(c.next=c.next.bypassed)}}return{diffProps:i}},updateStyleHints:function(e){var t=e._private;if(!e.removed()){var n=!1;if("nodes"===t.group)for(var r=1;r<=this.pieBackgroundN;r++)if(e.pstyle("pie-"+r+"-background-size").value>0){n=!0;break}t.hasPie=n;var i=e.pstyle("text-transform").strValue,o=e.pstyle("label").strValue,a=e.pstyle("source-label").strValue,s=e.pstyle("target-label").strValue,l=e.pstyle("font-style").strValue,c=e.pstyle("font-size").pfValue+"px",u=e.pstyle("font-family").strValue,d=e.pstyle("font-weight").strValue,f=l+"$"+c+"$"+u+"$"+d+"$"+i+"$"+e.pstyle("text-valign").strValue+"$"+e.pstyle("text-valign").strValue+"$"+e.pstyle("text-outline-width").pfValue+"$"+e.pstyle("text-wrap").strValue+"$"+e.pstyle("text-max-width").pfValue;t.labelStyleKey=f,t.sourceLabelKey=f+"$"+a,t.targetLabelKey=f+"$"+s,t.labelKey=f+"$"+o,t.fontKey=l+"$"+d+"$"+c+"$"+u,t.styleKey=Date.now()}},applyParsedProperty:function(e,t){var n=this,o=t,a=e._private.style,s=void 0,l=n.types,c=n.properties[o.name].type,u=o.bypass,d=a[o.name],f=d&&d.bypass,p=e._private,h=function(){n.checkZOrderTrigger(e,o.name,d?d.value:null,o.value)};if("curve-style"===t.name&&"haystack"===t.value&&e.isEdge()&&(e.isLoop()||e.source().isParent()||e.target().isParent())&&(o=t=this.parse(t.name,"bezier",u)),o.delete)return a[o.name]=void 0,h(),!0;if(o.deleteBypassed)return d?!!d.bypass&&(d.bypassed=void 0,h(),!0):(h(),!0);if(o.deleteBypass)return d?!!d.bypass&&(a[o.name]=d.bypassed,h(),!0):(h(),!0);var g=function(){r.error("Do not assign mappings to elements without corresponding data (e.g. ele `"+e.id()+"` for property `"+o.name+"` with data field `"+o.field+"`); try a `["+o.field+"]` selector to limit scope to elements with `"+o.field+"` defined")};switch(o.mapped){case l.mapData:for(var v=o.field.split("."),m=p.data,b=0;b<v.length&&m;b++)m=m[v[b]];var y=void 0;if((y=i.number(m)?(m-o.fieldMin)/(o.fieldMax-o.fieldMin):0)<0?y=0:y>1&&(y=1),c.color){var x=o.valueMin[0],w=o.valueMax[0],k=o.valueMin[1],A=o.valueMax[1],E=o.valueMin[2],S=o.valueMax[2],C=null==o.valueMin[3]?1:o.valueMin[3],$=null==o.valueMax[3]?1:o.valueMax[3],O=[Math.round(x+(w-x)*y),Math.round(k+(A-k)*y),Math.round(E+(S-E)*y),Math.round(C+($-C)*y)];s={bypass:o.bypass,name:o.name,value:O,strValue:"rgb("+O[0]+", "+O[1]+", "+O[2]+")"}}else{if(!c.number)return!1;var _=o.valueMin+(o.valueMax-o.valueMin)*y;s=this.parse(o.name,_,o.bypass,"mapping")}s||(s=this.parse(o.name,d.strValue,o.bypass,"mapping")),s||g(),s.mapping=o,o=s;break;case l.data:var T=o.field.split("."),j=p.data;if(j)for(var P=0;P<T.length;P++)j=j[T[P]];if(!(s=this.parse(o.name,j,o.bypass,"mapping"))){var D=d?d.strValue:"";s=this.parse(o.name,D,o.bypass,"mapping")}s||g(),s.mapping=o,o=s;break;case l.fn:var R=(0,o.value)(e);(s=this.parse(o.name,R,o.bypass,"mapping")).mapping=o,o=s;break;case void 0:break;default:return!1}return u?(o.bypassed=f?d.bypassed:d,a[o.name]=o):f?d.bypassed=o:a[o.name]=o,h(),!0},cleanElements:function(e,t){for(var n=this.properties,r=0;r<e.length;r++){var i=e[r];if(t)for(var o=i._private.style,a=0;a<n.length;a++){var s=n[a],l=o[s.name];l&&(l.bypass?l.bypassed=null:o[s.name]=null)}else i._private.style={}}},update:function(){this._private.cy.mutableElements().updateStyle()},updateMappers:function(e){for(var t=this._private.cy.collection(),n=0;n<e.length;n++){for(var r=e[n],i=r._private.style,o=!1,a=0;a<this.properties.length;a++){var s=i[this.properties[a].name];if(s&&s.mapping){var l=s.mapping;this.applyParsedProperty(r,l),o=!0}}o&&(this.updateStyleHints(r),t.merge(r))}return t},updateTransitions:function(e,t,n){var r=this,a=e._private,s=e.pstyle("transition-property").value,l=e.pstyle("transition-duration").pfValue,c=e.pstyle("transition-delay").pfValue;if(s.length>0&&l>0){for(var u={},d=!1,f=0;f<s.length;f++){var p=s[f],h=e.pstyle(p),g=t[p];if(g){var v=g.prev,m=null!=g.next?g.next:h,b=!1,y=void 0;v&&(i.number(v.pfValue)&&i.number(m.pfValue)?(b=m.pfValue-v.pfValue,y=v.pfValue+1e-6*b):i.number(v.value)&&i.number(m.value)?(b=m.value-v.value,y=v.value+1e-6*b):i.array(v.value)&&i.array(m.value)&&(b=v.value[0]!==m.value[0]||v.value[1]!==m.value[1]||v.value[2]!==m.value[2],y=v.strValue),b&&(u[p]=m.strValue,this.applyBypass(e,p,y),d=!0))}}if(!d)return;a.transitioning=!0,new o((function(t){c>0?e.delayAnimation(c).play().promise().then(t):t()})).then((function(){return e.animation({style:u,duration:l,easing:e.pstyle("transition-timing-function").value,queue:!1}).play().promise()})).then((function(){r.removeBypasses(e,s),e.emitAndNotify("style"),a.transitioning=!1}))}else a.transitioning&&(this.removeBypasses(e,s),e.emitAndNotify("style"),a.transitioning=!1)},checkZOrderTrigger:function(e,t,n,r){var i=this.properties[t];null==i.triggersZOrder||null!=n&&!i.triggersZOrder(n,r)||this._private.cy.notify({type:"zorder",eles:e})}};e.exports=a},function(e,t,n){"use strict";var r=n(0),i=n(1),o={applyBypass:function(e,t,n,o){var a=[];if("*"===t||"**"===t){if(void 0!==n)for(var s=0;s<this.properties.length;s++){var l=this.properties[s].name,c=this.parse(l,n,!0);c&&a.push(c)}}else if(r.string(t)){var u=this.parse(t,n,!0);u&&a.push(u)}else{if(!r.plainObject(t))return!1;var d=t;o=n;for(var f=Object.keys(d),p=0;p<f.length;p++){var h=f[p],g=(this.properties[h],d[h]);if(void 0===g&&(g=d[i.dash2camel(h)]),void 0!==g){var v=this.parse(h,g,!0);v&&a.push(v)}}}if(0===a.length)return!1;for(var m=!1,b=0;b<e.length;b++){for(var y=e[b],x={},w=void 0,k=0;k<a.length;k++){var A=a[k];if(o){var E=y.pstyle(A.name);w=x[A.name]={prev:E}}m=this.applyParsedProperty(y,A)||m,o&&(w.next=y.pstyle(A.name))}m&&this.updateStyleHints(y),o&&this.updateTransitions(y,x,!0)}return m},overrideBypass:function(e,t,n){t=i.camel2dash(t);for(var r=0;r<e.length;r++){var o=e[r],a=o._private.style[t],s=this.properties[t].type,l=s.color,c=s.mutiple;if(a&&a.bypass){var u=null!=a.pfValue?a.pfValue:a.value;a.value=n,null!=a.pfValue&&(a.pfValue=n),a.strValue=l?"rgb("+n.join(",")+")":c?n.join(" "):""+n,this.checkZOrderTrigger(o,t,u,n)}else this.applyBypass(o,t,n)}},removeAllBypasses:function(e,t){return this.removeBypasses(e,this.propertyNames,t)},removeBypasses:function(e,t,n){for(var r=0;r<e.length;r++){for(var i=e[r],o={},a=0;a<t.length;a++){var s=t[a],l=this.properties[s],c=i.pstyle(l.name);if(c&&c.bypass){var u=this.parse(s,"",!0),d=o[l.name]={prev:c};this.applyParsedProperty(i,u),d.next=i.pstyle(l.name)}}this.updateStyleHints(i),n&&this.updateTransitions(i,o,!0)}}};e.exports=o},function(e,t,n){"use strict";var r=n(3),i={getEmSizeInPixels:function(){var e=this.containerCss("font-size");return null!=e?parseFloat(e):1},containerCss:function(e){var t=this._private.cy.container();if(r&&t&&r.getComputedStyle)return r.getComputedStyle(t).getPropertyValue(e)}};e.exports=i},function(e,t,n){"use strict";var r=n(1),i=n(0),o={getRenderedStyle:function(e,t){return t?this.getStylePropertyValue(e,t,!0):this.getRawStyle(e,!0)},getRawStyle:function(e,t){if(e=e[0]){for(var n={},i=0;i<this.properties.length;i++){var o=this.properties[i],a=this.getStylePropertyValue(e,o.name,t);null!=a&&(n[o.name]=a,n[r.dash2camel(o.name)]=a)}return n}},getIndexedStyle:function(e,t,n,r){var i=e.pstyle(t)[n][r];return null!=i?i:e.cy().style().getDefaultProperty(t)[n][0]},getStylePropertyValue:function(e,t,n){if(e=e[0]){var r=this.properties[t];r.alias&&(r=r.pointsTo);var i=r.type,o=e.pstyle(r.name),a=e.cy().zoom();if(o){var s=o.units?i.implicitUnits||"px":null;return s?[].concat(o.pfValue).map((function(e){return e*(n?a:1)+s})).join(" "):o.strValue}}},getAnimationStartStyle:function(e,t){for(var n={},r=0;r<t.length;r++){var o=t[r].name,a=e.pstyle(o);void 0!==a&&(a=i.plainObject(a)?this.parse(o,a.strValue):this.parse(o,a)),a&&(n[o]=a)}return n},getPropsList:function(e){var t=[],n=e,i=this.properties;if(n)for(var o=Object.keys(n),a=0;a<o.length;a++){var s=o[a],l=n[s],c=i[s]||i[r.camel2dash(s)],u=this.parse(c.name,l);u&&t.push(u)}return t}};e.exports=o},function(e,t,n){"use strict";var r={appendFromJson:function(e){for(var t=0;t<e.length;t++){var n=e[t],r=n.selector,i=n.style||n.css,o=Object.keys(i);this.selector(r);for(var a=0;a<o.length;a++){var s=o[a],l=i[s];this.css(s,l)}}return this},fromJson:function(e){return this.resetToDefault(),this.appendFromJson(e),this},json:function(){for(var e=[],t=this.defaultLength;t<this.length;t++){for(var n=this[t],r=n.selector,i=n.properties,o={},a=0;a<i.length;a++){var s=i[a];o[s.name]=s.strValue}e.push({selector:r?r.toString():"core",style:o})}return e}};e.exports=r},function(e,t,n){"use strict";var r=n(1),i=n(6),o={appendFromString:function(e){var t=""+e,n=void 0,o=void 0,a=void 0;function s(){t=t.length>n.length?t.substr(n.length):""}function l(){o=o.length>a.length?o.substr(a.length):""}for(t=t.replace(/[/][*](\s|.)+?[*][/]/g,"");!t.match(/^\s*$/);){var c=t.match(/^\s*((?:.|\s)+?)\s*\{((?:.|\s)+?)\}/);if(!c){r.error("Halting stylesheet parsing: String stylesheet contains more to parse but no selector and block found in: "+t);break}n=c[0];var u=c[1];if("core"!==u&&new i(u)._private.invalid)r.error("Skipping parsing of block: Invalid selector found in string stylesheet: "+u),s();else{var d=c[2],f=!1;o=d;for(var p=[];!o.match(/^\s*$/);){var h=o.match(/^\s*(.+?)\s*:\s*(.+?)\s*;/);if(!h){r.error("Skipping parsing of block: Invalid formatting of style property and value definitions found in:"+d),f=!0;break}a=h[0];var g=h[1],v=h[2];this.properties[g]?this.parse(g,v)?(p.push({name:g,val:v}),l()):(r.error("Skipping property: Invalid property definition in: "+a),l()):(r.error("Skipping property: Invalid property name in: "+a),l())}if(f){s();break}this.selector(u);for(var m=0;m<p.length;m++){var b=p[m];this.css(b.name,b.val)}s()}}return this},fromString:function(e){return this.resetToDefault(),this.appendFromString(e),this}};e.exports=o},function(e,t,n){"use strict";var r=n(1),i=n(0),o={};!function(){var e=r.regex.number,t=r.regex.rgbaNoBackRefs,n=r.regex.hslaNoBackRefs,a=r.regex.hex3,s=r.regex.hex6,l=function(e){return"^"+e+"\\s*\\(\\s*([\\w\\.]+)\\s*\\)$"},c=function(r){var i=e+"|\\w+|"+t+"|"+n+"|"+a+"|"+s;return"^"+r+"\\s*\\(([\\w\\.]+)\\s*\\,\\s*("+e+")\\s*\\,\\s*("+e+")\\s*,\\s*("+i+")\\s*\\,\\s*("+i+")\\)$"},u=["^url\\s*\\(\\s*['\"]?(.+?)['\"]?\\s*\\)$","^(none)$","^(.+)$"];o.types={time:{number:!0,min:0,units:"s|ms",implicitUnits:"ms"},percent:{number:!0,min:0,max:100,units:"%",implicitUnits:"%"},zeroOneNumber:{number:!0,min:0,max:1,unitless:!0},zeroOneNumbers:{number:!0,min:0,max:1,unitless:!0,multiple:!0},nOneOneNumber:{number:!0,min:-1,max:1,unitless:!0},nonNegativeInt:{number:!0,min:0,integer:!0,unitless:!0},position:{enums:["parent","origin"]},nodeSize:{number:!0,min:0,enums:["label"]},number:{number:!0,unitless:!0},numbers:{number:!0,unitless:!0,multiple:!0},positiveNumber:{number:!0,unitless:!0,min:0,strictMin:!0},size:{number:!0,min:0},bidirectionalSize:{number:!0},bidirectionalSizes:{number:!0,multiple:!0},sizeMaybePercent:{number:!0,min:0,allowPercent:!0},paddingRelativeTo:{enums:["width","height","average","min","max"]},bgWH:{number:!0,min:0,allowPercent:!0,enums:["auto"],multiple:!0},bgPos:{number:!0,allowPercent:!0,multiple:!0},bgRelativeTo:{enums:["inner","include-padding"],multiple:!0},bgRepeat:{enums:["repeat","repeat-x","repeat-y","no-repeat"],multiple:!0},bgFit:{enums:["none","contain","cover"],multiple:!0},bgCrossOrigin:{enums:["anonymous","use-credentials"],multiple:!0},bgClip:{enums:["none","node"]},color:{color:!0},bool:{enums:["yes","no"]},lineStyle:{enums:["solid","dotted","dashed"]},borderStyle:{enums:["solid","dotted","dashed","double"]},curveStyle:{enums:["bezier","unbundled-bezier","haystack","segments"]},fontFamily:{regex:'^([\\w- \\"]+(?:\\s*,\\s*[\\w- \\"]+)*)$'},fontletiant:{enums:["small-caps","normal"]},fontStyle:{enums:["italic","normal","oblique"]},fontWeight:{enums:["normal","bold","bolder","lighter","100","200","300","400","500","600","800","900",100,200,300,400,500,600,700,800,900]},textDecoration:{enums:["none","underline","overline","line-through"]},textTransform:{enums:["none","uppercase","lowercase"]},textWrap:{enums:["none","wrap","ellipsis"]},textBackgroundShape:{enums:["rectangle","roundrectangle"]},nodeShape:{enums:["rectangle","roundrectangle","cutrectangle","bottomroundrectangle","barrel","ellipse","triangle","square","pentagon","hexagon","concavehexagon","heptagon","octagon","tag","star","diamond","vee","rhomboid","polygon"]},compoundIncludeLabels:{enums:["include","exclude"]},arrowShape:{enums:["tee","triangle","triangle-tee","triangle-cross","triangle-backcurve","half-triangle-overshot","vee","square","circle","diamond","none"]},arrowFill:{enums:["filled","hollow"]},display:{enums:["element","none"]},visibility:{enums:["hidden","visible"]},zCompoundDepth:{enums:["bottom","orphan","auto","top"]},zIndexCompare:{enums:["auto","manual"]},valign:{enums:["top","center","bottom"]},halign:{enums:["left","center","right"]},text:{string:!0},data:{mapping:!0,regex:l("data")},layoutData:{mapping:!0,regex:l("layoutData")},scratch:{mapping:!0,regex:l("scratch")},mapData:{mapping:!0,regex:c("mapData")},mapLayoutData:{mapping:!0,regex:c("mapLayoutData")},mapScratch:{mapping:!0,regex:c("mapScratch")},fn:{mapping:!0,fn:!0},url:{regexes:u,singleRegexMatchValue:!0},urls:{regexes:u,singleRegexMatchValue:!0,multiple:!0},propList:{propList:!0},angle:{number:!0,units:"deg|rad",implicitUnits:"rad"},textRotation:{number:!0,units:"deg|rad",implicitUnits:"rad",enums:["none","autorotate"]},polygonPointList:{number:!0,multiple:!0,evenMultiple:!0,min:-1,max:1,unitless:!0},edgeDistances:{enums:["intersection","node-position"]},edgeEndpoint:{number:!0,multiple:!0,units:"%|px|em|deg|rad",implicitUnits:"px",enums:["inside-to-node","outside-to-node","outside-to-line"],singleEnum:!0,validate:function(e,t){switch(e.length){case 2:return"deg"!==t[0]&&"rad"!==t[0]&&"deg"!==t[1]&&"rad"!==t[1];case 1:return i.string(e[0])||"deg"===t[0]||"rad"===t[0];default:return!1}}},easing:{regexes:["^(spring)\\s*\\(\\s*("+e+")\\s*,\\s*("+e+")\\s*\\)$","^(cubic-bezier)\\s*\\(\\s*("+e+")\\s*,\\s*("+e+")\\s*,\\s*("+e+")\\s*,\\s*("+e+")\\s*\\)$"],enums:["linear","ease","ease-in","ease-out","ease-in-out","ease-in-sine","ease-out-sine","ease-in-out-sine","ease-in-quad","ease-out-quad","ease-in-out-quad","ease-in-cubic","ease-out-cubic","ease-in-out-cubic","ease-in-quart","ease-out-quart","ease-in-out-quart","ease-in-quint","ease-out-quint","ease-in-out-quint","ease-in-expo","ease-out-expo","ease-in-out-expo","ease-in-circ","ease-out-circ","ease-in-out-circ"]}};var d={zeroNonZero:function(e,t){return 0===e&&0!==t||0!==e&&0===t},anyDiff:function(e,t){return e!==t}},f=o.types,p=o.properties=[{name:"label",type:f.text},{name:"text-rotation",type:f.textRotation},{name:"text-margin-x",type:f.bidirectionalSize},{name:"text-margin-y",type:f.bidirectionalSize},{name:"source-label",type:f.text},{name:"source-text-rotation",type:f.textRotation},{name:"source-text-margin-x",type:f.bidirectionalSize},{name:"source-text-margin-y",type:f.bidirectionalSize},{name:"source-text-offset",type:f.size},{name:"target-label",type:f.text},{name:"target-text-rotation",type:f.textRotation},{name:"target-text-margin-x",type:f.bidirectionalSize},{name:"target-text-margin-y",type:f.bidirectionalSize},{name:"target-text-offset",type:f.size},{name:"text-valign",type:f.valign},{name:"text-halign",type:f.halign},{name:"color",type:f.color},{name:"text-outline-color",type:f.color},{name:"text-outline-width",type:f.size},{name:"text-outline-opacity",type:f.zeroOneNumber},{name:"text-opacity",type:f.zeroOneNumber},{name:"text-background-color",type:f.color},{name:"text-background-opacity",type:f.zeroOneNumber},{name:"text-background-padding",type:f.size},{name:"text-border-opacity",type:f.zeroOneNumber},{name:"text-border-color",type:f.color},{name:"text-border-width",type:f.size},{name:"text-border-style",type:f.borderStyle},{name:"text-background-shape",type:f.textBackgroundShape},{name:"text-transform",type:f.textTransform},{name:"text-wrap",type:f.textWrap},{name:"text-max-width",type:f.size},{name:"text-events",type:f.bool},{name:"font-family",type:f.fontFamily},{name:"font-style",type:f.fontStyle},{name:"font-weight",type:f.fontWeight},{name:"font-size",type:f.size},{name:"min-zoomed-font-size",type:f.size},{name:"events",type:f.bool},{name:"display",type:f.display,triggersZOrder:d.anyDiff},{name:"visibility",type:f.visibility,triggersZOrder:d.anyDiff},{name:"opacity",type:f.zeroOneNumber,triggersZOrder:d.zeroNonZero},{name:"z-compound-depth",type:f.zCompoundDepth,triggersZOrder:d.anyDiff},{name:"z-index-compare",type:f.zIndexCompare,triggersZOrder:d.anyDiff},{name:"z-index",type:f.nonNegativeInt,triggersZOrder:d.anyDiff},{name:"overlay-padding",type:f.size},{name:"overlay-color",type:f.color},{name:"overlay-opacity",type:f.zeroOneNumber},{name:"transition-property",type:f.propList},{name:"transition-duration",type:f.time},{name:"transition-delay",type:f.time},{name:"transition-timing-function",type:f.easing},{name:"height",type:f.nodeSize},{name:"width",type:f.nodeSize},{name:"shape",type:f.nodeShape},{name:"shape-polygon-points",type:f.polygonPointList},{name:"background-color",type:f.color},{name:"background-opacity",type:f.zeroOneNumber},{name:"background-blacken",type:f.nOneOneNumber},{name:"padding",type:f.sizeMaybePercent},{name:"padding-relative-to",type:f.paddingRelativeTo},{name:"border-color",type:f.color},{name:"border-opacity",type:f.zeroOneNumber},{name:"border-width",type:f.size},{name:"border-style",type:f.borderStyle},{name:"background-image",type:f.urls},{name:"background-image-crossorigin",type:f.bgCrossOrigin},{name:"background-image-opacity",type:f.zeroOneNumbers},{name:"background-position-x",type:f.bgPos},{name:"background-position-y",type:f.bgPos},{name:"background-width-relative-to",type:f.bgRelativeTo},{name:"background-height-relative-to",type:f.bgRelativeTo},{name:"background-repeat",type:f.bgRepeat},{name:"background-fit",type:f.bgFit},{name:"background-clip",type:f.bgClip},{name:"background-width",type:f.bgWH},{name:"background-height",type:f.bgWH},{name:"position",type:f.position},{name:"compound-sizing-wrt-labels",type:f.compoundIncludeLabels},{name:"min-width",type:f.size},{name:"min-width-bias-left",type:f.sizeMaybePercent},{name:"min-width-bias-right",type:f.sizeMaybePercent},{name:"min-height",type:f.size},{name:"min-height-bias-top",type:f.sizeMaybePercent},{name:"min-height-bias-bottom",type:f.sizeMaybePercent},{name:"line-style",type:f.lineStyle},{name:"line-color",type:f.color},{name:"curve-style",type:f.curveStyle},{name:"haystack-radius",type:f.zeroOneNumber},{name:"source-endpoint",type:f.edgeEndpoint},{name:"target-endpoint",type:f.edgeEndpoint},{name:"control-point-step-size",type:f.size},{name:"control-point-distances",type:f.bidirectionalSizes},{name:"control-point-weights",type:f.numbers},{name:"segment-distances",type:f.bidirectionalSizes},{name:"segment-weights",type:f.numbers},{name:"edge-distances",type:f.edgeDistances},{name:"arrow-scale",type:f.positiveNumber},{name:"loop-direction",type:f.angle},{name:"loop-sweep",type:f.angle},{name:"source-distance-from-node",type:f.size},{name:"target-distance-from-node",type:f.size},{name:"ghost",type:f.bool},{name:"ghost-offset-x",type:f.bidirectionalSize},{name:"ghost-offset-y",type:f.bidirectionalSize},{name:"ghost-opacity",type:f.zeroOneNumber},{name:"selection-box-color",type:f.color},{name:"selection-box-opacity",type:f.zeroOneNumber},{name:"selection-box-border-color",type:f.color},{name:"selection-box-border-width",type:f.size},{name:"active-bg-color",type:f.color},{name:"active-bg-opacity",type:f.zeroOneNumber},{name:"active-bg-size",type:f.size},{name:"outside-texture-bg-color",type:f.color},{name:"outside-texture-bg-opacity",type:f.zeroOneNumber}],h=o.aliases=[{name:"content",pointsTo:"label"},{name:"control-point-distance",pointsTo:"control-point-distances"},{name:"control-point-weight",pointsTo:"control-point-weights"},{name:"edge-text-rotation",pointsTo:"text-rotation"},{name:"padding-left",pointsTo:"padding"},{name:"padding-right",pointsTo:"padding"},{name:"padding-top",pointsTo:"padding"},{name:"padding-bottom",pointsTo:"padding"}];o.pieBackgroundN=16,p.push({name:"pie-size",type:f.sizeMaybePercent});for(var g=1;g<=o.pieBackgroundN;g++)p.push({name:"pie-"+g+"-background-color",type:f.color}),p.push({name:"pie-"+g+"-background-size",type:f.percent}),p.push({name:"pie-"+g+"-background-opacity",type:f.zeroOneNumber});var v=o.arrowPrefixes=["source","mid-source","target","mid-target"];[{name:"arrow-shape",type:f.arrowShape},{name:"arrow-color",type:f.color},{name:"arrow-fill",type:f.arrowFill}].forEach((function(e){v.forEach((function(t){var n=t+"-"+e.name,r=e.type;p.push({name:n,type:r})}))}),{}),o.propertyNames=p.map((function(e){return e.name}));for(var m=0;m<p.length;m++){var b=p[m];p[b.name]=b}for(var y=0;y<h.length;y++){var x=h[y],w=p[x.pointsTo],k={name:x.name,alias:!0,pointsTo:w};p.push(k),p[x.name]=k}}(),o.getDefaultProperty=function(e){return this.getDefaultProperties()[e]},o.getDefaultProperties=r.memoize((function(){for(var e=r.extend({events:"yes","text-events":"no","text-valign":"top","text-halign":"center",color:"#000","text-outline-color":"#000","text-outline-width":0,"text-outline-opacity":1,"text-opacity":1,"text-decoration":"none","text-transform":"none","text-wrap":"none","text-max-width":9999,"text-background-color":"#000","text-background-opacity":0,"text-background-shape":"rectangle","text-background-padding":0,"text-border-opacity":0,"text-border-width":0,"text-border-style":"solid","text-border-color":"#000","font-family":"Helvetica Neue, Helvetica, sans-serif","font-style":"normal","font-weight":"normal","font-size":16,"min-zoomed-font-size":0,"text-rotation":"none","source-text-rotation":"none","target-text-rotation":"none",visibility:"visible",display:"element",opacity:1,"z-compound-depth":"auto","z-index-compare":"auto","z-index":0,label:"","text-margin-x":0,"text-margin-y":0,"source-label":"","source-text-offset":0,"source-text-margin-x":0,"source-text-margin-y":0,"target-label":"","target-text-offset":0,"target-text-margin-x":0,"target-text-margin-y":0,"overlay-opacity":0,"overlay-color":"#000","overlay-padding":10,"transition-property":"none","transition-duration":0,"transition-delay":0,"transition-timing-function":"linear","background-blacken":0,"background-color":"#999","background-opacity":1,"background-image":"none","background-image-crossorigin":"anonymous","background-image-opacity":1,"background-position-x":"50%","background-position-y":"50%","background-width-relative-to":"include-padding","background-height-relative-to":"include-padding","background-repeat":"no-repeat","background-fit":"none","background-clip":"node","background-width":"auto","background-height":"auto","border-color":"#000","border-opacity":1,"border-width":0,"border-style":"solid",height:30,width:30,shape:"ellipse","shape-polygon-points":"-1, -1, 1, -1, 1, 1, -1, 1",ghost:"no","ghost-offset-y":0,"ghost-offset-x":0,"ghost-opacity":0,padding:0,"padding-relative-to":"width",position:"origin","compound-sizing-wrt-labels":"include","min-width":0,"min-width-bias-left":0,"min-width-bias-right":0,"min-height":0,"min-height-bias-top":0,"min-height-bias-bottom":0},{"pie-size":"100%"},[{name:"pie-{{i}}-background-color",value:"black"},{name:"pie-{{i}}-background-size",value:"0%"},{name:"pie-{{i}}-background-opacity",value:1}].reduce((function(e,t){for(var n=1;n<=o.pieBackgroundN;n++){var r=t.name.replace("{{i}}",n),i=t.value;e[r]=i}return e}),{}),{"line-style":"solid","line-color":"#999","control-point-step-size":40,"control-point-weights":.5,"segment-weights":.5,"segment-distances":20,"edge-distances":"intersection","curve-style":"bezier","haystack-radius":0,"arrow-scale":1,"loop-direction":"-45deg","loop-sweep":"-90deg","source-distance-from-node":0,"target-distance-from-node":0,"source-endpoint":"outside-to-node","target-endpoint":"outside-to-node"},[{name:"arrow-shape",value:"none"},{name:"arrow-color",value:"#999"},{name:"arrow-fill",value:"filled"}].reduce((function(e,t){return o.arrowPrefixes.forEach((function(n){var r=n+"-"+t.name,i=t.value;e[r]=i})),e}),{})),t={},n=0;n<this.properties.length;n++){var i=this.properties[n];if(!i.pointsTo){var a=i.name,s=e[a],l=this.parse(a,s);t[a]=l}}return t})),o.addDefaultStylesheet=function(){this.selector("$node > node").css({shape:"rectangle",padding:10,"background-color":"#eee","border-color":"#ccc","border-width":1}).selector("edge").css({width:3,"curve-style":"haystack"}).selector(":parent <-> node").css({"curve-style":"bezier","source-endpoint":"outside-to-line","target-endpoint":"outside-to-line"}).selector(":selected").css({"background-color":"#0169D9","line-color":"#0169D9","source-arrow-color":"#0169D9","target-arrow-color":"#0169D9","mid-source-arrow-color":"#0169D9","mid-target-arrow-color":"#0169D9"}).selector("node:parent:selected").css({"background-color":"#CCE1F9","border-color":"#aec8e5"}).selector(":active").css({"overlay-color":"black","overlay-padding":10,"overlay-opacity":.25}).selector("core").css({"selection-box-color":"#ddd","selection-box-opacity":.65,"selection-box-border-color":"#aaa","selection-box-border-width":1,"active-bg-color":"black","active-bg-opacity":.15,"active-bg-size":30,"outside-texture-bg-color":"#000","outside-texture-bg-opacity":.125}),this.defaultLength=this.length},e.exports=o},function(e,t,n){"use strict";var r=n(1),i=n(0),o=n(2),a={parse:function(e,t,n,o){if(i.fn(t))return this.parseImplWarn(e,t,n,o);var a=[e,t,n,"mapping"===o||!0===o||!1===o||null==o?"dontcare":o].join("$"),s=this.propCache=this.propCache||{},l=void 0;return(l=s[a])||(l=s[a]=this.parseImplWarn(e,t,n,o)),(n||"mapping"===o)&&(l=r.copy(l))&&(l.value=r.copy(l.value)),l},parseImplWarn:function(e,t,n,i){var o=this.parseImpl(e,t,n,i);return o||null==t||r.error("The style property `%s: %s` is invalid",e,t),o},parseImpl:function(e,t,n,a){e=r.camel2dash(e);var s=this.properties[e],l=t,c=this.types;if(!s)return null;if(void 0===t)return null;s.alias&&(s=s.pointsTo,e=s.name);var u=i.string(t);u&&(t=t.trim());var d=s.type;if(!d)return null;if(n&&(""===t||null===t))return{name:e,value:t,bypass:!0,deleteBypass:!0};if(i.fn(t))return{name:e,value:t,strValue:"fn",mapped:c.fn,bypass:n};var f=void 0,p=void 0;if(!u||a);else{if(f=new RegExp(c.data.regex).exec(t)){if(n)return!1;var h=c.data;return{name:e,value:f,strValue:""+t,mapped:h,field:f[1],bypass:n}}if(p=new RegExp(c.mapData.regex).exec(t)){if(n)return!1;if(d.multiple)return!1;var g=c.mapData;if(!d.color&&!d.number)return!1;var v=this.parse(e,p[4]);if(!v||v.mapped)return!1;var m=this.parse(e,p[5]);if(!m||m.mapped)return!1;if(v.value===m.value)return!1;if(d.color){var b=v.value,y=m.value;if(!(b[0]!==y[0]||b[1]!==y[1]||b[2]!==y[2]||b[3]!==y[3]&&(null!=b[3]&&1!==b[3]||null!=y[3]&&1!==y[3])))return!1}return{name:e,value:p,strValue:""+t,mapped:g,field:p[1],fieldMin:parseFloat(p[2]),fieldMax:parseFloat(p[3]),valueMin:v.value,valueMax:m.value,bypass:n}}}if(d.multiple&&"multiple"!==a){var x=void 0;if(x=u?t.split(/\s+/):i.array(t)?t:[t],d.evenMultiple&&x.length%2!=0)return null;for(var w=[],k=[],A=[],E=!1,S=0;S<x.length;S++){var C=this.parse(e,x[S],n,"multiple");E=E||i.string(C.value),w.push(C.value),A.push(null!=C.pfValue?C.pfValue:C.value),k.push(C.units)}return d.validate&&!d.validate(w,k)?null:d.singleEnum&&E?1===w.length&&i.string(w[0])?{name:e,value:w[0],strValue:w[0],bypass:n}:null:{name:e,value:w,pfValue:A,strValue:w.map((function(e,t){return e+(k[t]||"")})).join(" "),bypass:n,units:k}}var $=function(){for(var r=0;r<d.enums.length;r++)if(d.enums[r]===t)return{name:e,value:t,strValue:""+t,bypass:n};return null};if(d.number){var O=void 0,_="px";if(d.units&&(O=d.units),d.implicitUnits&&(_=d.implicitUnits),!d.unitless)if(u){var T="px|em"+(d.allowPercent?"|\\%":"");O&&(T=O);var j=t.match("^("+r.regex.number+")("+T+")?$");j&&(t=j[1],O=j[2]||_)}else O&&!d.implicitUnits||(O=_);if(t=parseFloat(t),isNaN(t)&&void 0===d.enums)return null;if(isNaN(t)&&void 0!==d.enums)return t=l,$();if(d.integer&&!i.integer(t))return null;if(void 0!==d.min&&(t<d.min||d.strictMin&&t===d.min)||void 0!==d.max&&(t>d.max||d.strictMax&&t===d.max))return null;var P={name:e,value:t,strValue:""+t+(O||""),units:O,bypass:n};return d.unitless||"px"!==O&&"em"!==O?P.pfValue=t:P.pfValue="px"!==O&&O?this.getEmSizeInPixels()*t:t,"ms"!==O&&"s"!==O||(P.pfValue="ms"===O?t:1e3*t),"deg"!==O&&"rad"!==O||(P.pfValue="rad"===O?t:o.deg2rad(t)),"%"===O&&(P.pfValue=t/100),P}if(d.propList){var D=[],R=""+t;if("none"===R);else{for(var I=R.split(","),N=0;N<I.length;N++){var M=I[N].trim();this.properties[M]&&D.push(M)}if(0===D.length)return null}return{name:e,value:D,strValue:0===D.length?"none":D.join(", "),bypass:n}}if(d.color){var z=r.color2tuple(t);return z?{name:e,value:z,pfValue:z,strValue:""+t,bypass:n}:null}if(d.regex||d.regexes){if(d.enums){var L=$();if(L)return L}for(var B=d.regexes?d.regexes:[d.regex],F=0;F<B.length;F++){var q=new RegExp(B[F]).exec(t);if(q)return{name:e,value:d.singleRegexMatchValue?q[1]:q,strValue:""+t,bypass:n}}return null}return d.string?{name:e,value:""+t,strValue:""+t,bypass:n}:d.enums?$():null}};e.exports=a},function(e,t,n){"use strict";var r=n(0),i=n(3),o=n(2),a={autolock:function(e){return void 0===e?this._private.autolock:(this._private.autolock=!!e,this)},autoungrabify:function(e){return void 0===e?this._private.autoungrabify:(this._private.autoungrabify=!!e,this)},autounselectify:function(e){return void 0===e?this._private.autounselectify:(this._private.autounselectify=!!e,this)},panningEnabled:function(e){return void 0===e?this._private.panningEnabled:(this._private.panningEnabled=!!e,this)},userPanningEnabled:function(e){return void 0===e?this._private.userPanningEnabled:(this._private.userPanningEnabled=!!e,this)},zoomingEnabled:function(e){return void 0===e?this._private.zoomingEnabled:(this._private.zoomingEnabled=!!e,this)},userZoomingEnabled:function(e){return void 0===e?this._private.userZoomingEnabled:(this._private.userZoomingEnabled=!!e,this)},boxSelectionEnabled:function(e){return void 0===e?this._private.boxSelectionEnabled:(this._private.boxSelectionEnabled=!!e,this)},pan:function(){var e=arguments,t=this._private.pan,n=void 0,i=void 0,o=void 0,a=void 0,s=void 0;switch(e.length){case 0:return t;case 1:if(r.string(e[0]))return t[n=e[0]];if(r.plainObject(e[0])){if(!this._private.panningEnabled)return this;a=(o=e[0]).x,s=o.y,r.number(a)&&(t.x=a),r.number(s)&&(t.y=s),this.emit("pan viewport")}break;case 2:if(!this._private.panningEnabled)return this;n=e[0],i=e[1],"x"!==n&&"y"!==n||!r.number(i)||(t[n]=i),this.emit("pan viewport")}return this.notify({type:"viewport"}),this},panBy:function(e,t){var n=arguments,i=this._private.pan,o=void 0,a=void 0,s=void 0,l=void 0,c=void 0;if(!this._private.panningEnabled)return this;switch(n.length){case 1:r.plainObject(e)&&(l=(s=n[0]).x,c=s.y,r.number(l)&&(i.x+=l),r.number(c)&&(i.y+=c),this.emit("pan viewport"));break;case 2:a=t,"x"!==(o=e)&&"y"!==o||!r.number(a)||(i[o]+=a),this.emit("pan viewport")}return this.notify({type:"viewport"}),this},fit:function(e,t){var n=this.getFitViewport(e,t);if(n){var r=this._private;r.zoom=n.zoom,r.pan=n.pan,this.emit("pan zoom viewport"),this.notify({type:"viewport"})}return this},getFitViewport:function(e,t){if(r.number(e)&&void 0===t&&(t=e,e=void 0),this._private.panningEnabled&&this._private.zoomingEnabled){var n=void 0;if(r.string(e)){var i=e;e=this.$(i)}else if(r.boundingBox(e)){var o=e;(n={x1:o.x1,y1:o.y1,x2:o.x2,y2:o.y2}).w=n.x2-n.x1,n.h=n.y2-n.y1}else r.elementOrCollection(e)||(e=this.mutableElements());if(!r.elementOrCollection(e)||!e.empty()){n=n||e.boundingBox();var a=this.width(),s=this.height(),l=void 0;if(t=r.number(t)?t:0,!isNaN(a)&&!isNaN(s)&&a>0&&s>0&&!isNaN(n.w)&&!isNaN(n.h)&&n.w>0&&n.h>0)return{zoom:l=(l=(l=Math.min((a-2*t)/n.w,(s-2*t)/n.h))>this._private.maxZoom?this._private.maxZoom:l)<this._private.minZoom?this._private.minZoom:l,pan:{x:(a-l*(n.x1+n.x2))/2,y:(s-l*(n.y1+n.y2))/2}}}}},minZoom:function(e){return void 0===e?this._private.minZoom:(r.number(e)&&(this._private.minZoom=e),this)},maxZoom:function(e){return void 0===e?this._private.maxZoom:(r.number(e)&&(this._private.maxZoom=e),this)},getZoomedViewport:function(e){var t=this._private,n=t.pan,i=t.zoom,a=void 0,s=void 0,l=!1;if(t.zoomingEnabled||(l=!0),r.number(e)?s=e:r.plainObject(e)&&(s=e.level,null!=e.position?a=o.modelToRenderedPosition(e.position,i,n):null!=e.renderedPosition&&(a=e.renderedPosition),null==a||t.panningEnabled||(l=!0)),s=(s=s>t.maxZoom?t.maxZoom:s)<t.minZoom?t.minZoom:s,l||!r.number(s)||s===i||null!=a&&(!r.number(a.x)||!r.number(a.y)))return null;if(null!=a){var c=n,u=i,d=s;return{zoomed:!0,panned:!0,zoom:d,pan:{x:-d/u*(a.x-c.x)+a.x,y:-d/u*(a.y-c.y)+a.y}}}return{zoomed:!0,panned:!1,zoom:s,pan:n}},zoom:function(e){if(void 0===e)return this._private.zoom;var t=this.getZoomedViewport(e),n=this._private;return null!=t&&t.zoomed?(n.zoom=t.zoom,t.panned&&(n.pan.x=t.pan.x,n.pan.y=t.pan.y),this.emit("zoom"+(t.panned?" pan":"")+" viewport"),this.notify({type:"viewport"}),this):this},viewport:function(e){var t=this._private,n=!0,i=!0,o=[],a=!1,s=!1;if(!e)return this;if(r.number(e.zoom)||(n=!1),r.plainObject(e.pan)||(i=!1),!n&&!i)return this;if(n){var l=e.zoom;l<t.minZoom||l>t.maxZoom||!t.zoomingEnabled?a=!0:(t.zoom=l,o.push("zoom"))}if(i&&(!a||!e.cancelOnFailedZoom)&&t.panningEnabled){var c=e.pan;r.number(c.x)&&(t.pan.x=c.x,s=!1),r.number(c.y)&&(t.pan.y=c.y,s=!1),s||o.push("pan")}return o.length>0&&(o.push("viewport"),this.emit(o.join(" ")),this.notify({type:"viewport"})),this},center:function(e){var t=this.getCenterPan(e);return t&&(this._private.pan=t,this.emit("pan viewport"),this.notify({type:"viewport"})),this},getCenterPan:function(e,t){if(this._private.panningEnabled){if(r.string(e)){var n=e;e=this.mutableElements().filter(n)}else r.elementOrCollection(e)||(e=this.mutableElements());if(0!==e.length){var i=e.boundingBox(),o=this.width(),a=this.height();return{x:(o-(t=void 0===t?this._private.zoom:t)*(i.x1+i.x2))/2,y:(a-t*(i.y1+i.y2))/2}}}},reset:function(){return this._private.panningEnabled&&this._private.zoomingEnabled?(this.viewport({pan:{x:0,y:0},zoom:1}),this):this},invalidateSize:function(){this._private.sizeCache=null},size:function(){var e,t,n=this._private,r=n.container;return n.sizeCache=n.sizeCache||(r?(e=i.getComputedStyle(r),t=function(t){return parseFloat(e.getPropertyValue(t))},{width:r.clientWidth-t("padding-left")-t("padding-right"),height:r.clientHeight-t("padding-top")-t("padding-bottom")}):{width:1,height:1})},width:function(){return this.size().width},height:function(){return this.size().height},extent:function(){var e=this._private.pan,t=this._private.zoom,n=this.renderedExtent(),r={x1:(n.x1-e.x)/t,x2:(n.x2-e.x)/t,y1:(n.y1-e.y)/t,y2:(n.y2-e.y)/t};return r.w=r.x2-r.x1,r.h=r.y2-r.y1,r},renderedExtent:function(){var e=this.width(),t=this.height();return{x1:0,y1:0,x2:e,y2:t,w:e,h:t}}};a.centre=a.center,a.autolockNodes=a.autolock,a.autoungrabifyNodes=a.autoungrabify,e.exports=a},function(e,t,n){"use strict";var r=n(1),i=n(4),o=n(7),a=n(12),s=n(95),l=n(0),c=n(11),u={},d={};function f(e,t,n){var s=n,d=function(n){r.error("Can not register `"+t+"` for `"+e+"` since `"+n+"` already exists in the prototype and can not be overridden")};if("core"===e){if(a.prototype[t])return d(t);a.prototype[t]=n}else if("collection"===e){if(o.prototype[t])return d(t);o.prototype[t]=n}else if("layout"===e){for(var f=function(e){this.options=e,n.call(this,e),l.plainObject(this._private)||(this._private={}),this._private.cy=e.cy,this._private.listeners=[],this.createEmitter()},h=f.prototype=Object.create(n.prototype),g=[],v=0;v<g.length;v++){var m=g[v];h[m]=h[m]||function(){return this}}h.start&&!h.run?h.run=function(){return this.start(),this}:!h.start&&h.run&&(h.start=function(){return this.run(),this});var b=n.prototype.stop;h.stop=function(){var e=this.options;if(e&&e.animate){var t=this.animations;if(t)for(var n=0;n<t.length;n++)t[n].stop()}return b?b.call(this):this.emit("layoutstop"),this},h.destroy||(h.destroy=function(){return this}),h.cy=function(){return this._private.cy};var y=function(e){return e._private.cy};r.assign(h,{createEmitter:function(){return this._private.emitter=new c({eventFields:function(e){return{layout:e,cy:y(e),target:e}},bubble:function(){return!0},parent:function(e){return y(e)},context:this}),this},emitter:function(){return this._private.emitter},on:function(e,t){return this.emitter().on(e,t),this},one:function(e,t){return this.emitter().one(e,t),this},once:function(e,t){return this.emitter().one(e,t),this},removeListener:function(e,t){return this.emitter().removeListener(e,t),this},emit:function(e,t){return this.emitter().emit(e,t),this}}),i.eventAliasesOn(h),s=f}else if("renderer"===e&&"null"!==t&&"base"!==t){var x=p("renderer","base"),w=x.prototype,k=n,A=n.prototype,E=function(){x.apply(this,arguments),k.apply(this,arguments)},S=E.prototype;for(var C in w){var $=w[C];if(null!=A[C])return d(C);S[C]=$}for(var O in A)S[O]=A[O];w.clientFunctions.forEach((function(e){S[e]=S[e]||function(){r.error("Renderer does not implement `renderer."+e+"()` on its prototype")}})),s=E}return r.setMap({map:u,keys:[e,t],value:s})}function p(e,t){return r.getMap({map:u,keys:[e,t]})}function h(e,t,n,i,o){return r.setMap({map:d,keys:[e,t,n,i],value:o})}function g(e,t,n,i){return r.getMap({map:d,keys:[e,t,n,i]})}var v=function(){return 2===arguments.length?p.apply(null,arguments):3===arguments.length?f.apply(null,arguments):4===arguments.length?g.apply(null,arguments):5===arguments.length?h.apply(null,arguments):void r.error("Invalid extension access syntax")};a.prototype.extension=v,s.forEach((function(e){e.extensions.forEach((function(t){f(e.type,t.name,t.impl)}))})),e.exports=v},function(e,t,n){"use strict";e.exports=[{type:"layout",extensions:n(96)},{type:"renderer",extensions:n(105)}]},function(e,t,n){"use strict";e.exports=[{name:"breadthfirst",impl:n(97)},{name:"circle",impl:n(98)},{name:"concentric",impl:n(99)},{name:"cose",impl:n(100)},{name:"grid",impl:n(101)},{name:"null",impl:n(102)},{name:"preset",impl:n(103)},{name:"random",impl:n(104)}]},function(e,t,n){"use strict";var r=n(1),i=n(2),o=n(0),a={fit:!0,directed:!1,padding:30,circle:!1,spacingFactor:1.75,boundingBox:void 0,avoidOverlap:!0,nodeDimensionsIncludeLabels:!1,roots:void 0,maximalAdjustments:0,animate:!1,animationDuration:500,animationEasing:void 0,animateFilter:function(e,t){return!0},ready:void 0,stop:void 0,transform:function(e,t){return t}};function s(e){this.options=r.extend({},a,e)}s.prototype.run=function(){var e=this.options,t=e,n=e.cy,r=t.eles,a=r.nodes().not(":parent"),s=r,l=i.makeBoundingBox(t.boundingBox?t.boundingBox:{x1:0,y1:0,w:n.width(),h:n.height()}),c=void 0;if(o.elementOrCollection(t.roots))c=t.roots;else if(o.array(t.roots)){for(var u=[],d=0;d<t.roots.length;d++){var f=t.roots[d],p=n.getElementById(f);u.push(p)}c=n.collection(u)}else if(o.string(t.roots))c=n.$(t.roots);else if(t.directed)c=a.roots();else{for(var h=[],g=a,v=function(){var e=n.collection();r.bfs({roots:g[0],visit:function(t,n,r,i,o){e=e.add(t)},directed:!1}),g=g.not(e),h.push(e)};g.length>0;)v();c=n.collection();for(var m=function(e){var t=h[e],n=t.maxDegree(!1),r=t.filter((function(e){return e.degree(!1)===n}));c=c.add(r)},b=0;b<h.length;b++)m(b)}var y=[],x={},w={},k={},A={},E={};s.bfs({roots:c,directed:t.directed,visit:function(e,t,n,r,i){var o=e[0],a=o.id();if(y[i]||(y[i]=[]),y[i].push(o),x[a]=!0,w[a]=i,k[a]=n,A[a]=t,n){var s=n.id();(E[s]=E[s]||[]).push(e)}}});for(var S=[],C=0;C<a.length;C++){var $=a[C];x[$.id()]||S.push($)}for(var O=3*S.length,_=0;0!==S.length&&_<O;){for(var T=S.shift(),j=T.neighborhood().nodes(),P=!1,D=0;D<j.length;D++){var R=w[j[D].id()];if(void 0!==R){y[R].push(T),P=!0;break}}P||S.push(T),_++}for(;0!==S.length;){var I=S.shift();0===y.length&&y.push([]),y[0].push(I)}var N=function(){for(var e=0;e<y.length;e++)for(var t=y[e],n=0;n<t.length;n++){var r=t[n];null!=r?r._private.scratch.breadthfirst={depth:e,index:n}:(t.splice(n,1),n--)}};N();for(var M=function(e){for(var t=e.connectedEdges((function(t){return t.data("target")===e.id()})),n=e._private.scratch.breadthfirst,r=0,i=void 0,o=0;o<t.length;o++){var a=t[o].source()[0],s=a._private.scratch.breadthfirst;n.depth<=s.depth&&r<s.depth&&(r=s.depth,i=a)}return i},z=0;z<t.maximalAdjustments;z++){for(var L=y.length,B=[],F=0;F<L;F++)for(var q=y[F],V=q.length,U=0;U<V;U++){var H=q[U],G=H._private.scratch.breadthfirst,W=M(H);W&&(G.intEle=W,B.push(H))}for(var Y=0;Y<B.length;Y++){var X=B[Y],Z=X._private.scratch.breadthfirst,Q=Z.intEle._private.scratch.breadthfirst;y[Z.depth][Z.index]=null;for(var J=Q.depth+1;J>y.length-1;)y.push([]);y[J].push(X),Z.depth=J,Z.index=y[J].length-1}N()}var K=0;if(t.avoidOverlap)for(var ee=0;ee<a.length;ee++){var te=a[ee].layoutDimensions(t),ne=te.w,re=te.h;K=Math.max(K,ne,re)}for(var ie={},oe=function(e){if(ie[e.id()])return ie[e.id()];for(var t=e._private.scratch.breadthfirst.depth,n=e.neighborhood().nodes().not(":parent").intersection(a),r=0,i=0,o=0;o<n.length;o++){var s=n[o]._private.scratch.breadthfirst,l=s.index,c=s.depth,u=y[c].length;(t>c||0===t)&&(r+=l/u,i++)}return r/=i=Math.max(1,i),0===i&&(r=void 0),ie[e.id()]=r,r},ae=function(e,t){return oe(e)-oe(t)},se=0;se<3;se++){for(var le=0;le<y.length;le++)y[le]=y[le].sort(ae);N()}for(var ce=0,ue=0;ue<y.length;ue++)ce=Math.max(y[ue].length,ce);for(var de=l.x1+l.w/2,fe=l.x1+l.h/2,pe=function(e,n){var r=e._private.scratch.breadthfirst,i=r.depth,o=r.index,a=y[i].length,s=Math.max(l.w/(a+1),K),c=Math.max(l.h/(y.length+1),K),u=Math.min(l.w/2/y.length,l.h/2/y.length);if(u=Math.max(u,K),t.circle){if(t.circle){var d=u*i+u-(y.length>0&&y[0].length<=3?u/2:0),f=2*Math.PI/y[i].length*o;return 0===i&&1===y[0].length&&(d=1),{x:de+d*Math.cos(f),y:fe+d*Math.sin(f)}}return{x:de+(o+1-(a+1)/2)*s,y:(i+1)*c}}var p={x:de+(o+1-(a+1)/2)*s,y:(i+1)*c};return p},he={},ge=y.length-1;ge>=0;ge--)for(var ve=y[ge],me=0;me<ve.length;me++){var be=ve[me];he[be.id()]=pe(be,y.length)}return a.layoutPositions(this,t,(function(e){return he[e.id()]})),this},e.exports=s},function(e,t,n){"use strict";var r=n(1),i=n(2),o=n(0),a={fit:!0,padding:30,boundingBox:void 0,avoidOverlap:!0,nodeDimensionsIncludeLabels:!1,spacingFactor:void 0,radius:void 0,startAngle:1.5*Math.PI,sweep:void 0,clockwise:!0,sort:void 0,animate:!1,animationDuration:500,animationEasing:void 0,animateFilter:function(e,t){return!0},ready:void 0,stop:void 0,transform:function(e,t){return t}};function s(e){this.options=r.extend({},a,e)}s.prototype.run=function(){var e=this.options,t=e,n=e.cy,r=t.eles,a=void 0!==t.counterclockwise?!t.counterclockwise:t.clockwise,s=r.nodes().not(":parent");t.sort&&(s=s.sort(t.sort));for(var l=i.makeBoundingBox(t.boundingBox?t.boundingBox:{x1:0,y1:0,w:n.width(),h:n.height()}),c=l.x1+l.w/2,u=l.y1+l.h/2,d=(void 0===t.sweep?2*Math.PI-2*Math.PI/s.length:t.sweep)/Math.max(1,s.length-1),f=void 0,p=0,h=0;h<s.length;h++){var g=s[h].layoutDimensions(t),v=g.w,m=g.h;p=Math.max(p,v,m)}if(f=o.number(t.radius)?t.radius:s.length<=1?0:Math.min(l.h,l.w)/2-p,s.length>1&&t.avoidOverlap){p*=1.75;var b=Math.cos(d)-Math.cos(0),y=Math.sin(d)-Math.sin(0),x=Math.sqrt(p*p/(b*b+y*y));f=Math.max(x,f)}return s.layoutPositions(this,t,(function(e,n){var r=t.startAngle+n*d*(a?1:-1),i=f*Math.cos(r),o=f*Math.sin(r);return{x:c+i,y:u+o}})),this},e.exports=s},function(e,t,n){"use strict";var r=n(1),i=n(2),o={fit:!0,padding:30,startAngle:1.5*Math.PI,sweep:void 0,clockwise:!0,equidistant:!1,minNodeSpacing:10,boundingBox:void 0,avoidOverlap:!0,nodeDimensionsIncludeLabels:!1,height:void 0,width:void 0,spacingFactor:void 0,concentric:function(e){return e.degree()},levelWidth:function(e){return e.maxDegree()/4},animate:!1,animationDuration:500,animationEasing:void 0,animateFilter:function(e,t){return!0},ready:void 0,stop:void 0,transform:function(e,t){return t}};function a(e){this.options=r.extend({},o,e)}a.prototype.run=function(){for(var e=this.options,t=e,n=void 0!==t.counterclockwise?!t.counterclockwise:t.clockwise,r=e.cy,o=t.eles.nodes().not(":parent"),a=i.makeBoundingBox(t.boundingBox?t.boundingBox:{x1:0,y1:0,w:r.width(),h:r.height()}),s=a.x1+a.w/2,l=a.y1+a.h/2,c=[],u=(t.startAngle,0),d=0;d<o.length;d++){var f,p=o[d];f=t.concentric(p),c.push({value:f,node:p}),p._private.scratch.concentric=f}o.updateStyle();for(var h=0;h<o.length;h++){var g=o[h].layoutDimensions(t);u=Math.max(u,g.w,g.h)}c.sort((function(e,t){return t.value-e.value}));for(var v=t.levelWidth(o),m=[[]],b=m[0],y=0;y<c.length;y++){var x=c[y];b.length>0&&Math.abs(b[0].value-x.value)>=v&&(b=[],m.push(b)),b.push(x)}var w=u+t.minNodeSpacing;if(!t.avoidOverlap){var k=m.length>0&&m[0].length>1,A=(Math.min(a.w,a.h)/2-w)/(m.length+k?1:0);w=Math.min(w,A)}for(var E=0,S=0;S<m.length;S++){var C=m[S],$=void 0===t.sweep?2*Math.PI-2*Math.PI/C.length:t.sweep,O=C.dTheta=$/Math.max(1,C.length-1);if(C.length>1&&t.avoidOverlap){var _=Math.cos(O)-Math.cos(0),T=Math.sin(O)-Math.sin(0),j=Math.sqrt(w*w/(_*_+T*T));E=Math.max(j,E)}C.r=E,E+=w}if(t.equidistant){for(var P=0,D=0,R=0;R<m.length;R++){var I=m[R].r-D;P=Math.max(P,I)}D=0;for(var N=0;N<m.length;N++){var M=m[N];0===N&&(D=M.r),M.r=D,D+=P}}for(var z={},L=0;L<m.length;L++)for(var B=m[L],F=B.dTheta,q=B.r,V=0;V<B.length;V++){var U=B[V],H=t.startAngle+(n?1:-1)*F*V,G={x:s+q*Math.cos(H),y:l+q*Math.sin(H)};z[U.node.id()]=G}return o.layoutPositions(this,t,(function(e){var t=e.id();return z[t]})),this},e.exports=a},function(e,t,n){"use strict";var r,i=n(1),o=n(2),a=n(0),s=n(5),l={ready:function(){},stop:function(){},animate:!0,animationEasing:void 0,animationDuration:void 0,animateFilter:function(e,t){return!0},animationThreshold:250,refresh:20,fit:!0,padding:30,boundingBox:void 0,nodeDimensionsIncludeLabels:!1,randomize:!1,componentSpacing:40,nodeRepulsion:function(e){return 2048},nodeOverlap:4,idealEdgeLength:function(e){return 32},edgeElasticity:function(e){return 32},nestingFactor:1.2,gravity:1,numIter:1e3,initialTemp:1e3,coolingFactor:.99,minTemp:1,weaver:!1};function c(e){this.options=i.extend({},l,e),this.options.layout=this}c.prototype.run=function(){var e=this.options,t=e.cy,n=this,o=this.thread,l=e.weaver?e.weaver.Thread:null,c={listeners:[],on:function(e,t){return this.listeners.push({event:e,callback:t}),this},trigger:function(e){a.string(e)&&(e={type:e});var t=function(t){t.callback(e)};return this.listeners.filter((function(t){return t.event===e.type})).forEach(t),this},pass:function(e){return this.pass=e,this},run:function(e){var t=this.pass;return new s((function(n){n(e(t))}))},stop:function(){return this},stopped:function(){return!0}};o&&!o.stopped()||(o=this.thread=l?new l:c),n.stopped=!1,!0!==e.animate&&!1!==e.animate||n.emit({type:"layoutstart",layout:n}),r=!0===e.debug;var d=u(t,n,e);r&&p(d),e.randomize&&h(d,t);var f=Date.now(),v=!1,m=function(n){n=n||{},v&&!n.next||!n.force&&Date.now()-f<e.animationThreshold||(v=!0,i.requestAnimationFrame((function(){g(d,t,e),!0===e.fit&&t.fit(e.padding),v=!1,n.next&&n.next()})))};o.on("message",(function(e){var t=e.message;d.layoutNodes=t,m()})),o.pass({layoutInfo:d,options:{animate:e.animate,refresh:e.refresh,componentSpacing:e.componentSpacing,nodeOverlap:e.nodeOverlap,nestingFactor:e.nestingFactor,gravity:e.gravity,numIter:e.numIter,initialTemp:e.initialTemp,coolingFactor:e.coolingFactor,minTemp:e.minTemp}}).run((function(e){var t,n,r=e.layoutInfo,i=e.options,o=function(e,t){for(var n=0;n<e.graphSet.length;n++)for(var r=e.graphSet[n],i=r.length,o=0;o<i;o++)for(var a=e.layoutNodes[e.idToIndex[r[o]]],l=o+1;l<i;l++){var c=e.layoutNodes[e.idToIndex[r[l]]];s(a,c,e,t)}},a=function(e){return-e+2*e*Math.random()},s=function(e,t,n,r){if(e.cmptId===t.cmptId||n.isCompound){var i=t.positionX-e.positionX,o=t.positionY-e.positionY;0===i&&0===o&&(i=a(1),o=a(1));var s=l(e,t,i,o);if(s>0)var c=(f=r.nodeOverlap*s)*i/(b=Math.sqrt(i*i+o*o)),d=f*o/b;else{var f,p=u(e,i,o),h=u(t,-1*i,-1*o),g=h.x-p.x,v=h.y-p.y,m=g*g+v*v,b=Math.sqrt(m);c=(f=(e.nodeRepulsion+t.nodeRepulsion)/m)*g/b,d=f*v/b}e.isLocked||(e.offsetX-=c,e.offsetY-=d),t.isLocked||(t.offsetX+=c,t.offsetY+=d)}},l=function(e,t,n,r){if(n>0)var i=e.maxX-t.minX;else i=t.maxX-e.minX;if(r>0)var o=e.maxY-t.minY;else o=t.maxY-e.minY;return i>=0&&o>=0?Math.sqrt(i*i+o*o):0},u=function(e,t,n){var r=e.positionX,i=e.positionY,o=e.height||1,a=e.width||1,s=n/t,l=o/a,c={};return 0===t&&0<n||0===t&&0>n?(c.x=r,c.y=i+o/2,c):0<t&&-1*l<=s&&s<=l?(c.x=r+a/2,c.y=i+a*n/2/t,c):0>t&&-1*l<=s&&s<=l?(c.x=r-a/2,c.y=i-a*n/2/t,c):0<n&&(s<=-1*l||s>=l)?(c.x=r+o*t/2/n,c.y=i+o/2,c):0>n&&(s<=-1*l||s>=l)?(c.x=r-o*t/2/n,c.y=i-o/2,c):c},d=function(e,t){for(var n=0;n<e.edgeSize;n++){var r=e.layoutEdges[n],i=e.idToIndex[r.sourceId],o=e.layoutNodes[i],a=e.idToIndex[r.targetId],s=e.layoutNodes[a],l=s.positionX-o.positionX,c=s.positionY-o.positionY;if(0!==l||0!==c){var d=u(o,l,c),f=u(s,-1*l,-1*c),p=f.x-d.x,h=f.y-d.y,g=Math.sqrt(p*p+h*h),v=Math.pow(r.idealLength-g,2)/r.elasticity;if(0!==g)var m=v*p/g,b=v*h/g;else m=0,b=0;o.isLocked||(o.offsetX+=m,o.offsetY+=b),s.isLocked||(s.offsetX-=m,s.offsetY-=b)}}},f=function(e,t){for(var n=0;n<e.graphSet.length;n++){var r=e.graphSet[n],i=r.length;if(0===n)var o=e.clientHeight/2,a=e.clientWidth/2;else{var s=e.layoutNodes[e.idToIndex[r[0]]],l=e.layoutNodes[e.idToIndex[s.parentId]];o=l.positionX,a=l.positionY}for(var c=0;c<i;c++){var u=e.layoutNodes[e.idToIndex[r[c]]];if(!u.isLocked){var d=o-u.positionX,f=a-u.positionY,p=Math.sqrt(d*d+f*f);if(p>1){var h=t.gravity*d/p,g=t.gravity*f/p;u.offsetX+=h,u.offsetY+=g}}}}},p=function(e,t){var n=[],r=0,i=-1;for(n.push.apply(n,e.graphSet[0]),i+=e.graphSet[0].length;r<=i;){var o=n[r++],a=e.idToIndex[o],s=e.layoutNodes[a],l=s.children;if(0<l.length&&!s.isLocked){for(var c=s.offsetX,u=s.offsetY,d=0;d<l.length;d++){var f=e.layoutNodes[e.idToIndex[l[d]]];f.offsetX+=c,f.offsetY+=u,n[++i]=l[d]}s.offsetX=0,s.offsetY=0}}},h=function(e,t){for(var n=0;n<e.nodeSize;n++)0<(i=e.layoutNodes[n]).children.length&&(i.maxX=void 0,i.minX=void 0,i.maxY=void 0,i.minY=void 0);for(n=0;n<e.nodeSize;n++)if(!(0<(i=e.layoutNodes[n]).children.length||i.isLocked)){var r=g(i.offsetX,i.offsetY,e.temperature);i.positionX+=r.x,i.positionY+=r.y,i.offsetX=0,i.offsetY=0,i.minX=i.positionX-i.width,i.maxX=i.positionX+i.width,i.minY=i.positionY-i.height,i.maxY=i.positionY+i.height,v(i,e)}for(n=0;n<e.nodeSize;n++){var i;0<(i=e.layoutNodes[n]).children.length&&!i.isLocked&&(i.positionX=(i.maxX+i.minX)/2,i.positionY=(i.maxY+i.minY)/2,i.width=i.maxX-i.minX,i.height=i.maxY-i.minY)}},g=function(e,t,n){var r=Math.sqrt(e*e+t*t);if(r>n)var i={x:n*e/r,y:n*t/r};else i={x:e,y:t};return i},v=function e(t,n){var r=t.parentId;if(null!=r){var i=n.layoutNodes[n.idToIndex[r]],o=!1;return(null==i.maxX||t.maxX+i.padRight>i.maxX)&&(i.maxX=t.maxX+i.padRight,o=!0),(null==i.minX||t.minX-i.padLeft<i.minX)&&(i.minX=t.minX-i.padLeft,o=!0),(null==i.maxY||t.maxY+i.padBottom>i.maxY)&&(i.maxY=t.maxY+i.padBottom,o=!0),(null==i.minY||t.minY-i.padTop<i.minY)&&(i.minY=t.minY-i.padTop,o=!0),o?e(i,n):void 0}},m=function(e){return function(e,t,n){o(e,t),d(e,t),f(e,t),p(e,t),h(e,t)}(r,i),r.temperature=r.temperature*i.coolingFactor,!(r.temperature<i.minTemp)},b=0;do{for(var y=0;y<i.refresh&&b<i.numIter;){var x;if(!(x=m()))break;y++,b++}!0===i.animate&&(t=r.layoutNodes,n=void 0,n={type:"message",message:t},c.trigger(n))}while(x&&b+1<i.numIter);return function(e,t){for(var n=r.layoutNodes,i=[],o=0;o<n.length;o++){var a=n[o],s=a.cmptId;(i[s]=i[s]||[]).push(a)}var l=0;for(o=0;o<i.length;o++)if(v=i[o]){v.x1=1/0,v.x2=-1/0,v.y1=1/0,v.y2=-1/0;for(var c=0;c<v.length;c++){var u=v[c];v.x1=Math.min(v.x1,u.positionX-u.width/2),v.x2=Math.max(v.x2,u.positionX+u.width/2),v.y1=Math.min(v.y1,u.positionY-u.height/2),v.y2=Math.max(v.y2,u.positionY+u.height/2)}v.w=v.x2-v.x1,v.h=v.y2-v.y1,l+=v.w*v.h}i.sort((function(e,t){return t.w*t.h-e.w*e.h}));var d=0,f=0,p=0,h=0,g=Math.sqrt(l)*r.clientWidth/r.clientHeight;for(o=0;o<i.length;o++){var v;if(v=i[o]){for(c=0;c<v.length;c++)(u=v[c]).isLocked||(u.positionX+=d,u.positionY+=f);d+=v.w+t.componentSpacing,p+=v.w+t.componentSpacing,h=Math.max(h,v.h),p>g&&(f+=h+t.componentSpacing,d=0,p=0,h=0)}}}(0,i),r})).then((function(e){d.layoutNodes=e.layoutNodes,o.stop(),b()}));var b=function(){!0===e.animate||!1===e.animate?m({force:!0,next:function(){n.one("layoutstop",e.stop),n.emit({type:"layoutstop",layout:n})}}):e.eles.nodes().layoutPositions(n,e,(function(e){var t=d.layoutNodes[d.idToIndex[e.data("id")]];return{x:t.positionX,y:t.positionY}}))};return this},c.prototype.stop=function(){return this.stopped=!0,this.thread&&this.thread.stop(),this.emit("layoutstop"),this},c.prototype.destroy=function(){return this.thread&&this.thread.stop(),this};var u=function(e,t,n){for(var r=n.eles.edges(),i=n.eles.nodes(),s={isCompound:e.hasCompoundNodes(),layoutNodes:[],idToIndex:{},nodeSize:i.size(),graphSet:[],indexToGraph:[],layoutEdges:[],edgeSize:r.size(),temperature:n.initialTemp,clientWidth:e.width(),clientHeight:e.width(),boundingBox:o.makeBoundingBox(n.boundingBox?n.boundingBox:{x1:0,y1:0,w:e.width(),h:e.height()})},l=n.eles.components(),c={},u=0;u<l.length;u++)for(var f=l[u],p=0;p<f.length;p++)c[f[p].id()]=u;for(u=0;u<s.nodeSize;u++){var h=(y=i[u]).layoutDimensions(n);(I={}).isLocked=y.locked(),I.id=y.data("id"),I.parentId=y.data("parent"),I.cmptId=c[y.id()],I.children=[],I.positionX=y.position("x"),I.positionY=y.position("y"),I.offsetX=0,I.offsetY=0,I.height=h.w,I.width=h.h,I.maxX=I.positionX+I.width/2,I.minX=I.positionX-I.width/2,I.maxY=I.positionY+I.height/2,I.minY=I.positionY-I.height/2,I.padLeft=parseFloat(y.style("padding")),I.padRight=parseFloat(y.style("padding")),I.padTop=parseFloat(y.style("padding")),I.padBottom=parseFloat(y.style("padding")),I.nodeRepulsion=a.fn(n.nodeRepulsion)?n.nodeRepulsion(y):n.nodeRepulsion,s.layoutNodes.push(I),s.idToIndex[I.id]=u}var g=[],v=0,m=-1,b=[];for(u=0;u<s.nodeSize;u++){var y,x=(y=s.layoutNodes[u]).parentId;null!=x?s.layoutNodes[s.idToIndex[x]].children.push(y.id):(g[++m]=y.id,b.push(y.id))}for(s.graphSet.push(b);v<=m;){var w=g[v++],k=s.idToIndex[w],A=s.layoutNodes[k].children;if(A.length>0)for(s.graphSet.push(A),u=0;u<A.length;u++)g[++m]=A[u]}for(u=0;u<s.graphSet.length;u++){var E=s.graphSet[u];for(p=0;p<E.length;p++){var S=s.idToIndex[E[p]];s.indexToGraph[S]=u}}for(u=0;u<s.edgeSize;u++){var C=r[u],$={};$.id=C.data("id"),$.sourceId=C.data("source"),$.targetId=C.data("target");var O=a.fn(n.idealEdgeLength)?n.idealEdgeLength(C):n.idealEdgeLength,_=a.fn(n.edgeElasticity)?n.edgeElasticity(C):n.edgeElasticity,T=s.idToIndex[$.sourceId],j=s.idToIndex[$.targetId];if(s.indexToGraph[T]!=s.indexToGraph[j]){for(var P=d($.sourceId,$.targetId,s),D=s.graphSet[P],R=0,I=s.layoutNodes[T];-1===D.indexOf(I.id);)I=s.layoutNodes[s.idToIndex[I.parentId]],R++;for(I=s.layoutNodes[j];-1===D.indexOf(I.id);)I=s.layoutNodes[s.idToIndex[I.parentId]],R++;O*=R*n.nestingFactor}$.idealLength=O,$.elasticity=_,s.layoutEdges.push($)}return s},d=function(e,t,n){var r=f(e,t,0,n);return 2>r.count?0:r.graph},f=function e(t,n,r,i){var o=i.graphSet[r];if(-1<o.indexOf(t)&&-1<o.indexOf(n))return{count:2,graph:r};for(var a=0,s=0;s<o.length;s++){var l=o[s],c=i.idToIndex[l],u=i.layoutNodes[c].children;if(0!==u.length){var d=e(t,n,i.indexToGraph[i.idToIndex[u[0]]],i);if(0!==d.count){if(1!==d.count)return d;if(2==++a)break}}}return{count:a,graph:r}},p=function(e){if(r){console.debug("layoutNodes:");for(var t=0;t<e.nodeSize;t++){var n=e.layoutNodes[t],i="\nindex: "+t+"\nId: "+n.id+"\nChildren: "+n.children.toString()+"\nparentId: "+n.parentId+"\npositionX: "+n.positionX+"\npositionY: "+n.positionY+"\nOffsetX: "+n.offsetX+"\nOffsetY: "+n.offsetY+"\npadLeft: "+n.padLeft+"\npadRight: "+n.padRight+"\npadTop: "+n.padTop+"\npadBottom: "+n.padBottom;console.debug(i)}for(var t in console.debug("idToIndex"),e.idToIndex)console.debug("Id: "+t+"\nIndex: "+e.idToIndex[t]);console.debug("Graph Set");var o=e.graphSet;for(t=0;t<o.length;t++)console.debug("Set : "+t+": "+o[t].toString());for(i="IndexToGraph",t=0;t<e.indexToGraph.length;t++)i+="\nIndex : "+t+" Graph: "+e.indexToGraph[t];for(console.debug(i),i="Layout Edges",t=0;t<e.layoutEdges.length;t++){var a=e.layoutEdges[t];i+="\nEdge Index: "+t+" ID: "+a.id+" SouceID: "+a.sourceId+" TargetId: "+a.targetId+" Ideal Length: "+a.idealLength}console.debug(i),i="nodeSize: "+e.nodeSize,i+="\nedgeSize: "+e.edgeSize,i+="\ntemperature: "+e.temperature,console.debug(i)}},h=function(e,t){for(var n=e.clientWidth,r=e.clientHeight,i=0;i<e.nodeSize;i++){var o=e.layoutNodes[i];0!==o.children.length||o.isLocked||(o.positionX=Math.random()*n,o.positionY=Math.random()*r)}},g=function(e,t,n){var r=n.layout,i=n.eles.nodes(),o=e.boundingBox,a={x1:1/0,x2:-1/0,y1:1/0,y2:-1/0};n.boundingBox&&(i.forEach((function(t){var n=e.layoutNodes[e.idToIndex[t.data("id")]];a.x1=Math.min(a.x1,n.positionX),a.x2=Math.max(a.x2,n.positionX),a.y1=Math.min(a.y1,n.positionY),a.y2=Math.max(a.y2,n.positionY)})),a.w=a.x2-a.x1,a.h=a.y2-a.y1),i.positions((function(t,r){var i=e.layoutNodes[e.idToIndex[t.data("id")]];if(n.boundingBox){var s=(i.positionX-a.x1)/a.w,l=(i.positionY-a.y1)/a.h;return{x:o.x1+s*o.w,y:o.y1+l*o.h}}return{x:i.positionX,y:i.positionY}})),!0!==e.ready&&(e.ready=!0,r.one("layoutready",n.ready),r.emit({type:"layoutready",layout:this}))};e.exports=c},function(e,t,n){"use strict";var r=n(1),i=n(2),o={fit:!0,padding:30,boundingBox:void 0,avoidOverlap:!0,avoidOverlapPadding:10,nodeDimensionsIncludeLabels:!1,spacingFactor:void 0,condense:!1,rows:void 0,cols:void 0,position:function(e){},sort:void 0,animate:!1,animationDuration:500,animationEasing:void 0,animateFilter:function(e,t){return!0},ready:void 0,stop:void 0,transform:function(e,t){return t}};function a(e){this.options=r.extend({},o,e)}a.prototype.run=function(){var e=this.options,t=e,n=e.cy,r=t.eles.nodes().not(":parent");t.sort&&(r=r.sort(t.sort));var o=i.makeBoundingBox(t.boundingBox?t.boundingBox:{x1:0,y1:0,w:n.width(),h:n.height()});if(0===o.h||0===o.w)r.layoutPositions(this,t,(function(e){return{x:o.x1,y:o.y1}}));else{var a=r.size(),s=Math.sqrt(a*o.h/o.w),l=Math.round(s),c=Math.round(o.w/o.h*s),u=function(e){if(null==e)return Math.min(l,c);Math.min(l,c)==l?l=e:c=e},d=function(e){if(null==e)return Math.max(l,c);Math.max(l,c)==l?l=e:c=e},f=t.rows,p=null!=t.cols?t.cols:t.columns;if(null!=f&&null!=p)l=f,c=p;else if(null!=f&&null==p)l=f,c=Math.ceil(a/l);else if(null==f&&null!=p)c=p,l=Math.ceil(a/c);else if(c*l>a){var h=u(),g=d();(h-1)*g>=a?u(h-1):(g-1)*h>=a&&d(g-1)}else for(;c*l<a;){var v=u(),m=d();(m+1)*v>=a?d(m+1):u(v+1)}var b=o.w/c,y=o.h/l;if(t.condense&&(b=0,y=0),t.avoidOverlap)for(var x=0;x<r.length;x++){var w=r[x],k=w._private.position;null!=k.x&&null!=k.y||(k.x=0,k.y=0);var A=w.layoutDimensions(t),E=t.avoidOverlapPadding,S=A.w+E,C=A.h+E;b=Math.max(b,S),y=Math.max(y,C)}for(var $={},O=function(e,t){return!!$["c-"+e+"-"+t]},_=function(e,t){$["c-"+e+"-"+t]=!0},T=0,j=0,P=function(){++j>=c&&(j=0,T++)},D={},R=0;R<r.length;R++){var I=r[R],N=t.position(I);if(N&&(void 0!==N.row||void 0!==N.col)){var M={row:N.row,col:N.col};if(void 0===M.col)for(M.col=0;O(M.row,M.col);)M.col++;else if(void 0===M.row)for(M.row=0;O(M.row,M.col);)M.row++;D[I.id()]=M,_(M.row,M.col)}}r.layoutPositions(this,t,(function(e,t){var n=void 0,r=void 0;if(e.locked()||e.isParent())return!1;var i=D[e.id()];if(i)n=i.col*b+b/2+o.x1,r=i.row*y+y/2+o.y1;else{for(;O(T,j);)P();n=j*b+b/2+o.x1,r=T*y+y/2+o.y1,_(T,j),P()}return{x:n,y:r}}))}return this},e.exports=a},function(e,t,n){"use strict";var r=n(1),i={ready:function(){},stop:function(){}};function o(e){this.options=r.extend({},i,e)}o.prototype.run=function(){var e=this.options,t=e.eles;return e.cy,this.emit("layoutstart"),t.nodes().positions((function(){return{x:0,y:0}})),this.one("layoutready",e.ready),this.emit("layoutready"),this.one("layoutstop",e.stop),this.emit("layoutstop"),this},o.prototype.stop=function(){return this},e.exports=o},function(e,t,n){"use strict";var r=n(1),i=n(0),o={positions:void 0,zoom:void 0,pan:void 0,fit:!0,padding:30,animate:!1,animationDuration:500,animationEasing:void 0,animateFilter:function(e,t){return!0},ready:void 0,stop:void 0,transform:function(e,t){return t}};function a(e){this.options=r.extend({},o,e)}a.prototype.run=function(){var e=this.options,t=e.eles.nodes(),n=i.fn(e.positions);return t.layoutPositions(this,e,(function(t,r){var i=function(t){if(null==e.positions)return null;if(n)return e.positions(t);var r=e.positions[t._private.data.id];return null==r?null:r}(t);return!t.locked()&&null!=i&&i})),this},e.exports=a},function(e,t,n){"use strict";var r=n(1),i=n(2),o={fit:!0,padding:30,boundingBox:void 0,animate:!1,animationDuration:500,animationEasing:void 0,animateFilter:function(e,t){return!0},ready:void 0,stop:void 0,transform:function(e,t){return t}};function a(e){this.options=r.extend({},o,e)}a.prototype.run=function(){var e=this.options,t=e.cy,n=e.eles.nodes().not(":parent"),r=i.makeBoundingBox(e.boundingBox?e.boundingBox:{x1:0,y1:0,w:t.width(),h:t.height()});return n.layoutPositions(this,e,(function(e,t){return{x:r.x1+Math.round(Math.random()*r.w),y:r.y1+Math.round(Math.random()*r.h)}})),this},e.exports=a},function(e,t,n){"use strict";e.exports=[{name:"null",impl:n(106)},{name:"base",impl:n(107)},{name:"canvas",impl:n(123)}]},function(e,t,n){"use strict";function r(e){this.options=e,this.notifications=0}var i=function(){};r.prototype={recalculateRenderedStyle:i,notify:function(){this.notifications++},init:i},e.exports=r},function(e,t,n){"use strict";var r=n(0),i=n(1),o=n(3),a=function(e){this.init(e)},s=a.prototype;s.clientFunctions=["redrawHint","render","renderTo","matchCanvasSize","nodeShapeImpl","arrowShapeImpl"],s.init=function(e){var t=this;t.options=e,t.cy=e.cy;var n=t.container=e.cy.container();if(o){var r=o.document,a=r.head,s="__________cytoscape_container",l=null!=r.getElementById("__________cytoscape_stylesheet");if(n.className.indexOf(s)<0&&(n.className=(n.className||"")+" "+s),!l){var c=r.createElement("style");c.id="__________cytoscape_stylesheet",c.innerHTML="."+s+" { position: relative; }",a.insertBefore(c,a.children[0])}"static"===o.getComputedStyle(n).getPropertyValue("position")&&i.error("A Cytoscape container has style position:static and so can not use UI extensions properly")}t.selection=[void 0,void 0,void 0,void 0,0],t.bezierProjPcts=[.05,.225,.4,.5,.6,.775,.95],t.hoverData={down:null,last:null,downTime:null,triggerMode:null,dragging:!1,initialPan:[null,null],capture:!1},t.dragData={possibleDragElements:[]},t.touchData={start:null,capture:!1,startPosition:[null,null,null,null,null,null],singleTouchStartTime:null,singleTouchMoved:!0,now:[null,null,null,null,null,null],earlier:[null,null,null,null,null,null]},t.redraws=0,t.showFps=e.showFps,t.debug=e.debug,t.hideEdgesOnViewport=e.hideEdgesOnViewport,t.hideLabelsOnViewport=e.hideLabelsOnViewport,t.textureOnViewport=e.textureOnViewport,t.wheelSensitivity=e.wheelSensitivity,t.motionBlurEnabled=e.motionBlur,t.forcedPixelRatio=e.pixelRatio,t.motionBlur=e.motionBlur,t.motionBlurOpacity=e.motionBlurOpacity,t.motionBlurTransparency=1-t.motionBlurOpacity,t.motionBlurPxRatio=1,t.mbPxRBlurry=1,t.minMbLowQualFrames=4,t.fullQualityMb=!1,t.clearedForMotionBlur=[],t.desktopTapThreshold=e.desktopTapThreshold,t.desktopTapThreshold2=e.desktopTapThreshold*e.desktopTapThreshold,t.touchTapThreshold=e.touchTapThreshold,t.touchTapThreshold2=e.touchTapThreshold*e.touchTapThreshold,t.tapholdDuration=500,t.bindings=[],t.beforeRenderCallbacks=[],t.beforeRenderPriorities={animations:400,eleCalcs:300,eleTxrDeq:200,lyrTxrDeq:100},t.registerNodeShapes(),t.registerArrowShapes(),t.registerCalculationListeners()},s.notify=function(e){var t,n=this;if(!this.destroyed){t=r.array(e.type)?e.type:[e.type];for(var i={},o=0;o<t.length;o++)i[t[o]]=!0;i.init?n.load():i.destroy?n.destroy():((i.add||i.remove||i.load||i.zorder)&&n.invalidateCachedZSortedEles(),i.viewport&&n.redrawHint("select",!0),(i.load||i.resize)&&(n.invalidateContainerClientCoordsCache(),n.matchCanvasSize(n.container)),n.redrawHint("eles",!0),n.redrawHint("drag",!0),this.startRenderLoop(),this.redraw())}},s.destroy=function(){var e=this;e.destroyed=!0,e.cy.stopAnimationLoop();for(var t=0;t<e.bindings.length;t++){var n=e.bindings[t],r=n.target;(r.off||r.removeEventListener).apply(r,n.args)}if(e.bindings=[],e.beforeRenderCallbacks=[],e.onUpdateEleCalcsFns=[],e.removeObserver&&e.removeObserver.disconnect(),e.styleObserver&&e.styleObserver.disconnect(),e.labelCalcDiv)try{document.body.removeChild(e.labelCalcDiv)}catch(e){}},[n(108),n(109),n(119),n(120),n(121),n(122)].forEach((function(e){i.extend(s,e)})),e.exports=a},function(e,t,n){"use strict";var r=n(2),i=n(0),o=n(1),a={arrowShapeWidth:.3,registerArrowShapes:function(){var e=this.arrowShapes={},t=this,n=function(e,t,n,r,i,o,a){var s=i.x-n/2-a,l=i.x+n/2+a,c=i.y-n/2-a,u=i.y+n/2+a;return s<=e&&e<=l&&c<=t&&t<=u},a=function(e,t,n,r,i){var o=e*Math.cos(r)-t*Math.sin(r),a=(e*Math.sin(r)+t*Math.cos(r))*n;return{x:o*n+i.x,y:a+i.y}},s=function(e,t,n,r){for(var i=[],o=0;o<e.length;o+=2){var s=e[o],l=e[o+1];i.push(a(s,l,t,n,r))}return i},l=function(e){for(var t=[],n=0;n<e.length;n++){var r=e[n];t.push(r.x,r.y)}return t},c=function(e){return e.pstyle("width").pfValue*e.pstyle("arrow-scale").pfValue*2},u=function(a,u){i.string(u)&&(u=e[u]),e[a]=o.extend({name:a,points:[-.15,-.3,.15,-.3,.15,.3,-.15,.3],collide:function(e,t,n,i,o,a){var c=l(s(this.points,n+2*a,i,o));return r.pointInsidePolygonPoints(e,t,c)},roughCollide:n,draw:function(e,n,r,i){var o=s(this.points,n,r,i);t.arrowShapeImpl("polygon")(e,o)},spacing:function(e){return 0},gap:c},u)};u("none",{collide:o.falsify,roughCollide:o.falsify,draw:o.noop,spacing:o.zeroify,gap:o.zeroify}),u("triangle",{points:[-.15,-.3,0,0,.15,-.3]}),u("arrow","triangle"),u("triangle-backcurve",{points:e.triangle.points,controlPoint:[0,-.15],roughCollide:n,draw:function(e,n,r,i,o){var l=s(this.points,n,r,i),c=this.controlPoint,u=a(c[0],c[1],n,r,i);t.arrowShapeImpl(this.name)(e,l,u)},gap:function(e){return.8*c(e)}}),u("triangle-tee",{points:[-.15,-.3,0,0,.15,-.3,-.15,-.3],pointsTee:[-.15,-.4,-.15,-.5,.15,-.5,.15,-.4],collide:function(e,t,n,i,o,a,c){var u=l(s(this.points,n+2*c,i,o)),d=l(s(this.pointsTee,n+2*c,i,o));return r.pointInsidePolygonPoints(e,t,u)||r.pointInsidePolygonPoints(e,t,d)},draw:function(e,n,r,i,o){var a=s(this.points,n,r,i),l=s(this.pointsTee,n,r,i);t.arrowShapeImpl(this.name)(e,a,l)}}),u("triangle-cross",{points:[-.15,-.3,0,0,.15,-.3,-.15,-.3],baseCrossLinePts:[-.15,-.4,-.15,-.4,.15,-.4,.15,-.4],crossLinePts:function(e,t){var n=this.baseCrossLinePts.slice(),r=t/e;return n[3]=n[3]-r,n[5]=n[5]-r,n},collide:function(e,t,n,i,o,a,c){var u=l(s(this.points,n+2*c,i,o)),d=l(s(this.crossLinePts(n,a),n+2*c,i,o));return r.pointInsidePolygonPoints(e,t,u)||r.pointInsidePolygonPoints(e,t,d)},draw:function(e,n,r,i,o){var a=s(this.points,n,r,i),l=s(this.crossLinePts(n,o),n,r,i);t.arrowShapeImpl(this.name)(e,a,l)}}),u("vee",{points:[-.15,-.3,0,0,.15,-.3,0,-.15],gap:function(e){return.525*c(e)}}),u("circle",{radius:.15,collide:function(e,t,n,r,i,o,a){var s=i;return Math.pow(s.x-e,2)+Math.pow(s.y-t,2)<=Math.pow((n+2*a)*this.radius,2)},draw:function(e,n,r,i,o){t.arrowShapeImpl(this.name)(e,i.x,i.y,this.radius*n)},spacing:function(e){return t.getArrowWidth(e.pstyle("width").pfValue,e.pstyle("arrow-scale").value)*this.radius}}),u("tee",{points:[-.15,0,-.15,-.1,.15,-.1,.15,0],spacing:function(e){return 1},gap:function(e){return 1}}),u("square",{points:[-.15,0,.15,0,.15,-.3,-.15,-.3]}),u("diamond",{points:[-.15,-.15,0,-.3,.15,-.15,0,0],gap:function(e){return e.pstyle("width").pfValue*e.pstyle("arrow-scale").value}})}};e.exports=a},function(e,t,n){"use strict";var r=n(1),i={};[n(110),n(111),n(112),n(113),n(114),n(115),n(116),n(117),n(118)].forEach((function(e){r.extend(i,e)})),e.exports=i},function(e,t,n){"use strict";var r=n(3),i=n(2),o=n(1),a=(r=n(3),{projectIntoViewport:function(e,t){var n=this.cy,r=this.findContainerClientCoords(),i=r[0],o=r[1],a=r[4],s=n.pan(),l=n.zoom();return[((e-i)/a-s.x)/l,((t-o)/a-s.y)/l]},findContainerClientCoords:function(){if(this.containerBB)return this.containerBB;var e=this.container,t=e.getBoundingClientRect(),n=r.getComputedStyle(e),i=function(e){return parseFloat(n.getPropertyValue(e))},o=i("padding-left"),a=i("padding-right"),s=i("padding-top"),l=i("padding-bottom"),c=i("border-left-width"),u=i("border-right-width"),d=i("border-top-width"),f=(i("border-bottom-width"),e.clientWidth),p=e.clientHeight,h=o+a,g=s+l,v=c+u,m=t.width/(f+v),b=f-h,y=p-g,x=(t.width,t.height,t.left+o+c),w=t.top+s+d;return this.containerBB=[x,w,b,y,m]},invalidateContainerClientCoordsCache:function(){this.containerBB=null},findNearestElement:function(e,t,n,r){return this.findNearestElements(e,t,n,r)[0]},findNearestElements:function(e,t,n,r){var a,s,l=this,c=this,u=c.getCachedZSortedEles(),d=[],f=c.cy.zoom(),p=c.cy.hasCompoundNodes(),h=(r?24:8)/f,g=(r?8:2)/f,v=(r?8:2)/f,m=1/0;function b(e,t){if(e.isNode()){if(s)return;s=e,d.push(e)}if(e.isEdge()&&(null==t||t<m))if(a){if(a.pstyle("z-index").value===e.pstyle("z-index").value)for(var n=0;n<d.length;n++)if(d[n].isEdge()){d[n]=e,a=e,m=null!=t?t:m;break}}else d.push(e),a=e,m=null!=t?t:m}function y(n){var r=n.outerWidth()+2*g,i=n.outerHeight()+2*g,o=r/2,a=i/2,s=n.position();if(s.x-o<=e&&e<=s.x+o&&s.y-a<=t&&t<=s.y+a&&c.nodeShapes[l.getNodeShape(n)].checkPoint(e,t,0,r,i,s.x,s.y))return b(n,0),!0}function x(n){var r,o=n._private,a=o.rscratch,s=n.pstyle("width").pfValue,u=n.pstyle("arrow-scale").value,f=s/2+h,g=f*f,v=2*f,m=o.source,x=o.target;if("segments"===a.edgeType||"straight"===a.edgeType||"haystack"===a.edgeType){for(var w=a.allpts,k=0;k+3<w.length;k+=2)if(i.inLineVicinity(e,t,w[k],w[k+1],w[k+2],w[k+3],v)&&g>(r=i.sqdistToFiniteLine(e,t,w[k],w[k+1],w[k+2],w[k+3])))return b(n,r),!0}else if("bezier"===a.edgeType||"multibezier"===a.edgeType||"self"===a.edgeType||"compound"===a.edgeType)for(w=a.allpts,k=0;k+5<a.allpts.length;k+=4)if(i.inBezierVicinity(e,t,w[k],w[k+1],w[k+2],w[k+3],w[k+4],w[k+5],v)&&g>(r=i.sqdistToQuadraticBezier(e,t,w[k],w[k+1],w[k+2],w[k+3],w[k+4],w[k+5])))return b(n,r),!0;m=m||o.source,x=x||o.target;var A=l.getArrowWidth(s,u),E=[{name:"source",x:a.arrowStartX,y:a.arrowStartY,angle:a.srcArrowAngle},{name:"target",x:a.arrowEndX,y:a.arrowEndY,angle:a.tgtArrowAngle},{name:"mid-source",x:a.midX,y:a.midY,angle:a.midsrcArrowAngle},{name:"mid-target",x:a.midX,y:a.midY,angle:a.midtgtArrowAngle}];for(k=0;k<E.length;k++){var S=E[k],C=c.arrowShapes[n.pstyle(S.name+"-arrow-shape").value],$=n.pstyle("width").pfValue;if(C.roughCollide(e,t,A,S.angle,{x:S.x,y:S.y},$,h)&&C.collide(e,t,A,S.angle,{x:S.x,y:S.y},$,h))return b(n),!0}p&&d.length>0&&(y(m),y(x))}function w(e,t,n){return o.getPrefixedProperty(e,t,n)}function k(n,r){var o,a=n._private,s=v;o=r?r+"-":"";var l=n.pstyle(o+"label").value;if("yes"===n.pstyle("text-events").strValue&&l){var c=a.rstyle,u=n.pstyle("text-border-width").pfValue,d=n.pstyle("text-background-padding").pfValue,f=w(c,"labelWidth",r)+u+2*s+2*d,p=w(c,"labelHeight",r)+u+2*s+2*d,h=w(c,"labelX",r),g=w(c,"labelY",r),m=w(a.rscratch,"labelAngle",r),y=h-f/2,x=h+f/2,k=g-p/2,A=g+p/2;if(m){var E=Math.cos(m),S=Math.sin(m),C=function(e,t){return{x:(e-=h)*E-(t-=g)*S+h,y:e*S+t*E+g}},$=C(y,k),O=C(y,A),_=C(x,k),T=C(x,A),j=[$.x,$.y,_.x,_.y,T.x,T.y,O.x,O.y];if(i.pointInsidePolygonPoints(e,t,j))return b(n),!0}else{var P={w:f,h:p,x1:y,x2:x,y1:k,y2:A};if(i.inBoundingBox(P,e,t))return b(n),!0}}}n&&(u=u.interactive);for(var A=u.length-1;A>=0;A--){var E=u[A];E.isNode()?y(E)||k(E):x(E)||k(E)||k(E,"source")||k(E,"target")}return d},getAllInBox:function(e,t,n,r){var o=this.getCachedZSortedEles().interactive,a=[],s=Math.min(e,n),l=Math.max(e,n),c=Math.min(t,r),u=Math.max(t,r);e=s,n=l,t=c,r=u;for(var d=i.makeBoundingBox({x1:e,y1:t,x2:n,y2:r}),f=0;f<o.length;f++){var p=o[f];if(p.isNode()){var h=p,g=h.boundingBox({includeNodes:!0,includeEdges:!1,includeLabels:!1});i.boundingBoxesIntersect(d,g)&&!i.boundingBoxInBoundingBox(g,d)&&a.push(h)}else{var v=p,m=v._private,b=m.rscratch;if(null!=b.startX&&null!=b.startY&&!i.inBoundingBox(d,b.startX,b.startY))continue;if(null!=b.endX&&null!=b.endY&&!i.inBoundingBox(d,b.endX,b.endY))continue;if("bezier"===b.edgeType||"multibezier"===b.edgeType||"self"===b.edgeType||"compound"===b.edgeType||"segments"===b.edgeType||"haystack"===b.edgeType){for(var y=m.rstyle.bezierPts||m.rstyle.linePts||m.rstyle.haystackPts,x=!0,w=0;w<y.length;w++)if(!i.pointInBoundingBox(d,y[w])){x=!1;break}x&&a.push(v)}else"haystack"!==b.edgeType&&"straight"!==b.edgeType||a.push(v)}}return a}});e.exports=a},function(e,t,n){"use strict";var r=n(2),i={calculateArrowAngles:function(e){var t,n,i,o,a,s,l=e._private.rscratch,c="haystack"===l.edgeType,u="bezier"===l.edgeType,d="multibezier"===l.edgeType,f="segments"===l.edgeType,p="compound"===l.edgeType,h="self"===l.edgeType;if(c?(i=l.haystackPts[0],o=l.haystackPts[1],a=l.haystackPts[2],s=l.haystackPts[3]):(i=l.arrowStartX,o=l.arrowStartY,a=l.arrowEndX,s=l.arrowEndY),v=l.midX,m=l.midY,f)t=i-l.segpts[0],n=o-l.segpts[1];else if(d||p||h||u){var g=l.allpts;t=i-r.qbezierAt(g[0],g[2],g[4],.1),n=o-r.qbezierAt(g[1],g[3],g[5],.1)}else t=i-v,n=o-m;l.srcArrowAngle=r.getAngleFromDisp(t,n);var v=l.midX,m=l.midY;if(c&&(v=(i+a)/2,m=(o+s)/2),t=a-i,n=s-o,f)if((g=l.allpts).length/2%2==0){var b=(y=g.length/2)-2;t=g[y]-g[b],n=g[y+1]-g[b+1]}else{b=(y=g.length/2-1)-2;var y,x=y+2;t=g[y]-g[b],n=g[y+1]-g[b+1]}else if(d||p||h){var w,k,A,E,g=l.allpts;if(l.ctrlpts.length/2%2==0){var S=2+(C=2+($=g.length/2-1));w=r.qbezierAt(g[$],g[C],g[S],0),k=r.qbezierAt(g[$+1],g[C+1],g[S+1],0),A=r.qbezierAt(g[$],g[C],g[S],1e-4),E=r.qbezierAt(g[$+1],g[C+1],g[S+1],1e-4)}else{var C,$=(C=g.length/2-1)-2;S=C+2,w=r.qbezierAt(g[$],g[C],g[S],.4999),k=r.qbezierAt(g[$+1],g[C+1],g[S+1],.4999),A=r.qbezierAt(g[$],g[C],g[S],.5),E=r.qbezierAt(g[$+1],g[C+1],g[S+1],.5)}t=A-w,n=E-k}if(l.midtgtArrowAngle=r.getAngleFromDisp(t,n),l.midDispX=t,l.midDispY=n,t*=-1,n*=-1,f&&((g=l.allpts).length/2%2==0||(t=-(g[x=2+(y=g.length/2-1)]-g[y]),n=-(g[x+1]-g[y+1]))),l.midsrcArrowAngle=r.getAngleFromDisp(t,n),f)t=a-l.segpts[l.segpts.length-2],n=s-l.segpts[l.segpts.length-1];else if(d||p||h||u){var O=(g=l.allpts).length;t=a-r.qbezierAt(g[O-6],g[O-4],g[O-2],.9),n=s-r.qbezierAt(g[O-5],g[O-3],g[O-1],.9)}else t=a-v,n=s-m;l.tgtArrowAngle=r.getAngleFromDisp(t,n)}};i.getArrowWidth=i.getArrowHeight=function(e,t){var n=this.arrowWidthCache=this.arrowWidthCache||{},r=n[e+", "+t];return r||(r=Math.max(Math.pow(13.37*e,.9),29)*t,n[e+", "+t]=r,r)},e.exports=i},function(e,t,n){"use strict";var r=n(2),i=n(0),o={};function a(e){var t=[];if(null!=e){for(var n=0;n<e.length;n+=2){var r=e[n],i=e[n+1];t.push({x:r,y:i})}return t}}o.findEdgeControlPoints=function(e){if(e&&0!==e.length){for(var t,n,o,a,s,l=this,c=l.cy.hasCompoundNodes(),u={},d=[],f=[],p=0;p<e.length;p++){var h=(Ft=(Bt=e[p])._private).data,g="unbundled-bezier"===(D=Bt.pstyle("curve-style").value)||"segments"===D,v="unbundled-bezier"===D||"bezier"===D;if("none"!==Bt.pstyle("display").value)if("haystack"!==D){var m=h.source,b=h.target;t=m>b?b+"$-$"+m:m+"$-$"+b,g&&(t="unbundled$-$"+h.id);var y=u[t];null==y&&(y=u[t]=[],d.push(t)),y.push(Bt),g&&(y.hasUnbundled=!0),v&&(y.hasBezier=!0)}else f.push(Bt)}for(var x=0;x<d.length;x++){var w=u[t=d[x]];if(w.sort((function(e,t){return e.poolIndex()-t.poolIndex()})),Ht=w[0]._private.source,Gt=w[0]._private.target,!w.hasUnbundled&&Ht.id()>Gt.id()){var k=Ht;Ht=Gt,Gt=k}Wt=Ht.position(),Yt=Gt.position(),Xt=Ht.outerWidth(),Qt=Ht.outerHeight(),Zt=Gt.outerWidth(),Jt=Gt.outerHeight(),n=l.nodeShapes[this.getNodeShape(Ht)],o=l.nodeShapes[this.getNodeShape(Gt)],s=!1;var A={north:0,west:0,south:0,east:0,northwest:0,southwest:0,northeast:0,southeast:0},E=Wt.x,S=Wt.y,C=Xt,$=Qt,O=Yt.x,_=Yt.y,T=Zt,j=Jt,P=w.length;for(p=0;p<w.length;p++){var D,R,I=(Vt=(Bt=w[p])._private.rscratch).lastEdgeIndex,N=p,M=Vt.lastNumEdges,z=(g="unbundled-bezier"===(D=Bt.pstyle("curve-style").value)||"segments"===D,Ht.id()!==Bt.source().id()),L=Bt.pstyle("control-point-distances"),B=Bt.pstyle("loop-direction").pfValue,F=Bt.pstyle("loop-sweep").pfValue,q=Bt.pstyle("control-point-weights"),V=L&&q?Math.min(L.value.length,q.value.length):1,U=Bt.pstyle("control-point-step-size").pfValue,H=L?L.pfValue[0]:void 0,G=q.value[0],W=Bt.pstyle("edge-distances").value,Y=Bt.pstyle("segment-weights"),X=Bt.pstyle("segment-distances"),Z=Math.min(Y.pfValue.length,X.pfValue.length),Q=Bt.pstyle("source-endpoint").value,J=Bt.pstyle("target-endpoint").value,K=Bt.pstyle("source-arrow-shape").value,ee=Bt.pstyle("target-arrow-shape").value,te=Bt.pstyle("arrow-scale").value,ne=Bt.pstyle("width").pfValue,re=Vt.lastSrcCtlPtX,ie=Vt.lastSrcCtlPtY,oe=Vt.lastSrcCtlPtW,ae=Vt.lastSrcCtlPtH,se=Vt.lastTgtCtlPtX,le=Vt.lastTgtCtlPtY,ce=Vt.lastTgtCtlPtW,ue=Vt.lastTgtCtlPtH,de=Vt.lastCurveStyle,fe=D,pe=Vt.lastCtrlptDists,he=L?L.strValue:null,ge=Vt.lastCtrlptWs,ve=q.strValue,me=Vt.lastSegmentWs,be=Y.strValue,ye=Vt.lastSegmentDs,xe=X.strValue,we=Vt.lastStepSize,ke=U,Ae=Vt.lastLoopDir,Ee=B,Se=Vt.lastLoopSwp,Ce=F,$e=Vt.lastEdgeDistances,Oe=W,_e=Vt.lastSrcEndpt,Te=Q,je=Vt.lastTgtEndpt,Pe=J,De=Vt.lastSrcArr,Re=K,Ie=Vt.lastTgtArr,Ne=ee,Me=Vt.lastLineW,ze=ne,Le=Vt.lastArrScl,Be=te;if(Vt.badBezier=!!s,re===E&&ie===S&&oe===C&&ae===$&&se===O&&le===_&&ce===T&&ue===j&&de===fe&&pe===he&&ge===ve&&me===be&&ye===xe&&we===ke&&Ae===Ee&&Se===Ce&&$e===Oe&&_e===Te&&je===Pe&&De===Re&&Ie===Ne&&Me===ze&&Le===Be&&(I===N&&M===P||g)?R=!0:(R=!1,Vt.lastSrcCtlPtX=E,Vt.lastSrcCtlPtY=S,Vt.lastSrcCtlPtW=C,Vt.lastSrcCtlPtH=$,Vt.lastTgtCtlPtX=O,Vt.lastTgtCtlPtY=_,Vt.lastTgtCtlPtW=T,Vt.lastTgtCtlPtH=j,Vt.lastEdgeIndex=N,Vt.lastNumEdges=P,Vt.lastCurveStyle=fe,Vt.lastCtrlptDists=he,Vt.lastCtrlptWs=ve,Vt.lastSegmentDs=xe,Vt.lastSegmentWs=be,Vt.lastStepSize=ke,Vt.lastLoopDir=Ee,Vt.lastLoopSwp=Ce,Vt.lastEdgeDistances=Oe,Vt.lastSrcEndpt=Te,Vt.lastTgtEndpt=Pe,Vt.lastSrcArr=Re,Vt.lastTgtArr=Ne,Vt.lastLineW=ze,Vt.lastArrScl=Be),!R){if(!w.calculatedIntersection&&Ht!==Gt&&(w.hasBezier||w.hasUnbundled)){w.calculatedIntersection=!0;var Fe=n.intersectLine(Wt.x,Wt.y,Xt,Qt,Yt.x,Yt.y,0);w.srcIntn=Fe;var qe=o.intersectLine(Yt.x,Yt.y,Zt,Jt,Wt.x,Wt.y,0);w.tgtIntn=qe;var Ve={x1:Fe[0],x2:qe[0],y1:Fe[1],y2:qe[1]},Ue={x1:Wt.x,x2:Yt.x,y1:Wt.y,y2:Yt.y},He=qe[1]-Fe[1],Ge=qe[0]-Fe[0],We=Math.sqrt(Ge*Ge+He*He),Ye={x:Ge,y:He},Xe={x:Ye.x/We,y:Ye.y/We};a={x:-Xe.y,y:Xe.x},o.checkPoint(Fe[0],Fe[1],0,Zt,Jt,Yt.x,Yt.y)&&n.checkPoint(qe[0],qe[1],0,Xt,Qt,Wt.x,Wt.y)&&(a={},s=!0)}if(z?(Vt.srcIntn=w.tgtIntn,Vt.tgtIntn=w.srcIntn):(Vt.srcIntn=w.srcIntn,Vt.tgtIntn=w.tgtIntn),Ht===Gt){Vt.edgeType="self";var Ze=p,Qe=U;g&&(Ze=0,Qe=H);var Je=B-Math.PI/2,Ke=Je-F/2,et=Je+F/2,tt=String(B+"_"+F);Ze=void 0===A[tt]?A[tt]=0:++A[tt],Vt.ctrlpts=[Wt.x+1.4*Math.cos(Ke)*Qe*(Ze/3+1),Wt.y+1.4*Math.sin(Ke)*Qe*(Ze/3+1),Wt.x+1.4*Math.cos(et)*Qe*(Ze/3+1),Wt.y+1.4*Math.sin(et)*Qe*(Ze/3+1)]}else if(c&&(Ht.isParent()||Ht.isChild()||Gt.isParent()||Gt.isChild())&&(Ht.parents().anySame(Gt)||Gt.parents().anySame(Ht))){Vt.edgeType="compound",Vt.badBezier=!1,Ze=p,Qe=U,g&&(Ze=0,Qe=H);var nt={x:Wt.x-Xt/2,y:Wt.y-Qt/2},rt={x:Yt.x-Zt/2,y:Yt.y-Jt/2},it={x:Math.min(nt.x,rt.x),y:Math.min(nt.y,rt.y)},ot=Math.max(.5,Math.log(.01*Xt)),at=Math.max(.5,Math.log(.01*Zt));Vt.ctrlpts=[it.x,it.y-(1+Math.pow(50,1.12)/100)*Qe*(Ze/3+1)*ot,it.x-(1+Math.pow(50,1.12)/100)*Qe*(Ze/3+1)*at,it.y]}else if("segments"===D){Vt.edgeType="segments",Vt.segpts=[];for(var st=0;st<Z;st++){var lt=Y.pfValue[st],ct=X.pfValue[st],ut=1-lt,dt=lt,ft={x:(bt="node-position"===W?Ue:Ve).x1*ut+bt.x2*dt,y:bt.y1*ut+bt.y2*dt};Vt.segpts.push(ft.x+a.x*ct,ft.y+a.y*ct)}}else if(w.length%2!=1||p!==Math.floor(w.length/2)||g){var pt=g;Vt.edgeType=pt?"multibezier":"bezier",Vt.ctrlpts=[];for(var ht=0;ht<V;ht++){var gt,vt=(.5-w.length/2+p)*U,mt=r.signum(vt);pt&&(H=L?L.pfValue[ht]:U,G=q.value[ht]);var bt,yt=void 0!==(gt=g?H:void 0!==H?mt*H:void 0)?gt:vt;ut=1-G,dt=G,z&&(k=ut,ut=dt,dt=k),ft={x:(bt="node-position"===W?Ue:Ve).x1*ut+bt.x2*dt,y:bt.y1*ut+bt.y2*dt},Vt.ctrlpts.push(ft.x+a.x*yt,ft.y+a.y*yt)}}else Vt.edgeType="straight";this.findEndpoints(Bt);var xt=!i.number(Vt.startX)||!i.number(Vt.startY),wt=!i.number(Vt.arrowStartX)||!i.number(Vt.arrowStartY),kt=!i.number(Vt.endX)||!i.number(Vt.endY),At=!i.number(Vt.arrowEndX)||!i.number(Vt.arrowEndY),Et=this.getArrowWidth(Bt.pstyle("width").pfValue,Bt.pstyle("arrow-scale").value)*this.arrowShapeWidth*3;if("bezier"===Vt.edgeType){var St=r.dist({x:Vt.ctrlpts[0],y:Vt.ctrlpts[1]},{x:Vt.startX,y:Vt.startY}),Ct=St<Et,$t=r.dist({x:Vt.ctrlpts[0],y:Vt.ctrlpts[1]},{x:Vt.endX,y:Vt.endY}),Ot=$t<Et,_t=!1;if(xt||wt||Ct){_t=!0;var Tt={x:Vt.ctrlpts[0]-Wt.x,y:Vt.ctrlpts[1]-Wt.y},jt=Math.sqrt(Tt.x*Tt.x+Tt.y*Tt.y),Pt={x:Tt.x/jt,y:Tt.y/jt},Dt=Math.max(Xt,Qt),Rt={x:Vt.ctrlpts[0]+2*Pt.x*Dt,y:Vt.ctrlpts[1]+2*Pt.y*Dt},It=n.intersectLine(Wt.x,Wt.y,Xt,Qt,Rt.x,Rt.y,0);Ct?(Vt.ctrlpts[0]=Vt.ctrlpts[0]+Pt.x*(Et-St),Vt.ctrlpts[1]=Vt.ctrlpts[1]+Pt.y*(Et-St)):(Vt.ctrlpts[0]=It[0]+Pt.x*Et,Vt.ctrlpts[1]=It[1]+Pt.y*Et)}if(kt||At||Ot){_t=!0,Tt={x:Vt.ctrlpts[0]-Yt.x,y:Vt.ctrlpts[1]-Yt.y},jt=Math.sqrt(Tt.x*Tt.x+Tt.y*Tt.y),Pt={x:Tt.x/jt,y:Tt.y/jt},Dt=Math.max(Xt,Qt),Rt={x:Vt.ctrlpts[0]+2*Pt.x*Dt,y:Vt.ctrlpts[1]+2*Pt.y*Dt};var Nt=o.intersectLine(Yt.x,Yt.y,Zt,Jt,Rt.x,Rt.y,0);Ot?(Vt.ctrlpts[0]=Vt.ctrlpts[0]+Pt.x*(Et-$t),Vt.ctrlpts[1]=Vt.ctrlpts[1]+Pt.y*(Et-$t)):(Vt.ctrlpts[0]=Nt[0]+Pt.x*Et,Vt.ctrlpts[1]=Nt[1]+Pt.y*Et)}_t&&this.findEndpoints(Bt)}if("multibezier"===Vt.edgeType||"bezier"===Vt.edgeType||"self"===Vt.edgeType||"compound"===Vt.edgeType){for(Vt.allpts=[],Vt.allpts.push(Vt.startX,Vt.startY),ht=0;ht+1<Vt.ctrlpts.length;ht+=2)Vt.allpts.push(Vt.ctrlpts[ht],Vt.ctrlpts[ht+1]),ht+3<Vt.ctrlpts.length&&Vt.allpts.push((Vt.ctrlpts[ht]+Vt.ctrlpts[ht+2])/2,(Vt.ctrlpts[ht+1]+Vt.ctrlpts[ht+3])/2);var Mt;Vt.allpts.push(Vt.endX,Vt.endY),Vt.ctrlpts.length/2%2==0?(Mt=Vt.allpts.length/2-1,Vt.midX=Vt.allpts[Mt],Vt.midY=Vt.allpts[Mt+1]):(Mt=Vt.allpts.length/2-3,Vt.midX=r.qbezierAt(Vt.allpts[Mt],Vt.allpts[Mt+2],Vt.allpts[Mt+4],.5),Vt.midY=r.qbezierAt(Vt.allpts[Mt+1],Vt.allpts[Mt+3],Vt.allpts[Mt+5],.5))}else if("straight"===Vt.edgeType)Vt.allpts=[Vt.startX,Vt.startY,Vt.endX,Vt.endY],Vt.midX=(Vt.startX+Vt.endX+Vt.arrowStartX+Vt.arrowEndX)/4,Vt.midY=(Vt.startY+Vt.endY+Vt.arrowStartY+Vt.arrowEndY)/4;else if("segments"===Vt.edgeType)if(Vt.allpts=[],Vt.allpts.push(Vt.startX,Vt.startY),Vt.allpts.push.apply(Vt.allpts,Vt.segpts),Vt.allpts.push(Vt.endX,Vt.endY),Vt.segpts.length%4==0){var zt=Vt.segpts.length/2,Lt=zt-2;Vt.midX=(Vt.segpts[Lt]+Vt.segpts[zt])/2,Vt.midY=(Vt.segpts[Lt+1]+Vt.segpts[zt+1])/2}else Lt=Vt.segpts.length/2-1,Vt.midX=Vt.segpts[Lt],Vt.midY=Vt.segpts[Lt+1];this.storeEdgeProjections(Bt),this.calculateArrowAngles(Bt)}this.recalculateEdgeLabelProjections(Bt),this.calculateLabelAngles(Bt)}}for(p=0;p<f.length;p++){var Bt,Ft,qt=(Ft=(Bt=f[p])._private).rscratch,Vt=qt;if(!qt.haystack){var Ut=2*Math.random()*Math.PI;qt.source={x:Math.cos(Ut),y:Math.sin(Ut)},Ut=2*Math.random()*Math.PI,qt.target={x:Math.cos(Ut),y:Math.sin(Ut)}}var Ht=Ft.source,Gt=Ft.target,Wt=Ht.position(),Yt=Gt.position(),Xt=Ht.width(),Zt=Gt.width(),Qt=Ht.height(),Jt=Gt.height(),Kt=(Dt=Bt.pstyle("haystack-radius").value)/2;Vt.haystackPts=Vt.allpts=[Vt.source.x*Xt*Kt+Wt.x,Vt.source.y*Qt*Kt+Wt.y,Vt.target.x*Zt*Kt+Yt.x,Vt.target.y*Jt*Kt+Yt.y],Vt.midX=(Vt.allpts[0]+Vt.allpts[2])/2,Vt.midY=(Vt.allpts[1]+Vt.allpts[3])/2,qt.edgeType=qt.lastCurveStyle="haystack",qt.haystack=!0,this.storeEdgeProjections(Bt),this.calculateArrowAngles(Bt),this.recalculateEdgeLabelProjections(Bt),this.calculateLabelAngles(Bt)}}},o.getSegmentPoints=function(e){var t=e[0]._private.rscratch;if("segments"===t.edgeType)return a(t.segpts)},o.getControlPoints=function(e){var t=e[0]._private.rscratch,n=t.edgeType;if("bezier"===n||"multibezier"===n||"self"===n||"compound"===n)return a(t.ctrlpts)},o.getEdgeMidpoint=function(e){var t=e[0]._private.rscratch;return{x:t.midX,y:t.midY}},e.exports=o},function(e,t,n){"use strict";var r=n(2),i=n(0),o={manualEndptToPx:function(e,t){var n=e.position(),r=e.outerWidth(),i=e.outerHeight();if(2===t.value.length){var o=[t.pfValue[0],t.pfValue[1]];return"%"===t.units[0]&&(o[0]=o[0]*r),"%"===t.units[1]&&(o[1]=o[1]*i),o[0]+=n.x,o[1]+=n.y,o}var a=t.pfValue[0];a=-Math.PI/2+a;var s=2*Math.max(r,i),l=[n.x+Math.cos(a)*s,n.y+Math.sin(a)*s];return this.nodeShapes[this.getNodeShape(e)].intersectLine(n.x,n.y,r,i,l[0],l[1],0)},findEndpoints:function(e){var t=this,n=void 0,o=e.source()[0],a=e.target()[0],s=o.position(),l=a.position(),c=e.pstyle("target-arrow-shape").value,u=e.pstyle("source-arrow-shape").value,d=e.pstyle("target-distance-from-node").pfValue,f=e.pstyle("source-distance-from-node").pfValue,p=e._private.rscratch,h=p.edgeType,g="self"===h||"compound"===h,v="bezier"===h||"multibezier"===h||g,m="bezier"!==h,b="straight"===h||"segments"===h,y="segments"===h,x=v||m||b,w=e.pstyle("source-endpoint"),k=g?"outside-to-node":w.value,A=e.pstyle("target-endpoint"),E=g?"outside-to-node":A.value;p.srcManEndpt=w,p.tgtManEndpt=A;var S=void 0,C=void 0,$=void 0,O=void 0;if(v){var _=[p.ctrlpts[0],p.ctrlpts[1]];S=m?[p.ctrlpts[p.ctrlpts.length-2],p.ctrlpts[p.ctrlpts.length-1]]:_,C=_}else if(b){var T=y?p.segpts.slice(0,2):[l.x,l.y];S=y?p.segpts.slice(p.segpts.length-2):[s.x,s.y],C=T}"inside-to-node"===E?n=[l.x,l.y]:A.units?n=this.manualEndptToPx(a,A):"outside-to-line"===E?n=p.tgtIntn:("outside-to-node"===E?$=S:"outside-to-line"===E&&($=[s.x,s.y]),n=t.nodeShapes[this.getNodeShape(a)].intersectLine(l.x,l.y,a.outerWidth(),a.outerHeight(),$[0],$[1],0));var j=r.shortenIntersection(n,S,t.arrowShapes[c].spacing(e)+d),P=r.shortenIntersection(n,S,t.arrowShapes[c].gap(e)+d);e.hasClass("horizontal")?(p.endX=n[0]-d,p.endY=n[1],p.arrowEndX=n[0]-d/2,p.arrowEndY=n[1]):e.hasClass("vertical")?(p.endX=n[0],p.endY=n[1]-d,p.arrowEndX=n[0],p.arrowEndY=n[1]-d/2):(p.endX=P[0],p.endY=P[1],p.arrowEndX=j[0],p.arrowEndY=j[1]),"inside-to-node"===k?n=[s.x,s.y]:w.units?n=this.manualEndptToPx(o,w):"outside-to-line"===k?n=p.srcIntn:("outside-to-node"===k?O=C:"outside-to-line"===k&&(O=[l.x,l.y]),n=t.nodeShapes[this.getNodeShape(o)].intersectLine(s.x,s.y,o.outerWidth(),o.outerHeight(),O[0],O[1],0));var D=r.shortenIntersection(n,C,t.arrowShapes[u].spacing(e)+f),R=r.shortenIntersection(n,C,t.arrowShapes[u].gap(e)+f);p.startX=R[0],p.startY=R[1],p.arrowStartX=D[0],p.arrowStartY=D[1],x&&(i.number(p.startX)&&i.number(p.startY)&&i.number(p.endX)&&i.number(p.endY)?p.badLine=!1:p.badLine=!0)},getSourceEndpoint:function(e){var t=e[0]._private.rscratch;switch(t.edgeType){case"haystack":return{x:t.haystackPts[0],y:t.haystackPts[1]};default:return{x:t.arrowStartX,y:t.arrowStartY}}},getTargetEndpoint:function(e){var t=e[0]._private.rscratch;switch(t.edgeType){case"haystack":return{x:t.haystackPts[2],y:t.haystackPts[3]};default:return{x:t.arrowEndX,y:t.arrowEndY}}}};e.exports=o},function(e,t,n){"use strict";var r=n(2),i={};function o(e,t,n){for(var i=function(e,t,n,i){return r.qbezierAt(e,t,n,i)},o=t._private.rstyle.bezierPts,a=0;a<e.bezierProjPcts.length;a++){var s=e.bezierProjPcts[a];o.push({x:i(n[0],n[2],n[4],s),y:i(n[1],n[3],n[5],s)})}}i.storeEdgeProjections=function(e){var t=e._private,n=t.rscratch,r=n.edgeType;if(t.rstyle.bezierPts=null,t.rstyle.linePts=null,t.rstyle.haystackPts=null,"multibezier"===r||"bezier"===r||"self"===r||"compound"===r){t.rstyle.bezierPts=[];for(var i=0;i+5<n.allpts.length;i+=4)o(this,e,n.allpts.slice(i,i+6))}else if("segments"===r){var a=t.rstyle.linePts=[];for(i=0;i+1<n.allpts.length;i+=2)a.push({x:n.allpts[i],y:n.allpts[i+1]})}else if("haystack"===r){var s=n.haystackPts;t.rstyle.haystackPts=[{x:s[0],y:s[1]},{x:s[2],y:s[3]}]}t.rstyle.arrowWidth=this.getArrowWidth(e.pstyle("width").pfValue,e.pstyle("arrow-scale").value)*this.arrowShapeWidth},i.recalculateEdgeProjections=function(e){this.findEdgeControlPoints(e)},e.exports=i},function(e,t,n){"use strict";var r=n(2),i=n(0),o=n(1),a={recalculateNodeLabelProjection:function(e){var t=e.pstyle("label").strValue;if(!i.emptyString(t)){var n,r,o=e._private,a=e.width(),s=e.height(),l=e.padding(),c=e.position(),u=e.pstyle("text-halign").strValue,d=e.pstyle("text-valign").strValue,f=o.rscratch,p=o.rstyle;switch(u){case"left":n=c.x-a/2-l;break;case"right":n=c.x+a/2+l;break;default:n=c.x}switch(d){case"top":r=c.y-s/2-l;break;case"bottom":r=c.y+s/2+l;break;default:r=c.y}f.labelX=n,f.labelY=r,p.labelX=n,p.labelY=r,this.applyLabelDimensions(e)}},recalculateEdgeLabelProjections:function(e){var t,n=e._private,i=n.rscratch,a=this,s={mid:e.pstyle("label").strValue,source:e.pstyle("source-label").strValue,target:e.pstyle("target-label").strValue};if(s.mid||s.source||s.target){t={x:i.midX,y:i.midY};var l=function(e,t,r){o.setPrefixedProperty(n.rscratch,e,t,r),o.setPrefixedProperty(n.rstyle,e,t,r)};l("labelX",null,t.x),l("labelY",null,t.y);var c=function(o){var c,u="source"===o;if(s[o]){var d=e.pstyle(o+"-text-offset").pfValue,f=function(e,t){var n=t.x-e.x,r=t.y-e.y;return Math.atan(r/n)};switch(i.edgeType){case"self":case"compound":case"bezier":case"multibezier":for(var p,h=function e(){if(e.cache)return e.cache;for(var t=[],o=0;o+5<i.allpts.length;o+=4){var s={x:i.allpts[o],y:i.allpts[o+1]},l={x:i.allpts[o+2],y:i.allpts[o+3]},c={x:i.allpts[o+4],y:i.allpts[o+5]};t.push({p0:s,p1:l,p2:c,startDist:0,length:0,segments:[]})}var u=n.rstyle.bezierPts,d=a.bezierProjPcts.length;function f(e,t,n,i,o){var a=r.dist(t,n),s=e.segments[e.segments.length-1],l={p0:t,p1:n,t0:i,t1:o,startDist:s?s.startDist+s.length:0,length:a};e.segments.push(l),e.length+=a}for(o=0;o<t.length;o++){var p=t[o],h=t[o-1];h&&(p.startDist=h.startDist+h.length),f(p,p.p0,u[o*d],0,a.bezierProjPcts[0]);for(var g=0;g<d-1;g++)f(p,u[o*d+g],u[o*d+g+1],a.bezierProjPcts[g],a.bezierProjPcts[g+1]);f(p,u[o*d+d-1],p.p2,a.bezierProjPcts[d-1],1)}return e.cache=t}(),g=0,v=0,m=0;m<h.length;m++){for(var b=h[u?m:h.length-1-m],y=0;y<b.segments.length;y++){var x=b.segments[u?y:b.segments.length-1-y],w=m===h.length-1&&y===b.segments.length-1;if(g=v,(v+=x.length)>=d||w){p={cp:b,segment:x};break}}if(p)break}b=p.cp;var k=(d-g)/(x=p.segment).length,A=x.t1-x.t0,E=u?x.t0+A*k:x.t1-A*k;E=r.bound(0,E,1),t=r.qbezierPtAt(b.p0,b.p1,b.p2,E),c=function(e,t,n,i){var o=r.bound(0,i-.001,1),a=r.bound(0,i+.001,1),s=r.qbezierPtAt(e,t,n,o),l=r.qbezierPtAt(e,t,n,a);return f(s,l)}(b.p0,b.p1,b.p2,E);break;case"straight":case"segments":case"haystack":var S,C,$,O,_=0,T=i.allpts.length;for(m=0;m+3<T&&(u?($={x:i.allpts[m],y:i.allpts[m+1]},O={x:i.allpts[m+2],y:i.allpts[m+3]}):($={x:i.allpts[T-2-m],y:i.allpts[T-1-m]},O={x:i.allpts[T-4-m],y:i.allpts[T-3-m]}),C=_,!((_+=S=r.dist($,O))>=d));m+=2);E=(d-C)/S,E=r.bound(0,E,1),t=r.lineAt($,O,E),c=f($,O)}l("labelX",o,t.x),l("labelY",o,t.y),l("labelAutoAngle",o,c)}};c("source"),c("target"),this.applyLabelDimensions(e)}},applyLabelDimensions:function(e){this.applyPrefixedLabelDimensions(e),e.isEdge()&&(this.applyPrefixedLabelDimensions(e,"source"),this.applyPrefixedLabelDimensions(e,"target"))},applyPrefixedLabelDimensions:function(e,t){var n=e._private,r=this.getLabelText(e,t),i=this.calculateLabelDimensions(e,r);o.setPrefixedProperty(n.rstyle,"labelWidth",t,i.width),o.setPrefixedProperty(n.rscratch,"labelWidth",t,i.width),o.setPrefixedProperty(n.rstyle,"labelHeight",t,i.height),o.setPrefixedProperty(n.rscratch,"labelHeight",t,i.height)},getLabelText:function(e,t){var n=e._private,r=t?t+"-":"",i=e.pstyle(r+"label").strValue,a=e.pstyle("text-transform").value,s=function(e,r){return r?(o.setPrefixedProperty(n.rscratch,e,t,r),r):o.getPrefixedProperty(n.rscratch,e,t)};"none"==a||("uppercase"==a?i=i.toUpperCase():"lowercase"==a&&(i=i.toLowerCase()));var l=e.pstyle("text-wrap").value;if("wrap"===l){var c=s("labelKey");if(c&&s("labelWrapKey")===c)return s("labelWrapCachedText");for(var u=i.split("\n"),d=e.pstyle("text-max-width").pfValue,f=[],p=0;p<u.length;p++){var h=u[p];if(this.calculateLabelDimensions(e,h,"line="+h).width>d){for(var g=h.split(/\s+/),v="",m=0;m<g.length;m++){var b=g[m],y=0===v.length?b:v+" "+b;this.calculateLabelDimensions(e,y,"testLine="+y).width<=d?v+=b+" ":(f.push(v),v=b+" ")}v.match(/^\s+$/)||f.push(v)}else f.push(h)}s("labelWrapCachedLines",f),i=s("labelWrapCachedText",f.join("\n")),s("labelWrapKey",c)}else if("ellipsis"===l){d=e.pstyle("text-max-width").pfValue;for(var x="",w=!1,k=0;k<i.length&&!(this.calculateLabelDimensions(e,x+i[k]+"…").width>d);k++)x+=i[k],k===i.length-1&&(w=!0);return w||(x+="…"),x}return i},calculateLabelDimensions:function(e,t,n){var r=e._private.labelStyleKey+"$@$"+t;n&&(r+="$@$"+n);var i=this.labelDimCache||(this.labelDimCache={});if(i[r])return i[r];var o=e.pstyle("font-style").strValue,a=1*e.pstyle("font-size").pfValue+"px",s=e.pstyle("font-family").strValue,l=e.pstyle("font-weight").strValue,c=this.labelCalcDiv;c||(c=this.labelCalcDiv=document.createElement("div"),document.body.appendChild(c));var u=c.style;return u.fontFamily=s,u.fontStyle=o,u.fontSize=a,u.fontWeight=l,u.position="absolute",u.left="-9999px",u.top="-9999px",u.zIndex="-1",u.visibility="hidden",u.pointerEvents="none",u.padding="0",u.lineHeight="1","wrap"===e.pstyle("text-wrap").value?u.whiteSpace="pre":u.whiteSpace="normal",c.textContent=t,i[r]={width:Math.ceil(c.clientWidth/1),height:Math.ceil(c.clientHeight/1)},i[r]},calculateLabelAngles:function(e){var t=e._private.rscratch,n=e.isEdge(),r=e.pstyle("text-rotation"),i=r.strValue;"none"===i?t.labelAngle=t.sourceLabelAngle=t.targetLabelAngle=0:n&&"autorotate"===i?(t.labelAngle=Math.atan(t.midDispY/t.midDispX),t.sourceLabelAngle=t.sourceLabelAutoAngle,t.targetLabelAngle=t.targetLabelAutoAngle):t.labelAngle=t.sourceLabelAngle=t.targetLabelAngle="autorotate"===i?0:r.pfValue}};e.exports=a},function(e,t,n){"use strict";var r={getNodeShape:function(e){var t=e.pstyle("shape").value;if(e.isParent())return"rectangle"===t||"roundrectangle"===t||"cutrectangle"===t||"barrel"===t?t:"rectangle";if("polygon"===t){var n=e.pstyle("shape-polygon-points").value;return this.nodeShapes.makePolygon(n).name}return t}};e.exports=r},function(e,t,n){"use strict";var r={registerCalculationListeners:function(){var e=this.cy,t=e.collection(),n=this,r=function(e,n){var r=!(arguments.length>2&&void 0!==arguments[2])||arguments[2];t.merge(e);for(var i=0;i<e.length;i++){var o=e[i],a=o._private,s=a.rstyle;r&&(s.clean=!1,a.bbCache=null);var l=s.dirtyEvents=s.dirtyEvents||{length:0};l[n.type]||(l[n.type]=!0,l.length++)}};n.binder(e).on("position.* style.* free.* bounds.*","node",(function(e){var t=e.target;r(t,e),r(t.connectedEdges(),e)})).on("add.*","node",(function(e){var t=e.target;r(t,e)})).on("background.*","node",(function(e){var t=e.target;r(t,e,!1)})).on("add.* style.*","edge",(function(e){var t=e.target;r(t,e),r(t.parallelEdges(),e)})).on("remove.*","edge",(function(e){for(var t=e.target.parallelEdges(),n=0;n<t.length;n++){var i=t[n];i.removed()||r(i,e)}})).on("dirty.*","node",(function(e){var t=e.target;r(t,e)})),n.beforeRender((function(r){if(r){var i=n.onUpdateEleCalcsFns;if(i)for(var o=0;o<i.length;o++)(0,i[o])(r,t);for(n.recalculateRenderedStyle(t,!1),o=0;o<t.length;o++)t[o]._private.rstyle.dirtyEvents=null;t=e.collection()}}),n.beforeRenderPriorities.eleCalcs)},onUpdateEleCalcs:function(e){(this.onUpdateEleCalcsFns=this.onUpdateEleCalcsFns||[]).push(e)},recalculateRenderedStyle:function(e,t){var n=[],r=[];if(!this.destroyed){void 0===t&&(t=!0);for(var i=0;i<e.length;i++){var o=(l=(s=e[i])._private).rstyle;t&&o.clean||s.removed()||"none"!==s.pstyle("display").value&&("nodes"===l.group?r.push(s):n.push(s),o.clean=!0)}for(i=0;i<r.length;i++){o=(l=(s=r[i])._private).rstyle;var a=s.position();this.recalculateNodeLabelProjection(s),o.nodeX=a.x,o.nodeY=a.y,o.nodeW=s.pstyle("width").pfValue,o.nodeH=s.pstyle("height").pfValue}for(this.recalculateEdgeProjections(n),i=0;i<n.length;i++){o=(l=(s=n[i])._private).rstyle;var s,l,c=l.rscratch;this.recalculateEdgeLabelProjections(s),o.srcX=c.arrowStartX,o.srcY=c.arrowStartY,o.tgtX=c.arrowEndX,o.tgtY=c.arrowEndY,o.midX=c.midX,o.midY=c.midY,o.labelAngle=c.labelAngle,o.sourceLabelAngle=c.sourceLabelAngle,o.targetLabelAngle=c.targetLabelAngle}}}};e.exports=r},function(e,t,n){"use strict";var r=n(17),i={updateCachedGrabbedEles:function(){var e=this.cachedZSortedEles;if(e){e.drag=[],e.nondrag=[];for(var t=[],n=0;n<e.length;n++){var r=(i=e[n])._private.rscratch;i.grabbed()&&!i.isParent()?t.push(i):r.inDragLayer?e.drag.push(i):e.nondrag.push(i)}for(n=0;n<t.length;n++){var i=t[n];e.drag.push(i)}}},invalidateCachedZSortedEles:function(){this.cachedZSortedEles=null},getCachedZSortedEles:function(e){if(e||!this.cachedZSortedEles){var t=this.cy.mutableElements().toArray();t.sort(r),t.interactive=t.filter((function(e){return e.interactive()})),this.cachedZSortedEles=t,this.updateCachedGrabbedEles()}else t=this.cachedZSortedEles;return t}};e.exports=i},function(e,t,n){"use strict";var r={getCachedImage:function(e,t,n){var r=this.imageCache=this.imageCache||{},i=r[e];if(i)return i.image.complete||i.image.addEventListener("load",n),i.image;var o=(i=r[e]=r[e]||{}).image=new Image;return o.addEventListener("load",n),o.addEventListener("error",(function(){o.error=!0})),"data:"===e.substring(0,"data:".length).toLowerCase()||(o.crossOrigin=t),o.src=e,o}};e.exports=r},function(e,t,n){"use strict";var r=n(0),i=n(1),o=n(2),a=(n(16),{registerBinding:function(e,t,n,r){var i=Array.prototype.slice.apply(arguments,[1]),o=this.binder(e);return o.on.apply(o,i)},binder:function(e){var t=this,n=e===window||e===document||e===document.body||r.domElement(e);if(null==t.supportsPassiveEvents){var i=!1;try{var o=Object.defineProperty({},"passive",{get:function(){i=!0}});window.addEventListener("test",null,o)}catch(e){}t.supportsPassiveEvents=i}var a=function(r,i,o){var a=Array.prototype.slice.call(arguments);return n&&t.supportsPassiveEvents&&(a[2]={capture:null!=o&&o,passive:!1,once:!1}),t.bindings.push({target:e,args:a}),(e.addEventListener||e.on).apply(e,a),this};return{on:a,addEventListener:a,addListener:a,bind:a}},nodeIsDraggable:function(e){return e&&e.isNode()&&!e.locked()&&e.grabbable()},nodeIsGrabbable:function(e){return this.nodeIsDraggable(e)&&e.interactive()}});a.load=function(){var e=this,t=function(t,n,r,o){null==t&&(t=e.cy);for(var a=0;a<n.length;a++){var s=n[a];t.emit(i.extend({originalEvent:r,type:s},o))}},n=function(e){return e.shiftKey||e.metaKey||e.ctrlKey},a=function(t,n){var r=!0;if(e.cy.hasCompoundNodes()&&t&&t.isEdge()){for(var i=0;n&&i<n.length;i++)if((t=n[i]).isNode()&&t.isParent()){r=!1;break}}else r=!0;return r},s=function(e){e[0]._private.rscratch.inDragLayer=!0},l=function(e){e[0]._private.rscratch.isGrabTarget=!0},c=function(t,n){var r=function(t){var n;if(t.addToList&&e.cy.hasCompoundNodes()){if(!t.addToList.hasId){t.addToList.hasId={};for(var r=0;r<t.addToList.length;r++){var i=t.addToList[r];t.addToList.hasId[i.id()]=!0}}n=t.addToList.hasId}return n||{}}(n);r[t.id()]||(n.addToList.push(t),r[t.id()]=!0,function(e){e[0]._private.grabbed=!0}(t))},u=function(t,n){n=n||{};var r=t.cy().hasCompoundNodes();n.inDragLayer&&(t.forEach(s),t.neighborhood().stdFilter((function(e){return!r||e.isEdge()})).forEach(s)),n.addToList&&t.forEach((function(e){c(e,n)})),function(e,t){if(e.cy().hasCompoundNodes()&&(null!=t.inDragLayer||null!=t.addToList)){var n=e.descendants();t.inDragLayer&&(n.forEach(s),n.connectedEdges().forEach(s)),t.addToList&&n.forEach((function(e){c(e,t)}))}}(t,n),p(t,{inDragLayer:n.inDragLayer}),e.updateCachedGrabbedEles()},d=u,f=function(t){t&&(t.hasId={},e.getCachedZSortedEles().forEach((function(e){!function(e){e[0]._private.grabbed=!1}(e),function(e){e[0]._private.rscratch.inDragLayer=!1}(e),function(e){e[0]._private.rscratch.isGrabTarget=!1}(e)})),e.updateCachedGrabbedEles())},p=function(e,t){if((null!=t.inDragLayer||null!=t.addToList)&&e.cy().hasCompoundNodes()){var n=e.ancestors().orphans();if(!n.same(e)){var r=n.descendants().spawnSelf().merge(n).unmerge(e).unmerge(e.descendants()),i=r.connectedEdges();t.inDragLayer&&(i.forEach(s),r.forEach(s)),t.addToList&&r.forEach((function(e){c(e,t)}))}}},h="undefined"!=typeof MutationObserver;h?(e.removeObserver=new MutationObserver((function(t){for(var n=0;n<t.length;n++){var r=t[n].removedNodes;if(r)for(var i=0;i<r.length;i++)if(r[i]===e.container){e.destroy();break}}})),e.container.parentNode&&e.removeObserver.observe(e.container.parentNode,{childList:!0})):e.registerBinding(e.container,"DOMNodeRemoved",(function(t){e.destroy()}));var g=i.debounce((function(){e.cy.resize()}),100);h&&(e.styleObserver=new MutationObserver(g),e.styleObserver.observe(e.container,{attributes:!0})),e.registerBinding(window,"resize",g);var v=function(){e.invalidateContainerClientCoordsCache()};!function(e,t){for(;null!=e;)t(e),e=e.parentNode}(e.container,(function(t){e.registerBinding(t,"transitionend",v),e.registerBinding(t,"animationend",v),e.registerBinding(t,"scroll",v)})),e.registerBinding(e.container,"contextmenu",(function(e){e.preventDefault()}));var m,b,y,x,w,k,A,E,S,C,$,O,_,T=function(t){for(var n=e.findContainerClientCoords(),r=n[0],i=n[1],o=n[2],a=n[3],s=t.touches?t.touches:[t],l=!1,c=0;c<s.length;c++){var u=s[c];if(r<=u.clientX&&u.clientX<=r+o&&i<=u.clientY&&u.clientY<=i+a){l=!0;break}}if(!l)return!1;for(var d=e.container,f=t.target.parentNode,p=!1;f;){if(f===d){p=!0;break}f=f.parentNode}return!!p};e.registerBinding(e.container,"mousedown",(function(n){if(T(n)){n.preventDefault(),e.hoverData.capture=!0,e.hoverData.which=n.which;var r=e.cy,i=[n.clientX,n.clientY],o=e.projectIntoViewport(i[0],i[1]),a=e.selection,s=e.findNearestElements(o[0],o[1],!0,!1),c=s[0],f=e.dragData.possibleDragElements;if(e.hoverData.mdownPos=o,e.hoverData.mdownGPos=i,3==n.which){e.hoverData.cxtStarted=!0;var p={originalEvent:n,type:"cxttapstart",position:{x:o[0],y:o[1]}};c?(c.activate(),c.emit(p),e.hoverData.down=c):r.emit(p),e.hoverData.downTime=(new Date).getTime(),e.hoverData.cxtDragged=!1}else if(1==n.which){if(c&&c.activate(),null!=c&&e.nodeIsGrabbable(c)){var h=function(e){return{originalEvent:n,type:e,position:{x:o[0],y:o[1]}}};if(l(c),c.selected()){f=e.dragData.possibleDragElements=[];var g=r.$((function(t){return t.isNode()&&t.selected()&&e.nodeIsGrabbable(t)}));u(g,{addToList:f}),c.emit(h("grabon")),g.forEach((function(e){e.emit(h("grab"))}))}else f=e.dragData.possibleDragElements=[],d(c,{addToList:f}),c.emit(h("grabon")).emit(h("grab"));e.redrawHint("eles",!0),e.redrawHint("drag",!0)}e.hoverData.down=c,e.hoverData.downs=s,e.hoverData.downTime=(new Date).getTime(),t(c,["mousedown","tapstart","vmousedown"],n,{position:{x:o[0],y:o[1]}}),null==c?(a[4]=1,e.data.bgActivePosistion={x:o[0],y:o[1]},e.redrawHint("select",!0),e.redraw()):c.isEdge()&&(a[4]=1),e.hoverData.tapholdCancelled=!1,clearTimeout(e.hoverData.tapholdTimeout),e.hoverData.tapholdTimeout=setTimeout((function(){if(!e.hoverData.tapholdCancelled){var t=e.hoverData.down;t?t.emit({originalEvent:n,type:"taphold",position:{x:o[0],y:o[1]}}):r.emit({originalEvent:n,type:"taphold",position:{x:o[0],y:o[1]}})}}),e.tapholdDuration)}a[0]=a[2]=o[0],a[1]=a[3]=o[1]}}),!1),e.registerBinding(window,"mousemove",(function(i){if(e.hoverData.capture||T(i)){var s=!1,l=e.cy,c=l.zoom(),d=[i.clientX,i.clientY],p=e.projectIntoViewport(d[0],d[1]),h=e.hoverData.mdownPos,g=e.hoverData.mdownGPos,v=e.selection,m=null;e.hoverData.draggingEles||e.hoverData.dragging||e.hoverData.selecting||(m=e.findNearestElement(p[0],p[1],!0,!1));var b,y=e.hoverData.last,x=e.hoverData.down,w=[p[0]-v[2],p[1]-v[3]],k=e.dragData.possibleDragElements;if(g){var A=d[0]-g[0],E=A*A,S=d[1]-g[1],C=E+S*S;e.hoverData.isOverThresholdDrag=b=C>=e.desktopTapThreshold2}var $=n(i);b&&(e.hoverData.tapholdCancelled=!0),s=!0,t(m,["mousemove","vmousemove","tapdrag"],i,{position:{x:p[0],y:p[1]}});var O=function(){e.data.bgActivePosistion=void 0,e.hoverData.selecting||l.emit("boxstart"),v[4]=1,e.hoverData.selecting=!0,e.redrawHint("select",!0),e.redraw()};if(3===e.hoverData.which){if(b){var _={originalEvent:i,type:"cxtdrag",position:{x:p[0],y:p[1]}};x?x.emit(_):l.emit(_),e.hoverData.cxtDragged=!0,e.hoverData.cxtOver&&m===e.hoverData.cxtOver||(e.hoverData.cxtOver&&e.hoverData.cxtOver.emit({originalEvent:i,type:"cxtdragout",position:{x:p[0],y:p[1]}}),e.hoverData.cxtOver=m,m&&m.emit({originalEvent:i,type:"cxtdragover",position:{x:p[0],y:p[1]}}))}}else if(e.hoverData.dragging){if(s=!0,l.panningEnabled()&&l.userPanningEnabled()){var j;if(e.hoverData.justStartedPan){var P=e.hoverData.mdownPos;j={x:(p[0]-P[0])*c,y:(p[1]-P[1])*c},e.hoverData.justStartedPan=!1}else j={x:w[0]*c,y:w[1]*c};l.panBy(j),e.hoverData.dragged=!0}p=e.projectIntoViewport(i.clientX,i.clientY)}else if(1!=v[4]||null!=x&&!x.isEdge()){if(x&&x.isEdge()&&x.active()&&x.unactivate(),x&&x.grabbed()||m==y||(y&&t(y,["mouseout","tapdragout"],i,{position:{x:p[0],y:p[1]}}),m&&t(m,["mouseover","tapdragover"],i,{position:{x:p[0],y:p[1]}}),e.hoverData.last=m),x)if(b){if(l.boxSelectionEnabled()&&$)x&&x.grabbed()&&(f(k),x.emit("free")),O();else if(x&&x.grabbed()&&e.nodeIsDraggable(x)){var D=!e.dragData.didDrag;D&&e.redrawHint("eles",!0),e.dragData.didDrag=!0;var R=[];e.hoverData.draggingEles||u(l.collection(k),{inDragLayer:!0});for(var I=0;I<k.length;I++){var N=k[I];if(e.nodeIsDraggable(N)&&N.grabbed()){var M=N.position();if(R.push(N),r.number(w[0])&&r.number(w[1])&&(M.x+=w[0],M.y+=w[1],D)){var z=e.hoverData.dragDelta;z&&r.number(z[0])&&r.number(z[1])&&(M.x+=z[0],M.y+=z[1])}}}e.hoverData.draggingEles=!0;var L=l.collection(R);L.dirtyCompoundBoundsCache(),L.emit("position drag"),e.redrawHint("drag",!0),e.redraw()}}else!function(){var t=e.hoverData.dragDelta=e.hoverData.dragDelta||[];0===t.length?(t.push(w[0]),t.push(w[1])):(t[0]+=w[0],t[1]+=w[1])}();s=!0}else b&&(e.hoverData.dragging||!l.boxSelectionEnabled()||!$&&l.panningEnabled()&&l.userPanningEnabled()?!e.hoverData.selecting&&l.panningEnabled()&&l.userPanningEnabled()&&a(x,e.hoverData.downs)&&(e.hoverData.dragging=!0,e.hoverData.justStartedPan=!0,v[4]=0,e.data.bgActivePosistion=o.array2point(h),e.redrawHint("select",!0),e.redraw()):O(),x&&x.isEdge()&&x.active()&&x.unactivate());return v[2]=p[0],v[3]=p[1],s?(i.stopPropagation&&i.stopPropagation(),i.preventDefault&&i.preventDefault(),!1):void 0}}),!1),e.registerBinding(window,"mouseup",(function(r){if(e.hoverData.capture){e.hoverData.capture=!1;var i=e.cy,o=e.projectIntoViewport(r.clientX,r.clientY),a=e.selection,s=e.findNearestElement(o[0],o[1],!0,!1),l=e.dragData.possibleDragElements,c=e.hoverData.down,u=n(r);if(e.data.bgActivePosistion&&(e.redrawHint("select",!0),e.redraw()),e.hoverData.tapholdCancelled=!0,e.data.bgActivePosistion=void 0,c&&c.unactivate(),3===e.hoverData.which){var d={originalEvent:r,type:"cxttapend",position:{x:o[0],y:o[1]}};if(c?c.emit(d):i.emit(d),!e.hoverData.cxtDragged){var p={originalEvent:r,type:"cxttap",position:{x:o[0],y:o[1]}};c?c.emit(p):i.emit(p)}e.hoverData.cxtDragged=!1,e.hoverData.which=null}else if(1===e.hoverData.which){if(null!=c||e.dragData.didDrag||e.hoverData.selecting||e.hoverData.dragged||n(r)||(i.$((function(e){return e.selected()})).unselect(),l.length>0&&e.redrawHint("eles",!0),e.dragData.possibleDragElements=l=[]),t(s,["mouseup","tapend","vmouseup"],r,{position:{x:o[0],y:o[1]}}),e.dragData.didDrag||e.hoverData.dragged||e.hoverData.selecting||e.hoverData.isOverThresholdDrag||t(c,["click","tap","vclick"],r,{position:{x:o[0],y:o[1]}}),s!=c||e.dragData.didDrag||e.hoverData.selecting||null!=s&&s._private.selectable&&(e.hoverData.dragging||("additive"===i.selectionType()||u?s.selected()?s.unselect():s.select():u||(i.$(":selected").unmerge(s).unselect(),s.select())),e.redrawHint("eles",!0)),e.hoverData.selecting){var h=i.collection(e.getAllInBox(a[0],a[1],a[2],a[3]));e.redrawHint("select",!0),h.length>0&&e.redrawHint("eles",!0),i.emit("boxend");var g=function(e){return e.selectable()&&!e.selected()};"additive"===i.selectionType()||u||i.$(":selected").unmerge(h).unselect(),h.emit("box").stdFilter(g).select().emit("boxselect"),e.redraw()}if(e.hoverData.dragging&&(e.hoverData.dragging=!1,e.redrawHint("select",!0),e.redrawHint("eles",!0),e.redraw()),!a[4]){e.redrawHint("drag",!0),e.redrawHint("eles",!0);var v=c&&c.grabbed();f(l),v&&c.emit("free")}}a[4]=0,e.hoverData.down=null,e.hoverData.cxtStarted=!1,e.hoverData.draggingEles=!1,e.hoverData.selecting=!1,e.hoverData.isOverThresholdDrag=!1,e.dragData.didDrag=!1,e.hoverData.dragged=!1,e.hoverData.dragDelta=[],e.hoverData.mdownPos=null,e.hoverData.mdownGPos=null}}),!1),e.registerBinding(e.container,"wheel",(function(t){if(!e.scrollingPage){var n,r=e.cy,i=e.projectIntoViewport(t.clientX,t.clientY),o=[i[0]*r.zoom()+r.pan().x,i[1]*r.zoom()+r.pan().y];e.hoverData.draggingEles||e.hoverData.dragging||e.hoverData.cxtStarted||0!==e.selection[4]?t.preventDefault():r.panningEnabled()&&r.userPanningEnabled()&&r.zoomingEnabled()&&r.userZoomingEnabled()&&(t.preventDefault(),e.data.wheelZooming=!0,clearTimeout(e.data.wheelTimeout),e.data.wheelTimeout=setTimeout((function(){e.data.wheelZooming=!1,e.redrawHint("eles",!0),e.redraw()}),150),n=null!=t.deltaY?t.deltaY/-250:null!=t.wheelDeltaY?t.wheelDeltaY/1e3:t.wheelDelta/1e3,n*=e.wheelSensitivity,1===t.deltaMode&&(n*=33),r.zoom({level:r.zoom()*Math.pow(10,n),renderedPosition:{x:o[0],y:o[1]}}))}}),!0),e.registerBinding(window,"scroll",(function(t){e.scrollingPage=!0,clearTimeout(e.scrollingPageTimeout),e.scrollingPageTimeout=setTimeout((function(){e.scrollingPage=!1}),250)}),!0),e.registerBinding(e.container,"mouseout",(function(t){var n=e.projectIntoViewport(t.clientX,t.clientY);e.cy.emit({originalEvent:t,type:"mouseout",position:{x:n[0],y:n[1]}})}),!1),e.registerBinding(e.container,"mouseover",(function(t){var n=e.projectIntoViewport(t.clientX,t.clientY);e.cy.emit({originalEvent:t,type:"mouseover",position:{x:n[0],y:n[1]}})}),!1);var j,P,D,R,I=function(e,t,n,r){return Math.sqrt((n-e)*(n-e)+(r-t)*(r-t))},N=function(e,t,n,r){return(n-e)*(n-e)+(r-t)*(r-t)};if(e.registerBinding(e.container,"touchstart",j=function(n){if(T(n)){e.touchData.capture=!0,e.data.bgActivePosistion=void 0;var r=e.cy,i=e.touchData.now,o=e.touchData.earlier;if(n.touches[0]){var a=e.projectIntoViewport(n.touches[0].clientX,n.touches[0].clientY);i[0]=a[0],i[1]=a[1]}if(n.touches[1]&&(a=e.projectIntoViewport(n.touches[1].clientX,n.touches[1].clientY),i[2]=a[0],i[3]=a[1]),n.touches[2]&&(a=e.projectIntoViewport(n.touches[2].clientX,n.touches[2].clientY),i[4]=a[0],i[5]=a[1]),n.touches[1]){f(e.dragData.touchDragEles);var s=e.findContainerClientCoords();S=s[0],C=s[1],$=s[2],O=s[3],m=n.touches[0].clientX-S,b=n.touches[0].clientY-C,y=n.touches[1].clientX-S,x=n.touches[1].clientY-C,_=0<=m&&m<=$&&0<=y&&y<=$&&0<=b&&b<=O&&0<=x&&x<=O;var c=r.pan(),p=r.zoom();if(w=I(m,b,y,x),k=N(m,b,y,x),E=[((A=[(m+y)/2,(b+x)/2])[0]-c.x)/p,(A[1]-c.y)/p],k<4e4&&!n.touches[2]){var h=e.findNearestElement(i[0],i[1],!0,!0),g=e.findNearestElement(i[2],i[3],!0,!0);return h&&h.isNode()?(h.activate().emit({originalEvent:n,type:"cxttapstart",position:{x:i[0],y:i[1]}}),e.touchData.start=h):g&&g.isNode()?(g.activate().emit({originalEvent:n,type:"cxttapstart",position:{x:i[0],y:i[1]}}),e.touchData.start=g):r.emit({originalEvent:n,type:"cxttapstart",position:{x:i[0],y:i[1]}}),e.touchData.start&&(e.touchData.start._private.grabbed=!1),e.touchData.cxt=!0,e.touchData.cxtDragged=!1,e.data.bgActivePosistion=void 0,void e.redraw()}}if(n.touches[2]);else if(n.touches[1]);else if(n.touches[0]){var v=e.findNearestElements(i[0],i[1],!0,!0),j=v[0];if(null!=j&&(j.activate(),e.touchData.start=j,e.touchData.starts=v,e.nodeIsGrabbable(j))){var P=e.dragData.touchDragEles=[],D=null;e.redrawHint("eles",!0),e.redrawHint("drag",!0),j.selected()?(D=r.$((function(t){return t.selected()&&e.nodeIsGrabbable(t)})),u(D,{addToList:P})):d(j,{addToList:P}),l(j);var R=function(e){return{originalEvent:n,type:e,position:{x:i[0],y:i[1]}}};j.emit(R("grabon")),D?D.forEach((function(e){e.emit(R("grab"))})):j.emit(R("grab"))}t(j,["touchstart","tapstart","vmousedown"],n,{position:{x:i[0],y:i[1]}}),null==j&&(e.data.bgActivePosistion={x:a[0],y:a[1]},e.redrawHint("select",!0),e.redraw()),e.touchData.singleTouchMoved=!1,e.touchData.singleTouchStartTime=+new Date,clearTimeout(e.touchData.tapholdTimeout),e.touchData.tapholdTimeout=setTimeout((function(){!1!==e.touchData.singleTouchMoved||e.pinching||e.touchData.selecting||(t(e.touchData.start,["taphold"],n,{position:{x:i[0],y:i[1]}}),e.touchData.start||r.$(":selected").unselect())}),e.tapholdDuration)}if(n.touches.length>=1){for(var M=e.touchData.startPosition=[],z=0;z<i.length;z++)M[z]=o[z]=i[z];var L=n.touches[0];e.touchData.startGPosition=[L.clientX,L.clientY]}}},!1),e.registerBinding(window,"touchmove",P=function(n){var i=e.touchData.capture;if(i||T(n)){var s=e.selection,l=e.cy,c=e.touchData.now,d=e.touchData.earlier,p=l.zoom();if(n.touches[0]){var h=e.projectIntoViewport(n.touches[0].clientX,n.touches[0].clientY);c[0]=h[0],c[1]=h[1]}n.touches[1]&&(h=e.projectIntoViewport(n.touches[1].clientX,n.touches[1].clientY),c[2]=h[0],c[3]=h[1]),n.touches[2]&&(h=e.projectIntoViewport(n.touches[2].clientX,n.touches[2].clientY),c[4]=h[0],c[5]=h[1]);var g,v=e.touchData.startGPosition;if(i&&n.touches[0]&&v){for(var A=[],$=0;$<c.length;$++)A[$]=c[$]-d[$];var O=n.touches[0].clientX-v[0],j=O*O,P=n.touches[0].clientY-v[1];g=j+P*P>=e.touchTapThreshold2}if(i&&e.touchData.cxt){n.preventDefault();var D=n.touches[0].clientX-S,R=n.touches[0].clientY-C,M=n.touches[1].clientX-S,z=n.touches[1].clientY-C,L=N(D,R,M,z);if(L/k>=2.25||L>=22500){e.touchData.cxt=!1,e.data.bgActivePosistion=void 0,e.redrawHint("select",!0);var B={originalEvent:n,type:"cxttapend",position:{x:c[0],y:c[1]}};e.touchData.start?(e.touchData.start.unactivate().emit(B),e.touchData.start=null):l.emit(B)}}if(i&&e.touchData.cxt){B={originalEvent:n,type:"cxtdrag",position:{x:c[0],y:c[1]}},e.data.bgActivePosistion=void 0,e.redrawHint("select",!0),e.touchData.start?e.touchData.start.emit(B):l.emit(B),e.touchData.start&&(e.touchData.start._private.grabbed=!1),e.touchData.cxtDragged=!0;var F=e.findNearestElement(c[0],c[1],!0,!0);e.touchData.cxtOver&&F===e.touchData.cxtOver||(e.touchData.cxtOver&&e.touchData.cxtOver.emit({originalEvent:n,type:"cxtdragout",position:{x:c[0],y:c[1]}}),e.touchData.cxtOver=F,F&&F.emit({originalEvent:n,type:"cxtdragover",position:{x:c[0],y:c[1]}}))}else if(i&&n.touches[2]&&l.boxSelectionEnabled())n.preventDefault(),e.data.bgActivePosistion=void 0,this.lastThreeTouch=+new Date,e.touchData.selecting||l.emit("boxstart"),e.touchData.selecting=!0,e.redrawHint("select",!0),s&&0!==s.length&&void 0!==s[0]?(s[2]=(c[0]+c[2]+c[4])/3,s[3]=(c[1]+c[3]+c[5])/3):(s[0]=(c[0]+c[2]+c[4])/3,s[1]=(c[1]+c[3]+c[5])/3,s[2]=(c[0]+c[2]+c[4])/3+1,s[3]=(c[1]+c[3]+c[5])/3+1),s[4]=1,e.touchData.selecting=!0,e.redraw();else if(i&&n.touches[1]&&l.zoomingEnabled()&&l.panningEnabled()&&l.userZoomingEnabled()&&l.userPanningEnabled()){if(n.preventDefault(),e.data.bgActivePosistion=void 0,e.redrawHint("select",!0),ee=e.dragData.touchDragEles){e.redrawHint("drag",!0);for(var q=0;q<ee.length;q++){var V=ee[q]._private;V.grabbed=!1,V.rscratch.inDragLayer=!1}}D=n.touches[0].clientX-S,R=n.touches[0].clientY-C,M=n.touches[1].clientX-S,z=n.touches[1].clientY-C;var U=I(D,R,M,z),H=U/w;if(_){var G=(D-m+(M-y))/2,W=(R-b+(z-x))/2,Y=l.zoom(),X=Y*H,Z=l.pan(),Q=E[0]*Y+Z.x,J=E[1]*Y+Z.y,K={x:-X/Y*(Q-Z.x-G)+Q,y:-X/Y*(J-Z.y-W)+J};if(e.touchData.start&&e.touchData.start.active()){var ee=e.dragData.touchDragEles;f(ee),e.redrawHint("drag",!0),e.redrawHint("eles",!0),e.touchData.start.unactivate().emit("free")}l.viewport({zoom:X,pan:K,cancelOnFailedZoom:!0}),w=U,m=D,b=R,y=M,x=z,e.pinching=!0}n.touches[0]&&(h=e.projectIntoViewport(n.touches[0].clientX,n.touches[0].clientY),c[0]=h[0],c[1]=h[1]),n.touches[1]&&(h=e.projectIntoViewport(n.touches[1].clientX,n.touches[1].clientY),c[2]=h[0],c[3]=h[1]),n.touches[2]&&(h=e.projectIntoViewport(n.touches[2].clientX,n.touches[2].clientY),c[4]=h[0],c[5]=h[1])}else if(n.touches[0]){var te=e.touchData.start,ne=e.touchData.last;if(e.hoverData.draggingEles||e.swipePanning||(F=e.findNearestElement(c[0],c[1],!0,!0)),i&&null!=te&&n.preventDefault(),i&&null!=te&&e.nodeIsDraggable(te))if(g){ee=e.dragData.touchDragEles;var re=!e.dragData.didDrag;re&&u(l.collection(ee),{inDragLayer:!0});for(var ie=0;ie<ee.length;ie++){var oe=ee[ie];if(e.nodeIsDraggable(oe)&&oe.grabbed()){e.dragData.didDrag=!0;var ae=oe.position();r.number(A[0])&&r.number(A[1])&&(ae.x+=A[0],ae.y+=A[1]),re&&(e.redrawHint("eles",!0),(le=e.touchData.dragDelta)&&r.number(le[0])&&r.number(le[1])&&(ae.x+=le[0],ae.y+=le[1]))}}var se=l.collection(ee);se.dirtyCompoundBoundsCache(),se.emit("position drag"),e.hoverData.draggingEles=!0,e.redrawHint("drag",!0),e.touchData.startPosition[0]==d[0]&&e.touchData.startPosition[1]==d[1]&&e.redrawHint("eles",!0),e.redraw()}else{var le;0===(le=e.touchData.dragDelta=e.touchData.dragDelta||[]).length?(le.push(A[0]),le.push(A[1])):(le[0]+=A[0],le[1]+=A[1])}if(t(te||F,["touchmove","tapdrag","vmousemove"],n,{position:{x:c[0],y:c[1]}}),te&&te.grabbed()||F==ne||(ne&&ne.emit({originalEvent:n,type:"tapdragout",position:{x:c[0],y:c[1]}}),F&&F.emit({originalEvent:n,type:"tapdragover",position:{x:c[0],y:c[1]}})),e.touchData.last=F,i)for(q=0;q<c.length;q++)c[q]&&e.touchData.startPosition[q]&&g&&(e.touchData.singleTouchMoved=!0);i&&(null==te||te.isEdge())&&l.panningEnabled()&&l.userPanningEnabled()&&(a(te,e.touchData.starts)&&(n.preventDefault(),e.swipePanning?l.panBy({x:A[0]*p,y:A[1]*p}):g&&(e.swipePanning=!0,l.panBy({x:O*p,y:P*p}),te&&(te.unactivate(),e.data.bgActivePosistion||(e.data.bgActivePosistion=o.array2point(e.touchData.startPosition)),e.redrawHint("select",!0),e.touchData.start=null))),h=e.projectIntoViewport(n.touches[0].clientX,n.touches[0].clientY),c[0]=h[0],c[1]=h[1])}for($=0;$<c.length;$++)d[$]=c[$]}},!1),e.registerBinding(window,"touchcancel",D=function(t){var n=e.touchData.start;e.touchData.capture=!1,n&&n.unactivate()}),e.registerBinding(window,"touchend",R=function(n){var r=e.touchData.start;if(e.touchData.capture){e.touchData.capture=!1,n.preventDefault();var i=e.selection;e.swipePanning=!1,e.hoverData.draggingEles=!1;var o,a=e.cy,s=a.zoom(),l=e.touchData.now,c=e.touchData.earlier;if(n.touches[0]){var u=e.projectIntoViewport(n.touches[0].clientX,n.touches[0].clientY);l[0]=u[0],l[1]=u[1]}if(n.touches[1]&&(u=e.projectIntoViewport(n.touches[1].clientX,n.touches[1].clientY),l[2]=u[0],l[3]=u[1]),n.touches[2]&&(u=e.projectIntoViewport(n.touches[2].clientX,n.touches[2].clientY),l[4]=u[0],l[5]=u[1]),r&&r.unactivate(),e.touchData.cxt){if(o={originalEvent:n,type:"cxttapend",position:{x:l[0],y:l[1]}},r?r.emit(o):a.emit(o),!e.touchData.cxtDragged){var d={originalEvent:n,type:"cxttap",position:{x:l[0],y:l[1]}};r?r.emit(d):a.emit(d)}return e.touchData.start&&(e.touchData.start._private.grabbed=!1),e.touchData.cxt=!1,e.touchData.start=null,void e.redraw()}if(!n.touches[2]&&a.boxSelectionEnabled()&&e.touchData.selecting){e.touchData.selecting=!1;var p=a.collection(e.getAllInBox(i[0],i[1],i[2],i[3]));i[0]=void 0,i[1]=void 0,i[2]=void 0,i[3]=void 0,i[4]=0,e.redrawHint("select",!0),a.emit("boxend"),p.emit("box").stdFilter((function(e){return e.selectable()&&!e.selected()})).select().emit("boxselect"),p.nonempty()&&e.redrawHint("eles",!0),e.redraw()}if(null!=r&&r.unactivate(),n.touches[2])e.data.bgActivePosistion=void 0,e.redrawHint("select",!0);else if(n.touches[1]);else if(n.touches[0]);else if(!n.touches[0]){e.data.bgActivePosistion=void 0,e.redrawHint("select",!0);var h=e.dragData.touchDragEles;if(null!=r){var g=r._private.grabbed;f(h),e.redrawHint("drag",!0),e.redrawHint("eles",!0),g&&r.emit("free"),t(r,["touchend","tapend","vmouseup","tapdragout"],n,{position:{x:l[0],y:l[1]}}),r.unactivate(),e.touchData.start=null}else{var v=e.findNearestElement(l[0],l[1],!0,!0);t(v,["touchend","tapend","vmouseup","tapdragout"],n,{position:{x:l[0],y:l[1]}})}var m=e.touchData.startPosition[0]-l[0],b=m*m,y=e.touchData.startPosition[1]-l[1],x=(b+y*y)*s*s;null!=r&&!e.dragData.didDrag&&r._private.selectable&&x<e.touchTapThreshold2&&!e.pinching&&("single"===a.selectionType()?(a.$(":selected").unmerge(r).unselect(),r.select()):r.selected()?r.unselect():r.select(),e.redrawHint("eles",!0)),e.touchData.singleTouchMoved||t(r,["tap","vclick"],n,{position:{x:l[0],y:l[1]}}),e.touchData.singleTouchMoved=!0}for(var w=0;w<l.length;w++)c[w]=l[w];e.dragData.didDrag=!1,0===n.touches.length&&(e.touchData.dragDelta=[],e.touchData.startPosition=null,e.touchData.startGPosition=null),n.touches.length<2&&(e.pinching=!1,e.redrawHint("eles",!0),e.redraw())}},!1),"undefined"==typeof TouchEvent){var M=[],z=function(e){return{clientX:e.clientX,clientY:e.clientY,force:1,identifier:e.pointerId,pageX:e.pageX,pageY:e.pageY,radiusX:e.width/2,radiusY:e.height/2,screenX:e.screenX,screenY:e.screenY,target:e.target}},L=function(e){M.push(function(e){return{event:e,touch:z(e)}}(e))},B=function(e){for(var t=0;t<M.length;t++)if(M[t].event.pointerId===e.pointerId)return void M.splice(t,1)},F=function(e){e.touches=M.map((function(e){return e.touch}))},q=function(e){return"mouse"===e.pointerType||4===e.pointerType};e.registerBinding(e.container,"pointerdown",(function(e){q(e)||(e.preventDefault(),L(e),F(e),j(e))})),e.registerBinding(e.container,"pointerup",(function(e){q(e)||(B(e),F(e),R(e))})),e.registerBinding(e.container,"pointercancel",(function(e){q(e)||(B(e),F(e),D())})),e.registerBinding(e.container,"pointermove",(function(e){q(e)||(e.preventDefault(),function(e){var t=M.filter((function(t){return t.event.pointerId===e.pointerId}))[0];t.event=e,t.touch=z(e)}(e),F(e),P(e))}))}},e.exports=a},function(e,t,n){"use strict";var r=n(2),i={generatePolygon:function(e,t){return this.nodeShapes[e]={renderer:this,name:e,points:t,draw:function(e,t,n,r,i){this.renderer.nodeShapeImpl("polygon",e,t,n,r,i,this.points)},intersectLine:function(e,t,n,i,o,a,s){return r.polygonIntersectLine(o,a,this.points,e,t,n/2,i/2,s)},checkPoint:function(e,t,n,i,o,a,s){return r.pointInsidePolygon(e,t,this.points,a,s,i,o,[0,-1],n)}}},generateEllipse:function(){return this.nodeShapes.ellipse={renderer:this,name:"ellipse",draw:function(e,t,n,r,i){this.renderer.nodeShapeImpl(this.name,e,t,n,r,i)},intersectLine:function(e,t,n,i,o,a,s){return r.intersectLineEllipse(o,a,e,t,n/2+s,i/2+s)},checkPoint:function(e,t,n,i,o,a,s){return r.checkInEllipse(e,t,i,o,a,s,n)}}},generateRoundRectangle:function(){return this.nodeShapes.roundrectangle={renderer:this,name:"roundrectangle",points:r.generateUnitNgonPointsFitToSquare(4,0),draw:function(e,t,n,r,i){this.renderer.nodeShapeImpl(this.name,e,t,n,r,i)},intersectLine:function(e,t,n,i,o,a,s){return r.roundRectangleIntersectLine(o,a,e,t,n,i,s)},checkPoint:function(e,t,n,i,o,a,s){var l=r.getRoundRectangleRadius(i,o),c=2*l;return!!(r.pointInsidePolygon(e,t,this.points,a,s,i,o-c,[0,-1],n)||r.pointInsidePolygon(e,t,this.points,a,s,i-c,o,[0,-1],n)||r.checkInEllipse(e,t,c,c,a-i/2+l,s-o/2+l,n)||r.checkInEllipse(e,t,c,c,a+i/2-l,s-o/2+l,n)||r.checkInEllipse(e,t,c,c,a+i/2-l,s+o/2-l,n)||r.checkInEllipse(e,t,c,c,a-i/2+l,s+o/2-l,n))}}},generateCutRectangle:function(){return this.nodeShapes.cutrectangle={renderer:this,name:"cutrectangle",cornerLength:r.getCutRectangleCornerLength(),points:r.generateUnitNgonPointsFitToSquare(4,0),draw:function(e,t,n,r,i){this.renderer.nodeShapeImpl(this.name,e,t,n,r,i)},generateCutTrianglePts:function(e,t,n,r){var i=this.cornerLength,o=t/2,a=e/2,s=n-a,l=n+a,c=r-o,u=r+o;return{topLeft:[s,c+i,s+i,c,s+i,c+i],topRight:[l-i,c,l,c+i,l-i,c+i],bottomRight:[l,u-i,l-i,u,l-i,u-i],bottomLeft:[s+i,u,s,u-i,s+i,u-i]}},intersectLine:function(e,t,n,i,o,a,s){var l=this.generateCutTrianglePts(n+2*s,i+2*s,e,t),c=[].concat.apply([],[l.topLeft.splice(0,4),l.topRight.splice(0,4),l.bottomRight.splice(0,4),l.bottomLeft.splice(0,4)]);return r.polygonIntersectLine(o,a,c,e,t)},checkPoint:function(e,t,n,i,o,a,s){if(r.pointInsidePolygon(e,t,this.points,a,s,i,o-2*this.cornerLength,[0,-1],n))return!0;if(r.pointInsidePolygon(e,t,this.points,a,s,i-2*this.cornerLength,o,[0,-1],n))return!0;var l=this.generateCutTrianglePts(i,o,a,s);return r.pointInsidePolygonPoints(e,t,l.topLeft)||r.pointInsidePolygonPoints(e,t,l.topRight)||r.pointInsidePolygonPoints(e,t,l.bottomRight)||r.pointInsidePolygonPoints(e,t,l.bottomLeft)}}},generateBarrel:function(){return this.nodeShapes.barrel={renderer:this,name:"barrel",points:r.generateUnitNgonPointsFitToSquare(4,0),draw:function(e,t,n,r,i){this.renderer.nodeShapeImpl(this.name,e,t,n,r,i)},intersectLine:function(e,t,n,i,o,a,s){var l=this.generateBarrelBezierPts(n+2*s,i+2*s,e,t),c=function(e){var t=r.qbezierPtAt({x:e[0],y:e[1]},{x:e[2],y:e[3]},{x:e[4],y:e[5]},.15),n=r.qbezierPtAt({x:e[0],y:e[1]},{x:e[2],y:e[3]},{x:e[4],y:e[5]},.5),i=r.qbezierPtAt({x:e[0],y:e[1]},{x:e[2],y:e[3]},{x:e[4],y:e[5]},.85);return[e[0],e[1],t.x,t.y,n.x,n.y,i.x,i.y,e[4],e[5]]},u=[].concat(c(l.topLeft),c(l.topRight),c(l.bottomRight),c(l.bottomLeft));return r.polygonIntersectLine(o,a,u,e,t)},generateBarrelBezierPts:function(e,t,n,i){var o=t/2,a=e/2,s=n-a,l=n+a,c=i-o,u=i+o,d=r.getBarrelCurveConstants(e,t),f=d.heightOffset,p=d.widthOffset,h=d.ctrlPtOffsetPct*e,g={topLeft:[s,c+f,s+h,c,s+p,c],topRight:[l-p,c,l-h,c,l,c+f],bottomRight:[l,u-f,l-h,u,l-p,u],bottomLeft:[s+p,u,s+h,u,s,u-f]};return g.topLeft.isTop=!0,g.topRight.isTop=!0,g.bottomLeft.isBottom=!0,g.bottomRight.isBottom=!0,g},checkPoint:function(e,t,n,i,o,a,s){var l=r.getBarrelCurveConstants(i,o),c=l.heightOffset,u=l.widthOffset;if(r.pointInsidePolygon(e,t,this.points,a,s,i,o-2*c,[0,-1],n))return!0;if(r.pointInsidePolygon(e,t,this.points,a,s,i-2*u,o,[0,-1],n))return!0;for(var d=this.generateBarrelBezierPts(i,o,a,s),f=function(e,t,n){var i=n[4],o=n[2],a=n[0],s=n[5],l=n[1],c=Math.min(i,a),u=Math.max(i,a),d=Math.min(s,l),f=Math.max(s,l);if(c<=e&&e<=u&&d<=t&&t<=f){var p=r.bezierPtsToQuadCoeff(i,o,a),h=r.solveQuadratic(p[0],p[1],p[2],e).filter((function(e){return 0<=e&&e<=1}));if(h.length>0)return h[0]}return null},p=Object.keys(d),h=0;h<p.length;h++){var g=d[p[h]],v=f(e,t,g);if(null!=v){var m=g[5],b=g[3],y=g[1],x=r.qbezierAt(m,b,y,v);if(g.isTop&&x<=t)return!0;if(g.isBottom&&t<=x)return!0}}return!1}}},generateBottomRoundrectangle:function(){return this.nodeShapes.bottomroundrectangle={renderer:this,name:"bottomroundrectangle",points:r.generateUnitNgonPointsFitToSquare(4,0),draw:function(e,t,n,r,i){this.renderer.nodeShapeImpl(this.name,e,t,n,r,i)},intersectLine:function(e,t,n,i,o,a,s){var l=e-(n/2+s),c=t-(i/2+s),u=c,d=e+(n/2+s),f=r.finiteLinesIntersect(o,a,e,t,l,c,d,u,!1);return f.length>0?f:r.roundRectangleIntersectLine(o,a,e,t,n,i,s)},checkPoint:function(e,t,n,i,o,a,s){var l=r.getRoundRectangleRadius(i,o),c=2*l;if(r.pointInsidePolygon(e,t,this.points,a,s,i,o-c,[0,-1],n))return!0;if(r.pointInsidePolygon(e,t,this.points,a,s,i-c,o,[0,-1],n))return!0;var u=i/2+2*n,d=o/2+2*n,f=[a-u,s-d,a-u,s,a+u,s,a+u,s-d];return!!r.pointInsidePolygonPoints(e,t,f)||!!r.checkInEllipse(e,t,c,c,a+i/2-l,s+o/2-l,n)||!!r.checkInEllipse(e,t,c,c,a-i/2+l,s+o/2-l,n)}}},registerNodeShapes:function(){var e=this.nodeShapes={},t=this;this.generateEllipse(),this.generatePolygon("triangle",r.generateUnitNgonPointsFitToSquare(3,0)),this.generatePolygon("rectangle",r.generateUnitNgonPointsFitToSquare(4,0)),e.square=e.rectangle,this.generateRoundRectangle(),this.generateCutRectangle(),this.generateBarrel(),this.generateBottomRoundrectangle(),this.generatePolygon("diamond",[0,1,1,0,0,-1,-1,0]),this.generatePolygon("pentagon",r.generateUnitNgonPointsFitToSquare(5,0)),this.generatePolygon("hexagon",r.generateUnitNgonPointsFitToSquare(6,0)),this.generatePolygon("heptagon",r.generateUnitNgonPointsFitToSquare(7,0)),this.generatePolygon("octagon",r.generateUnitNgonPointsFitToSquare(8,0));var n=new Array(20),i=r.generateUnitNgonPoints(5,0),o=r.generateUnitNgonPoints(5,Math.PI/5),a=.5*(3-Math.sqrt(5));a*=1.57;for(var s=0;s<o.length/2;s++)o[2*s]*=a,o[2*s+1]*=a;for(s=0;s<5;s++)n[4*s]=i[2*s],n[4*s+1]=i[2*s+1],n[4*s+2]=o[2*s],n[4*s+3]=o[2*s+1];n=r.fitPolygonToSquare(n),this.generatePolygon("star",n),this.generatePolygon("vee",[-1,-1,0,-.333,1,-1,0,1]),this.generatePolygon("rhomboid",[-1,-1,.333,-1,1,1,-.333,1]),this.generatePolygon("concavehexagon",[-1,-.95,-.75,0,-1,.95,1,.95,.75,0,1,-.95]),this.generatePolygon("tag",[-1,-1,.25,-1,1,0,.25,1,-1,1]),e.makePolygon=function(e){var n,r="polygon-"+e.join("$");return(n=this[r])?n:t.generatePolygon(r,e)}}};e.exports=i},function(e,t,n){"use strict";var r=n(1),i={timeToRender:function(){return this.redrawTotalTime/this.redrawCount},redraw:function(e){e=e||r.staticEmptyObject();var t=this;void 0===t.averageRedrawTime&&(t.averageRedrawTime=0),void 0===t.lastRedrawTime&&(t.lastRedrawTime=0),void 0===t.lastDrawTime&&(t.lastDrawTime=0),t.requestedFrame=!0,t.renderOptions=e},beforeRender:function(e,t){if(!this.destroyed){t=t||0;var n=this.beforeRenderCallbacks;n.push({fn:e,priority:t}),n.sort((function(e,t){return t.priority-e.priority}))}}},o=function(e,t,n){for(var r=e.beforeRenderCallbacks,i=0;i<r.length;i++)r[i].fn(t,n)};i.startRenderLoop=function(){var e=this;e.renderLoopStarted||(e.renderLoopStarted=!0,r.requestAnimationFrame((function t(n){if(!e.destroyed){if(e.requestedFrame&&!e.skipFrame){o(e,!0,n);var i=r.performanceNow();e.render(e.renderOptions);var a=e.lastDrawTime=r.performanceNow();void 0===e.averageRedrawTime&&(e.averageRedrawTime=a-i),void 0===e.redrawCount&&(e.redrawCount=0),e.redrawCount++,void 0===e.redrawTotalTime&&(e.redrawTotalTime=0);var s=a-i;e.redrawTotalTime+=s,e.lastRedrawTime=s,e.averageRedrawTime=e.averageRedrawTime/2+s/2,e.requestedFrame=!1}else o(e,!1,n);e.skipFrame=!1,r.requestAnimationFrame(t)}})))},e.exports=i},function(e,t,n){"use strict";var r=n(1),i=n(0),o=n(124),a=n(125),s=c,l=c.prototype;function c(e){var t=this;t.data={canvases:new Array(l.CANVAS_LAYERS),contexts:new Array(l.CANVAS_LAYERS),canvasNeedsRedraw:new Array(l.CANVAS_LAYERS),bufferCanvases:new Array(l.BUFFER_COUNT),bufferContexts:new Array(l.CANVAS_LAYERS)};var n="-webkit-tap-highlight-color: rgba(0,0,0,0);";t.data.canvasContainer=document.createElement("div");var r=t.data.canvasContainer.style;t.data.canvasContainer.setAttribute("style",n),r.position="relative",r.zIndex="0",r.overflow="hidden";var s=e.cy.container();s.appendChild(t.data.canvasContainer),(s.getAttribute("style")||"").indexOf(n)<0&&s.setAttribute("style",(s.getAttribute("style")||"")+n);for(var c=0;c<l.CANVAS_LAYERS;c++){var u=t.data.canvases[c]=document.createElement("canvas");t.data.contexts[c]=u.getContext("2d"),u.setAttribute("style","-webkit-user-select: none; -moz-user-select: -moz-none; user-select: none; -webkit-tap-highlight-color: rgba(0,0,0,0); outline-style: none;"+(i.ms()?" -ms-touch-action: none; touch-action: none; ":"")),u.style.position="absolute",u.setAttribute("data-id","layer"+c),u.style.zIndex=String(l.CANVAS_LAYERS-c),t.data.canvasContainer.appendChild(u),t.data.canvasNeedsRedraw[c]=!1}for(t.data.topCanvas=t.data.canvases[0],t.data.canvases[l.NODE].setAttribute("data-id","layer"+l.NODE+"-node"),t.data.canvases[l.SELECT_BOX].setAttribute("data-id","layer"+l.SELECT_BOX+"-selectbox"),t.data.canvases[l.DRAG].setAttribute("data-id","layer"+l.DRAG+"-drag"),c=0;c<l.BUFFER_COUNT;c++)t.data.bufferCanvases[c]=document.createElement("canvas"),t.data.bufferContexts[c]=t.data.bufferCanvases[c].getContext("2d"),t.data.bufferCanvases[c].style.position="absolute",t.data.bufferCanvases[c].setAttribute("data-id","buffer"+c),t.data.bufferCanvases[c].style.zIndex=String(-c-1),t.data.bufferCanvases[c].style.visibility="hidden";t.pathsEnabled=!0,t.data.eleTxrCache=new o(t),t.data.lyrTxrCache=new a(t,t.data.eleTxrCache),t.onUpdateEleCalcs((function(e,n){for(var r=0;r<n.length;r++){var i=n[r],o=i._private.rstyle,a=o.dirtyEvents;if(i.isNode()&&a&&1===a.length&&a.position);else if(t.data.eleTxrCache.invalidateElement(i),i.isParent()&&a.style){var s=o.prevParentOpacity,l=i.pstyle("opacity").pfValue;if(o.prevParentOpacity=l,s!==l)for(var c=i.descendants(),u=0;u<c.length;u++)t.data.eleTxrCache.invalidateElement(c[u])}}n.length>0&&t.data.lyrTxrCache.invalidateElements(n)}))}l.CANVAS_LAYERS=3,l.SELECT_BOX=0,l.DRAG=1,l.NODE=2,l.BUFFER_COUNT=3,l.TEXTURE_BUFFER=0,l.MOTIONBLUR_BUFFER_NODE=1,l.MOTIONBLUR_BUFFER_DRAG=2,l.redrawHint=function(e,t){var n=this;switch(e){case"eles":n.data.canvasNeedsRedraw[l.NODE]=t;break;case"drag":n.data.canvasNeedsRedraw[l.DRAG]=t;break;case"select":n.data.canvasNeedsRedraw[l.SELECT_BOX]=t}};var u="undefined"!=typeof Path2D;l.path2dEnabled=function(e){if(void 0===e)return this.pathsEnabled;this.pathsEnabled=!!e},l.usePaths=function(){return u&&this.pathsEnabled},[n(126),n(127),n(128),n(129),n(130),n(131),n(132),n(133),n(134),n(135)].forEach((function(e){r.extend(l,e)})),e.exports=s},function(e,t,n){"use strict";var r=n(2),i=n(1),o=n(9),a=n(19),s={dequeue:"dequeue",downscale:"downscale",highQuality:"highQuality"},l=function(e){this.renderer=e,this.onDequeues=[],this.setupDequeueing()},c=l.prototype;c.reasons=s,c.getTextureQueue=function(e){return this.eleImgCaches=this.eleImgCaches||{},this.eleImgCaches[e]=this.eleImgCaches[e]||[]},c.getRetiredTextureQueue=function(e){var t=this.eleImgCaches.retired=this.eleImgCaches.retired||{};return t[e]=t[e]||[]},c.getElementQueue=function(){return this.eleCacheQueue=this.eleCacheQueue||new o((function(e,t){return t.reqs-e.reqs}))},c.getElementIdToQueue=function(){return this.eleIdToCacheQueue=this.eleIdToCacheQueue||{}},c.getElement=function(e,t,n,i,o){var a=this,l=this.renderer,c=e._private.rscratch,u=l.cy.zoom();if(0===t.w||0===t.h||!e.visible())return null;if(null==i&&(i=Math.ceil(r.log2(u*n))),i<-4)i=-4;else if(u>=3.99||i>2)return null;var d,f=Math.pow(2,i),p=t.h*f,h=t.w*f,g=c.imgCaches=c.imgCaches||{},v=g[i];if(v)return v;if(d=p<=25?25:p<=50?50:50*Math.ceil(p/50),p>1024||h>1024||e.isEdge()||e.isParent())return null;var m=a.getTextureQueue(d),b=m[m.length-2],y=function(){return a.recycleTexture(d,h)||a.addTexture(d,h)};b||(b=m[m.length-1]),b||(b=y()),b.width-b.usedWidth<h&&(b=y());for(var x,w=l.eleTextBiggerThanMin(e,f),k=function(e){return e&&e.scaledLabelShown===w},A=o&&o===s.dequeue,E=o&&o===s.highQuality,S=o&&o===s.downscale,C=i+1;C<=2;C++)if(T=g[C]){x=T;break}var $=x&&x.level===i+1?x:null,O=function(){b.context.drawImage($.texture.canvas,$.x,0,$.width,$.height,b.usedWidth,0,h,p)};if(b.context.setTransform(1,0,0,1,0,0),b.context.clearRect(b.usedWidth,0,h,d),k($))O();else if(k(x)){if(!E)return a.queueElement(e,x.level-1),x;for(C=x.level;C>i;C--)$=a.getElement(e,t,n,C,s.downscale);O()}else{var _;if(!A&&!E&&!S)for(C=i-1;C>=-4;C--){var T;if(T=g[C]){_=T;break}}if(k(_))return a.queueElement(e,i),_;b.context.translate(b.usedWidth,0),b.context.scale(f,f),l.drawElement(b.context,e,t,w),b.context.scale(1/f,1/f),b.context.translate(-b.usedWidth,0)}return v=g[i]={ele:e,x:b.usedWidth,texture:b,level:i,scale:f,width:h,height:p,scaledLabelShown:w},b.usedWidth+=Math.ceil(h+8),b.eleCaches.push(v),a.checkTextureFullness(b),v},c.invalidateElement=function(e){var t=e._private.rscratch.imgCaches;if(t)for(var n=-4;n<=2;n++){var r=t[n];if(r){var o=r.texture;o.invalidatedWidth+=r.width,t[n]=null,i.removeFromArray(o.eleCaches,r),this.removeFromQueue(e),this.checkTextureUtility(o)}}},c.checkTextureUtility=function(e){e.invalidatedWidth>=.5*e.width&&this.retireTexture(e)},c.checkTextureFullness=function(e){var t=this.getTextureQueue(e.height);e.usedWidth/e.width>.8&&e.fullnessChecks>=10?i.removeFromArray(t,e):e.fullnessChecks++},c.retireTexture=function(e){var t=e.height,n=this.getTextureQueue(t);i.removeFromArray(n,e),e.retired=!0;for(var r=e.eleCaches,o=0;o<r.length;o++){var a=r[o],s=a.ele,l=a.level,c=s._private.rscratch.imgCaches;c&&(c[l]=null)}i.clearArray(r),this.getRetiredTextureQueue(t).push(e)},c.addTexture=function(e,t){var n={};return this.getTextureQueue(e).push(n),n.eleCaches=[],n.height=e,n.width=Math.max(1024,t),n.usedWidth=0,n.invalidatedWidth=0,n.fullnessChecks=0,n.canvas=document.createElement("canvas"),n.canvas.width=n.width,n.canvas.height=n.height,n.context=n.canvas.getContext("2d"),n},c.recycleTexture=function(e,t){for(var n=this.getTextureQueue(e),r=this.getRetiredTextureQueue(e),o=0;o<r.length;o++){var a=r[o];if(a.width>=t)return a.retired=!1,a.usedWidth=0,a.invalidatedWidth=0,a.fullnessChecks=0,i.clearArray(a.eleCaches),a.context.setTransform(1,0,0,1,0,0),a.context.clearRect(0,0,a.width,a.height),i.removeFromArray(r,a),n.push(a),a}},c.queueElement=function(e,t){var n=this.getElementQueue(),r=this.getElementIdToQueue(),i=e.id(),o=r[i];if(o)o.level=Math.max(o.level,t),o.reqs++,n.updateItem(o);else{var a={ele:e,level:t,reqs:1};n.push(a),r[i]=a}},c.dequeue=function(e){for(var t=this.getElementQueue(),n=this.getElementIdToQueue(),r=[],i=0;i<1&&t.size()>0;i++){var o=t.pop(),a=o.ele;if(null==a._private.rscratch.imgCaches[o.level]){n[a.id()]=null,r.push(o);var l=a.boundingBox();this.getElement(a,l,e,o.level,s.dequeue)}}return r},c.removeFromQueue=function(e){var t=this.getElementQueue(),n=this.getElementIdToQueue(),r=n[e.id()];null!=r&&(r.reqs=i.MAX_INT,t.updateItem(r),t.pop(),n[e.id()]=null)},c.onDequeue=function(e){this.onDequeues.push(e)},c.offDequeue=function(e){i.removeFromArray(this.onDequeues,e)},c.setupDequeueing=a.setupDequeueing({deqRedrawThreshold:100,deqCost:.15,deqAvgCost:.1,deqNoDrawCost:.9,deqFastCost:.9,deq:function(e,t,n){return e.dequeue(t,n)},onDeqd:function(e,t){for(var n=0;n<e.onDequeues.length;n++)(0,e.onDequeues[n])(t)},shouldRedraw:function(e,t,n,i){for(var o=0;o<t.length;o++){var a=t[o].ele.boundingBox();if(r.boundingBoxesIntersect(a,i))return!0}return!1},priority:function(e){return e.renderer.beforeRenderPriorities.eleTxrDeq}}),e.exports=l},function(e,t,n){"use strict";var r=n(1),i=n(2),o=n(9),a=n(0),s=n(19),l=function(e,t){var n=this,i=n.renderer=e;n.layersByLevel={},n.firstGet=!0,n.lastInvalidationTime=r.performanceNow()-500,n.skipping=!1,i.beforeRender((function(e,t){t-n.lastInvalidationTime<=250?n.skipping=!0:n.skipping=!1})),n.layersQueue=new o((function(e,t){return t.reqs-e.reqs})),n.eleTxrCache=t,n.setupEleCacheInvalidation(),n.setupDequeueing()},c=l.prototype,u=0,d=Math.pow(2,53)-1;function f(e,t){null!=e.imageSmoothingEnabled?e.imageSmoothingEnabled=t:(e.webkitImageSmoothingEnabled=t,e.mozImageSmoothingEnabled=t,e.msImageSmoothingEnabled=t)}c.makeLayer=function(e,t){var n=Math.pow(2,t),r=Math.ceil(e.w*n),i=Math.ceil(e.h*n),o=document.createElement("canvas");o.width=r,o.height=i;var a={id:u=++u%d,bb:e,level:t,width:r,height:i,canvas:o,context:o.getContext("2d"),eles:[],elesQueue:[],reqs:0},s=a.context,l=-a.bb.x1,c=-a.bb.y1;return s.scale(n,n),s.translate(l,c),a},c.getLayers=function(e,t,n){var o=this,a=o.renderer.cy.zoom(),s=o.firstGet;if(o.firstGet=!1,null==n)if((n=Math.ceil(i.log2(a*t)))<-4)n=-4;else if(a>=3.99||n>2)return null;o.validateLayersElesOrdering(n,e);var l,c,u=o.layersByLevel,d=Math.pow(2,n),f=u[n]=u[n]||[];if(o.levelIsComplete(n,e))return f;!function(){var t=function(t){if(o.validateLayersElesOrdering(t,e),o.levelIsComplete(t,e))return c=u[t],!0},i=function(e){if(!c)for(var r=n+e;-4<=r&&r<=2&&!t(r);r+=e);};i(1),i(-1);for(var a=f.length-1;a>=0;a--){var s=f[a];s.invalid&&r.removeFromArray(f,s)}}();var p=function(t){var r=(t=t||{}).after;if(function(){if(!l){l=i.makeBoundingBox();for(var t=0;t<e.length;t++)i.updateBoundingBox(l,e[t].boundingBox())}}(),l.w*d*(l.h*d)>16e6)return null;var a=o.makeLayer(l,n);if(null!=r){var s=f.indexOf(r)+1;f.splice(s,0,a)}else(void 0===t.insert||t.insert)&&f.unshift(a);return a};if(o.skipping&&!s)return null;for(var h=null,g=e.length/1,v=!s,m=0;m<e.length;m++){var b=e[m],y=b._private.rscratch,x=y.imgLayerCaches=y.imgLayerCaches||{},w=x[n];if(w)h=w;else{if((!h||h.eles.length>=g||!i.boundingBoxInBoundingBox(h.bb,b.boundingBox()))&&!(h=p({insert:!0,after:h})))return null;c||v?o.queueLayer(h,b):o.drawEleInLayer(h,b,n,t),h.eles.push(b),x[n]=h}}return c||(v?null:f)},c.getEleLevelForLayerLevel=function(e,t){return e},c.drawEleInLayer=function(e,t,n,r){var i=this.renderer,o=e.context,a=t.boundingBox();if(0!==a.w&&0!==a.h&&t.visible()){var s=this.eleTxrCache,l=s.reasons.highQuality;n=this.getEleLevelForLayerLevel(n,r);var c=s.getElement(t,a,null,n,l);c?(f(o,!1),o.drawImage(c.texture.canvas,c.x,0,c.width,c.height,a.x1,a.y1,a.w,a.h),f(o,!0)):i.drawElement(o,t)}},c.levelIsComplete=function(e,t){var n=this.layersByLevel[e];if(!n||0===n.length)return!1;for(var r=0,i=0;i<n.length;i++){var o=n[i];if(o.reqs>0)return!1;if(o.invalid)return!1;r+=o.eles.length}return r===t.length},c.validateLayersElesOrdering=function(e,t){var n=this.layersByLevel[e];if(n)for(var r=0;r<n.length;r++){for(var i=n[r],o=-1,a=0;a<t.length;a++)if(i.eles[0]===t[a]){o=a;break}if(o<0)this.invalidateLayer(i);else{var s=o;for(a=0;a<i.eles.length;a++)if(i.eles[a]!==t[s+a]){this.invalidateLayer(i);break}}}},c.updateElementsInLayers=function(e,t){for(var n=a.element(e[0]),r=0;r<e.length;r++)for(var i=n?null:e[r],o=n?e[r]:e[r].ele,s=o._private.rscratch,l=s.imgLayerCaches=s.imgLayerCaches||{},c=-4;c<=2;c++){var u=l[c];u&&(i&&this.getEleLevelForLayerLevel(u.level)!==i.level||t(u,o,i))}},c.haveLayers=function(){for(var e=!1,t=-4;t<=2;t++){var n=this.layersByLevel[t];if(n&&n.length>0){e=!0;break}}return e},c.invalidateElements=function(e){var t=this;t.lastInvalidationTime=r.performanceNow(),0!==e.length&&t.haveLayers()&&t.updateElementsInLayers(e,(function(e,n,r){t.invalidateLayer(e)}))},c.invalidateLayer=function(e){if(this.lastInvalidationTime=r.performanceNow(),!e.invalid){var t=e.level,n=e.eles,i=this.layersByLevel[t];r.removeFromArray(i,e),e.elesQueue=[],e.invalid=!0,e.replacement&&(e.replacement.invalid=!0);for(var o=0;o<n.length;o++){var a=n[o]._private.rscratch.imgLayerCaches;a&&(a[t]=null)}}},c.refineElementTextures=function(e){var t=this;t.updateElementsInLayers(e,(function(e,n,r){var i=e.replacement;if(i||((i=e.replacement=t.makeLayer(e.bb,e.level)).replaces=e,i.eles=e.eles),!i.reqs)for(var o=0;o<i.eles.length;o++)t.queueLayer(i,i.eles[o])}))},c.setupEleCacheInvalidation=function(){var e=this,t=[],n=r.debounce((function(){e.refineElementTextures(t),t=[]}),50);e.eleTxrCache.onDequeue((function(e){for(var r=0;r<e.length;r++)t.push(e[r]);n()}))},c.queueLayer=function(e,t){var n=this.layersQueue,r=e.elesQueue,i=r.hasId=r.hasId||{};if(!e.replacement){if(t){if(i[t.id()])return;r.push(t),i[t.id()]=!0}e.reqs?(e.reqs++,n.updateItem(e)):(e.reqs=1,n.push(e))}},c.dequeue=function(e){for(var t=this.layersQueue,n=[],r=0;r<1&&0!==t.size();){var i=t.peek();if(i.replacement)t.pop();else if(i.replaces&&i!==i.replaces.replacement)t.pop();else if(i.invalid)t.pop();else{var o=i.elesQueue.shift();o&&(this.drawEleInLayer(i,o,i.level,e),r++),0===n.length&&n.push(!0),0===i.elesQueue.length&&(t.pop(),i.reqs=0,i.replaces&&this.applyLayerReplacement(i),this.requestRedraw())}}return n},c.applyLayerReplacement=function(e){var t=this.layersByLevel[e.level],n=e.replaces,r=t.indexOf(n);if(!(r<0||n.invalid)){t[r]=e;for(var i=0;i<e.eles.length;i++){var o=e.eles[i]._private,a=o.imgLayerCaches=o.imgLayerCaches||{};a&&(a[e.level]=e)}this.requestRedraw()}},c.requestRedraw=r.debounce((function(){var e=this.renderer;e.redrawHint("eles",!0),e.redrawHint("drag",!0),e.redraw()}),100),c.setupDequeueing=s.setupDequeueing({deqRedrawThreshold:50,deqCost:.15,deqAvgCost:.1,deqNoDrawCost:.9,deqFastCost:.9,deq:function(e,t){return e.dequeue(t)},onDeqd:r.noop,shouldRedraw:r.trueify,priority:function(e){return e.renderer.beforeRenderPriorities.lyrTxrDeq}}),e.exports=l},function(e,t,n){"use strict";var r,i={arrowShapeImpl:function(e){return(r||(r={polygon:function(e,t){for(var n=0;n<t.length;n++){var r=t[n];e.lineTo(r.x,r.y)}},"triangle-backcurve":function(e,t,n){for(var r,i=0;i<t.length;i++){var o=t[i];0===i&&(r=o),e.lineTo(o.x,o.y)}e.quadraticCurveTo(n.x,n.y,r.x,r.y)},"triangle-tee":function(e,t,n){e.beginPath&&e.beginPath();for(var r=t,i=0;i<r.length;i++){var o=r[i];e.lineTo(o.x,o.y)}e.closePath&&e.closePath(),e.beginPath&&e.beginPath();var a=n,s=n[0];for(e.moveTo(s.x,s.y),i=0;i<a.length;i++)o=a[i],e.lineTo(o.x,o.y);e.closePath&&e.closePath()},"triangle-cross":function(e,t,n){e.beginPath&&e.beginPath();for(var r=t,i=0;i<r.length;i++){var o=r[i];e.lineTo(o.x,o.y)}e.closePath&&e.closePath(),e.beginPath&&e.beginPath();var a=n,s=n[0];for(e.moveTo(s.x,s.y),i=0;i<a.length;i++)o=a[i],e.lineTo(o.x,o.y);e.closePath&&e.closePath()},circle:function(e,t,n,r){e.arc(t,n,r,0,2*Math.PI,!1)}}))[e]}};e.exports=i},function(e,t,n){"use strict";var r=n(2),i={drawElement:function(e,t,n,r){t.isNode()?this.drawNode(e,t,n,r):this.drawEdge(e,t,n,r)},drawCachedElement:function(e,t,n,i){var o=t.boundingBox();if(0!==o.w&&0!==o.h&&(!i||r.boundingBoxesIntersect(o,i))){var a=this.data.eleTxrCache.getElement(t,o,n);null!=a?e.drawImage(a.texture.canvas,a.x,0,a.width,a.height,o.x1,o.y1,o.w,o.h):this.drawElement(e,t)}},drawElements:function(e,t){for(var n=0;n<t.length;n++){var r=t[n];this.drawElement(e,r)}},drawCachedElements:function(e,t,n,r){for(var i=0;i<t.length;i++){var o=t[i];this.drawCachedElement(e,o,n,r)}},drawCachedNodes:function(e,t,n,r){for(var i=0;i<t.length;i++){var o=t[i];o.isNode()&&this.drawCachedElement(e,o,n,r)}},drawLayeredElements:function(e,t,n,r){var i=this.data.lyrTxrCache.getLayers(t,n);if(i)for(var o=0;o<i.length;o++){var a=i[o],s=a.bb;0!==s.w&&0!==s.h&&e.drawImage(a.canvas,s.x1,s.y1,s.w,s.h)}else this.drawCachedElements(e,t,n,r)},drawDebugPoints:function(e,t){for(var n=function(t,n,r){e.fillStyle=r,e.fillRect(t-1,n-1,3,3)},r=0;r<t.length;r++){var i=t[r],o=i._private.rscratch;if(i.isNode()){var a=i.position();n(a.x,a.y,"magenta")}else{for(var s=o.allpts,l=0;l+1<s.length;l+=2)n(s[l],s[l+1],"cyan");n(o.midX,o.midY,"yellow")}}}};e.exports=i},function(e,t,n){"use strict";var r={drawEdge:function(e,t,n,r){var i=this,o=t._private.rscratch,a=i.usePaths();if(t.visible()&&!o.badLine&&null!=o.allpts&&!isNaN(o.allpts[0])){var s=void 0;n&&(s=n,e.translate(-s.x1,-s.y1));var l=2*t.pstyle("overlay-padding").pfValue,c=t.pstyle("overlay-opacity").value,u=t.pstyle("overlay-color").value,d=t.pstyle("line-color").value,f=t.pstyle("opacity").value,p=t.pstyle("line-style").value,h=t.pstyle("width").pfValue,g=function(){var n=arguments.length>0&&void 0!==arguments[0]?arguments[0]:f;e.lineWidth=h,e.lineCap="butt",i.strokeStyle(e,d[0],d[1],d[2],n),i.drawEdgePath(t,e,o.allpts,p)},v=function(){var n=arguments.length>0&&void 0!==arguments[0]?arguments[0]:f;i.drawArrowheads(e,t,n)};if(e.lineJoin="round","yes"===t.pstyle("ghost").value){var m=t.pstyle("ghost-offset-x").pfValue,b=t.pstyle("ghost-offset-y").pfValue,y=t.pstyle("ghost-opacity").value,x=f*y;e.translate(m,b),g(x),v(x),e.translate(-m,-b)}g(),v(),function(){var n=arguments.length>0&&void 0!==arguments[0]?arguments[0]:c;e.lineWidth=l,"self"!==o.edgeType||a?e.lineCap="round":e.lineCap="butt",i.strokeStyle(e,u[0],u[1],u[2],n),i.drawEdgePath(t,e,o.allpts,"solid")}(),i.drawElementText(e,t,r),n&&e.translate(s.x1,s.y1)}},drawEdgePath:function(e,t,n,r){var i=e._private.rscratch,o=t,a=void 0,s=!1,l=this.usePaths();if(l){var c=n.join("$");i.pathCacheKey&&i.pathCacheKey===c?(a=t=i.pathCache,s=!0):(a=t=new Path2D,i.pathCacheKey=c,i.pathCache=a)}if(o.setLineDash)switch(r){case"dotted":o.setLineDash([1,1]);break;case"dashed":o.setLineDash([6,3]);break;case"solid":o.setLineDash([])}if(!s&&!i.badLine)switch(t.beginPath&&t.beginPath(),t.moveTo(n[0],n[1]),i.edgeType){case"bezier":case"self":case"compound":case"multibezier":if(e.hasClass("horizontal")){var u=n[4],d=n[5],f=(n[0]+n[4])/2;t.lineTo(n[0]+10,n[1]),t.bezierCurveTo(f,n[1],f,n[5],n[4]-10,n[5]),t.lineTo(u,d)}else if(e.hasClass("vertical")){var p=n[4],h=n[5],g=(n[1]+n[5])/2;t.bezierCurveTo(n[0],g,n[4],g,n[4],n[5]-10),t.lineTo(p,h)}else for(var v=2;v+3<n.length;v+=4)t.quadraticCurveTo(n[v],n[v+1],n[v+2],n[v+3]);break;case"straight":case"segments":case"haystack":for(var m=2;m+1<n.length;m+=2)t.lineTo(n[m],n[m+1])}t=o,l?t.stroke(a):t.stroke(),t.setLineDash&&t.setLineDash([])},drawArrowheads:function(e,t,n){var r=t._private.rscratch,i="haystack"===r.edgeType;i||this.drawArrowhead(e,t,"source",r.arrowStartX,r.arrowStartY,r.srcArrowAngle,n),this.drawArrowhead(e,t,"mid-target",r.midX,r.midY,r.midtgtArrowAngle,n),this.drawArrowhead(e,t,"mid-source",r.midX,r.midY,r.midsrcArrowAngle,n),i||(t.hasClass("horizontal")?this.drawArrowhead(e,t,"target",r.arrowEndX,r.arrowEndY,-Math.PI/2,n):t.hasClass("vertical")?this.drawArrowhead(e,t,"target",r.arrowEndX,r.arrowEndY,0,n):this.drawArrowhead(e,t,"target",r.arrowEndX,r.arrowEndY,r.tgtArrowAngle,n))},drawArrowhead:function(e,t,n,r,i,o,a){if(!(isNaN(r)||null==r||isNaN(i)||null==i||isNaN(o)||null==o)){var s=t.pstyle(n+"-arrow-shape").value;if("none"!==s){var l="hollow"===t.pstyle(n+"-arrow-fill").value?"both":"filled",c=t.pstyle(n+"-arrow-fill").value,u=t.pstyle("width").pfValue,d=t.pstyle("opacity").value;void 0===a&&(a=d);var f=e.globalCompositeOperation;1===a&&"hollow"!==c||(e.globalCompositeOperation="destination-out",this.fillStyle(e,255,255,255,1),this.strokeStyle(e,255,255,255,1),this.drawArrowShape(t,n,e,l,u,s,r,i,o),e.globalCompositeOperation=f);var p=t.pstyle(n+"-arrow-color").value;this.fillStyle(e,p[0],p[1],p[2],a),this.strokeStyle(e,p[0],p[1],p[2],a),this.drawArrowShape(t,n,e,c,u,s,r,i,o)}}},drawArrowShape:function(e,t,n,r,i,o,a,s,l){var c=this.usePaths(),u=e._private.rscratch,d=!1,f=void 0,p=n,h={x:a,y:s},g=e.pstyle("arrow-scale").value,v=this.getArrowWidth(i,g),m=this.arrowShapes[o];if(c){var b=v+"$"+o+"$"+l+"$"+a+"$"+s;u.arrowPathCacheKey=u.arrowPathCacheKey||{},u.arrowPathCache=u.arrowPathCache||{},u.arrowPathCacheKey[t]===b?(f=n=u.arrowPathCache[t],d=!0):(f=n=new Path2D,u.arrowPathCacheKey[t]=b,u.arrowPathCache[t]=f)}n.beginPath&&n.beginPath(),d||m.draw(n,v,l,h,i),!m.leavePathOpen&&n.closePath&&n.closePath(),n=p,"filled"!==r&&"both"!==r||(c?n.fill(f):n.fill()),"hollow"!==r&&"both"!==r||(n.lineWidth=m.matchEdgeWidth?i:1,n.lineJoin="miter",c?n.stroke(f):n.stroke())}};e.exports=r},function(e,t,n){"use strict";var r={safeDrawImage:function(e,t,n,r,i,o,a,s,l,c){i<=0||o<=0||l<=0||c<=0||e.drawImage(t,n,r,i,o,a,s,l,c)},drawInscribedImage:function(e,t,n,r,i){var o=this,a=n.position(),s=a.x,l=a.y,c=n.cy().style(),u=c.getIndexedStyle.bind(c),d=u(n,"background-fit","value",r),f=u(n,"background-repeat","value",r),p=n.width(),h=n.height(),g=2*n.padding(),v=p+("inner"===u(n,"background-width-relative-to","value",r)?0:g),m=h+("inner"===u(n,"background-height-relative-to","value",r)?0:g),b=n._private.rscratch,y="node"===n.pstyle("background-clip").value,x=u(n,"background-image-opacity","value",r)*i,w=t.width||t.cachedW,k=t.height||t.cachedH;null!=w&&null!=k||(document.body.appendChild(t),w=t.cachedW=t.width||t.offsetWidth,k=t.cachedH=t.height||t.offsetHeight,document.body.removeChild(t));var A=w,E=k;if("auto"!==u(n,"background-width","value",r)&&(A="%"===u(n,"background-width","units",r)?u(n,"background-width","pfValue",r)*v:u(n,"background-width","pfValue",r)),"auto"!==u(n,"background-height","value",r)&&(E="%"===u(n,"background-height","units",r)?u(n,"background-height","pfValue",r)*m:u(n,"background-height","pfValue",r)),0!==A&&0!==E){if("contain"===d)A*=S=Math.min(v/A,m/E),E*=S;else if("cover"===d){var S;A*=S=Math.max(v/A,m/E),E*=S}var C=s-v/2;"%"===u(n,"background-position-x","units",r)?C+=(v-A)*u(n,"background-position-x","pfValue",r):C+=u(n,"background-position-x","pfValue",r);var $=l-m/2;"%"===u(n,"background-position-y","units",r)?$+=(m-E)*u(n,"background-position-y","pfValue",r):$+=u(n,"background-position-y","pfValue",r),b.pathCache&&(C-=s,$-=l,s=0,l=0);var O=e.globalAlpha;if(e.globalAlpha=x,"no-repeat"===f)y&&(e.save(),b.pathCache?e.clip(b.pathCache):(o.nodeShapes[o.getNodeShape(n)].draw(e,s,l,v,m),e.clip())),o.safeDrawImage(e,t,0,0,w,k,C,$,A,E),y&&e.restore();else{var _=e.createPattern(t,f);e.fillStyle=_,o.nodeShapes[o.getNodeShape(n)].draw(e,s,l,v,m),e.translate(C,$),e.fill(),e.translate(-C,-$)}e.globalAlpha=O}}};e.exports=r},function(e,t,n){"use strict";var r=n(1),i=n(2),o={eleTextBiggerThanMin:function(e,t){if(!t){var n=e.cy().zoom(),r=this.getPixelRatio(),o=Math.ceil(i.log2(n*r));t=Math.pow(2,o)}return!(e.pstyle("font-size").pfValue*t<e.pstyle("min-zoomed-font-size").pfValue)},drawElementText:function(e,t,n){var r=this;if(void 0===n){if(!r.eleTextBiggerThanMin(t))return}else if(!n)return;if(t.isNode()){if(!(o=t.pstyle("label"))||!o.value)return;var i=t.pstyle("text-halign").strValue;switch(t.pstyle("text-valign").strValue,i){case"left":e.textAlign="right";break;case"right":e.textAlign="left";break;default:e.textAlign="center"}e.textBaseline="bottom"}else{var o=t.pstyle("label"),a=t.pstyle("source-label"),s=t.pstyle("target-label");if(!(o&&o.value||a&&a.value||s&&s.value))return;e.textAlign="center",e.textBaseline="bottom"}r.drawText(e,t),t.isEdge()&&(r.drawText(e,t,"source"),r.drawText(e,t,"target"))}};o.drawNodeText=o.drawEdgeText=o.drawElementText,o.getFontCache=function(e){var t;this.fontCaches=this.fontCaches||[];for(var n=0;n<this.fontCaches.length;n++)if((t=this.fontCaches[n]).context===e)return t;return t={context:e},this.fontCaches.push(t),t},o.setupTextStyle=function(e,t){var n=t.effectiveOpacity(),r=t.pstyle("font-style").strValue,i=t.pstyle("font-size").pfValue+"px",o=t.pstyle("font-family").strValue,a=t.pstyle("font-weight").strValue,s=t.pstyle("text-opacity").value*t.pstyle("opacity").value*n,l=t.pstyle("text-outline-opacity").value*s,c=t.pstyle("color").value,u=t.pstyle("text-outline-color").value,d=t._private.fontKey,f=this.getFontCache(e);f.key!==d&&(e.font=r+" "+a+" "+i+" "+o,f.key=d),e.lineJoin="round",this.fillStyle(e,c[0],c[1],c[2],s),this.strokeStyle(e,u[0],u[1],u[2],l)},o.drawText=function(e,t,n){var i=t._private.rscratch,o=t.effectiveOpacity();if(0!==o&&0!==t.pstyle("text-opacity").value){var a,s,l,c,u,d,f=r.getPrefixedProperty(i,"labelX",n),p=r.getPrefixedProperty(i,"labelY",n),h=this.getLabelText(t,n);if(null!=h&&""!==h&&!isNaN(f)&&!isNaN(p)){this.setupTextStyle(e,t);var g=n?n+"-":"",v=r.getPrefixedProperty(i,"labelWidth",n),m=r.getPrefixedProperty(i,"labelHeight",n),b=r.getPrefixedProperty(i,"labelAngle",n),y=t.pstyle(g+"text-margin-x").pfValue,x=t.pstyle(g+"text-margin-y").pfValue,w=t.isEdge(),k=(t.isNode(),t.pstyle("text-halign").value),A=t.pstyle("text-valign").value;w&&(k="center",A="center"),f+=y,p+=x;var E,S=t.pstyle("text-rotation");if(0!==(E="autorotate"===S.strValue?w?b:0:"none"===S.strValue?0:S.pfValue)){var C=f,$=p;e.translate(C,$),e.rotate(E),f=0,p=0}switch(A){case"top":break;case"center":p+=m/2;break;case"bottom":p+=m}var O=t.pstyle("text-background-opacity").value,_=t.pstyle("text-border-opacity").value,T=t.pstyle("text-border-width").pfValue,j=t.pstyle("text-background-padding").pfValue;if(O>0||T>0&&_>0){var P=f-j;switch(k){case"left":P-=v;break;case"center":P-=v/2}var D=p-m-j,R=v+2*j,I=m+2*j;if(O>0){var N=e.fillStyle,M=t.pstyle("text-background-color").value;e.fillStyle="rgba("+M[0]+","+M[1]+","+M[2]+","+O*o+")","roundrectangle"==t.pstyle("text-background-shape").strValue?(s=P,l=D,c=R,u=I,d=(d=2)||5,(a=e).beginPath(),a.moveTo(s+d,l),a.lineTo(s+c-d,l),a.quadraticCurveTo(s+c,l,s+c,l+d),a.lineTo(s+c,l+u-d),a.quadraticCurveTo(s+c,l+u,s+c-d,l+u),a.lineTo(s+d,l+u),a.quadraticCurveTo(s,l+u,s,l+u-d),a.lineTo(s,l+d),a.quadraticCurveTo(s,l,s+d,l),a.closePath(),a.fill()):e.fillRect(P,D,R,I),e.fillStyle=N}if(T>0&&_>0){var z=e.strokeStyle,L=e.lineWidth,B=t.pstyle("text-border-color").value,F=t.pstyle("text-border-style").value;if(e.strokeStyle="rgba("+B[0]+","+B[1]+","+B[2]+","+_*o+")",e.lineWidth=T,e.setLineDash)switch(F){case"dotted":e.setLineDash([1,1]);break;case"dashed":e.setLineDash([4,2]);break;case"double":e.lineWidth=T/4,e.setLineDash([]);break;case"solid":e.setLineDash([])}if(e.strokeRect(P,D,R,I),"double"===F){var q=T/2;e.strokeRect(P+q,D+q,R-2*q,I-2*q)}e.setLineDash&&e.setLineDash([]),e.lineWidth=L,e.strokeStyle=z}}var V=2*t.pstyle("text-outline-width").pfValue;if(V>0&&(e.lineWidth=V),"wrap"===t.pstyle("text-wrap").value){var U=r.getPrefixedProperty(i,"labelWrapCachedLines",n),H=m/U.length;switch(A){case"top":p-=(U.length-1)*H;break;case"center":case"bottom":p-=(U.length-1)*H}for(var G=0;G<U.length;G++)V>0&&e.strokeText(U[G],f,p),e.fillText(U[G],f,p),p+=H}else V>0&&e.strokeText(h,f,p),e.fillText(h,f,p);0!==E&&(e.rotate(-E),e.translate(-C,-$))}}},e.exports=o},function(e,t,n){"use strict";var r=n(0),i={drawNode:function(e,t,n,i){var o,a,s=this,l=t._private,c=l.rscratch,u=t.position();if(r.number(u.x)&&r.number(u.y)&&t.visible()){var d=t.effectiveOpacity(),f=s.usePaths(),p=void 0,h=!1,g=t.padding();o=t.width()+2*g,a=t.height()+2*g;var v=void 0;n&&(v=n,e.translate(-v.x1,-v.y1));for(var m=t.pstyle("background-image").value,b=new Array(m.length),y=new Array(m.length),x=0,w=0;w<m.length;w++){var k=m[w];if(b[w]=null!=k&&"none"!==k){var A=t.cy().style().getIndexedStyle(t,"background-image-crossorigin","value",w);x++,y[w]=s.getCachedImage(k,A,(function(){t.emitAndNotify("background")}))}}var E=t.pstyle("background-blacken").value,S=t.pstyle("border-width").pfValue,C=t.pstyle("background-color").value,$=t.pstyle("background-opacity").value*d,O=t.pstyle("border-color").value,_=t.pstyle("border-style").value,T=t.pstyle("border-opacity").value*d;e.lineJoin="miter";var j=function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:$;s.fillStyle(e,C[0],C[1],C[2],t)},P=function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:T;s.strokeStyle(e,O[0],O[1],O[2],t)},D=t.pstyle("shape").strValue,R=t.pstyle("shape-polygon-points").pfValue;if(f){var I=D+"$"+o+"$"+a+("polygon"===D?"$"+R.join("$"):"");e.translate(u.x,u.y),c.pathCacheKey===I?(p=c.pathCache,h=!0):(p=new Path2D,c.pathCacheKey=I,c.pathCache=p)}var N,M,z,L=function(){if(!h){var n=u;f&&(n={x:0,y:0}),s.nodeShapes[s.getNodeShape(t)].draw(p||e,n.x,n.y,o,a)}f?e.fill(p):e.fill()},B=function(){for(var n=arguments.length>0&&void 0!==arguments[0]?arguments[0]:d,r=l.backgrounding,i=0,o=0;o<y.length;o++)b[o]&&y[o].complete&&!y[o].error&&(i++,s.drawInscribedImage(e,y[o],t,o,n));l.backgrounding=!(i===x),r!==l.backgrounding&&t.updateStyle(!1)},F=function(){var n=arguments.length>0&&void 0!==arguments[0]&&arguments[0],r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:d;s.hasPie(t)&&(s.drawPie(e,t,r),n&&(f||s.nodeShapes[s.getNodeShape(t)].draw(e,u.x,u.y,o,a)))},q=function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:d,n=(E>0?E:-E)*t,r=E>0?0:255;0!==E&&(s.fillStyle(e,r,r,r,n),f?e.fill(p):e.fill())},V=function(){if(S>0){if(e.lineWidth=S,e.lineCap="butt",e.setLineDash)switch(_){case"dotted":e.setLineDash([1,1]);break;case"dashed":e.setLineDash([4,2]);break;case"solid":case"double":e.setLineDash([])}if(f?e.stroke(p):e.stroke(),"double"===_){e.lineWidth=S/3;var t=e.globalCompositeOperation;e.globalCompositeOperation="destination-out",f?e.stroke(p):e.stroke(),e.globalCompositeOperation=t}e.setLineDash&&e.setLineDash([])}};if("yes"===t.pstyle("ghost").value){var U=t.pstyle("ghost-offset-x").pfValue,H=t.pstyle("ghost-offset-y").pfValue,G=t.pstyle("ghost-opacity").value,W=G*d;e.translate(U,H),j(G*$),L(),B(W),F(0!==E||0!==S),q(W),P(G*T),V(),e.translate(-U,-H)}j(),L(),B(),F(0!==E||0!==S),q(),P(),V(),f&&e.translate(-u.x,-u.y),s.drawElementText(e,t,i),N=t.pstyle("overlay-padding").pfValue,M=t.pstyle("overlay-opacity").value,z=t.pstyle("overlay-color").value,M>0&&(s.fillStyle(e,z[0],z[1],z[2],M),s.nodeShapes.roundrectangle.draw(e,u.x,u.y,o+2*N,a+2*N),e.fill()),n&&e.translate(v.x1,v.y1)}},hasPie:function(e){return(e=e[0])._private.hasPie},drawPie:function(e,t,n,r){t=t[0],r=r||t.position();var i=t.cy().style(),o=t.pstyle("pie-size"),a=r.x,s=r.y,l=t.width(),c=t.height(),u=Math.min(l,c)/2,d=0;this.usePaths()&&(a=0,s=0),"%"===o.units?u*=o.pfValue:void 0!==o.pfValue&&(u=o.pfValue/2);for(var f=1;f<=i.pieBackgroundN;f++){var p=t.pstyle("pie-"+f+"-background-size").value,h=t.pstyle("pie-"+f+"-background-color").value,g=t.pstyle("pie-"+f+"-background-opacity").value*n,v=p/100;v+d>1&&(v=1-d);var m=1.5*Math.PI+2*Math.PI*d,b=m+2*Math.PI*v;0===p||d>=1||d+v>1||(e.beginPath(),e.moveTo(a,s),e.arc(a,s,u,m,b),e.closePath(),this.fillStyle(e,h[0],h[1],h[2],g),e.fill(),d+=v)}}};e.exports=i},function(e,t,n){"use strict";var r={},i=n(1);r.getPixelRatio=function(){var e=this.data.contexts[0];if(null!=this.forcedPixelRatio)return this.forcedPixelRatio;var t=e.backingStorePixelRatio||e.webkitBackingStorePixelRatio||e.mozBackingStorePixelRatio||e.msBackingStorePixelRatio||e.oBackingStorePixelRatio||e.backingStorePixelRatio||1;return(window.devicePixelRatio||1)/t},r.paintCache=function(e){for(var t,n=this.paintCaches=this.paintCaches||[],r=!0,i=0;i<n.length;i++)if((t=n[i]).context===e){r=!1;break}return r&&(t={context:e},n.push(t)),t},r.fillStyle=function(e,t,n,r,i){e.fillStyle="rgba("+t+","+n+","+r+","+i+")"},r.strokeStyle=function(e,t,n,r,i){e.strokeStyle="rgba("+t+","+n+","+r+","+i+")"},r.matchCanvasSize=function(e){var t=this,n=t.data,r=t.findContainerClientCoords(),i=r[2],o=r[3],a=t.getPixelRatio(),s=t.motionBlurPxRatio;e!==t.data.bufferCanvases[t.MOTIONBLUR_BUFFER_NODE]&&e!==t.data.bufferCanvases[t.MOTIONBLUR_BUFFER_DRAG]||(a=s);var l,c=i*a,u=o*a;if(c!==t.canvasWidth||u!==t.canvasHeight){t.fontCaches=null;var d=n.canvasContainer;d.style.width=i+"px",d.style.height=o+"px";for(var f=0;f<t.CANVAS_LAYERS;f++)(l=n.canvases[f]).width=c,l.height=u,l.style.width=i+"px",l.style.height=o+"px";for(f=0;f<t.BUFFER_COUNT;f++)(l=n.bufferCanvases[f]).width=c,l.height=u,l.style.width=i+"px",l.style.height=o+"px";t.textureMult=1,a<=1&&(l=n.bufferCanvases[t.TEXTURE_BUFFER],t.textureMult=2,l.width=c*t.textureMult,l.height=u*t.textureMult),t.canvasWidth=c,t.canvasHeight=u}},r.renderTo=function(e,t,n,r){this.render({forcedContext:e,forcedZoom:t,forcedPan:n,drawAllLayers:!0,forcedPxRatio:r})},r.render=function(e){var t=(e=e||i.staticEmptyObject()).forcedContext,n=e.drawAllLayers,r=e.drawOnlyNodeLayer,o=e.forcedZoom,a=e.forcedPan,s=this,l=void 0===e.forcedPxRatio?this.getPixelRatio():e.forcedPxRatio,c=s.cy,u=s.data,d=u.canvasNeedsRedraw,f=s.textureOnViewport&&!t&&(s.pinching||s.hoverData.dragging||s.swipePanning||s.data.wheelZooming),p=void 0!==e.motionBlur?e.motionBlur:s.motionBlur,h=s.motionBlurPxRatio,g=c.hasCompoundNodes(),v=s.hoverData.draggingEles,m=!(!s.hoverData.selecting&&!s.touchData.selecting),b=p=p&&!t&&s.motionBlurEnabled&&!m;t||(s.prevPxRatio!==l&&(s.invalidateContainerClientCoordsCache(),s.matchCanvasSize(s.container),s.redrawHint("eles",!0),s.redrawHint("drag",!0)),s.prevPxRatio=l),!t&&s.motionBlurTimeout&&clearTimeout(s.motionBlurTimeout),p&&(null==s.mbFrames&&(s.mbFrames=0),s.mbFrames++,s.mbFrames<3&&(b=!1),s.mbFrames>s.minMbLowQualFrames&&(s.motionBlurPxRatio=s.mbPxRBlurry)),s.clearingMotionBlur&&(s.motionBlurPxRatio=1),s.textureDrawLastFrame&&!f&&(d[s.NODE]=!0,d[s.SELECT_BOX]=!0);var y=c.style()._private.coreStyle,x=c.zoom(),w=void 0!==o?o:x,k=c.pan(),A={x:k.x,y:k.y},E={zoom:x,pan:{x:k.x,y:k.y}},S=s.prevViewport;void 0===S||E.zoom!==S.zoom||E.pan.x!==S.pan.x||E.pan.y!==S.pan.y||v&&!g||(s.motionBlurPxRatio=1),a&&(A=a),w*=l,A.x*=l,A.y*=l;var C=s.getCachedZSortedEles();function $(e,t,n,r,i){var o=e.globalCompositeOperation;e.globalCompositeOperation="destination-out",s.fillStyle(e,255,255,255,s.motionBlurTransparency),e.fillRect(t,n,r,i),e.globalCompositeOperation=o}function O(e,r){var i,l,c,d;s.clearingMotionBlur||e!==u.bufferContexts[s.MOTIONBLUR_BUFFER_NODE]&&e!==u.bufferContexts[s.MOTIONBLUR_BUFFER_DRAG]?(i=A,l=w,c=s.canvasWidth,d=s.canvasHeight):(i={x:k.x*h,y:k.y*h},l=x*h,c=s.canvasWidth*h,d=s.canvasHeight*h),e.setTransform(1,0,0,1,0,0),"motionBlur"===r?$(e,0,0,c,d):t||void 0!==r&&!r||e.clearRect(0,0,c,d),n||(e.translate(i.x,i.y),e.scale(l,l)),a&&e.translate(a.x,a.y),o&&e.scale(o,o)}if(f||(s.textureDrawLastFrame=!1),f){if(s.textureDrawLastFrame=!0,!s.textureCache){s.textureCache={},s.textureCache.bb=c.mutableElements().boundingBox(),s.textureCache.texture=s.data.bufferCanvases[s.TEXTURE_BUFFER];var _=s.data.bufferContexts[s.TEXTURE_BUFFER];_.setTransform(1,0,0,1,0,0),_.clearRect(0,0,s.canvasWidth*s.textureMult,s.canvasHeight*s.textureMult),s.render({forcedContext:_,drawOnlyNodeLayer:!0,forcedPxRatio:l*s.textureMult}),(E=s.textureCache.viewport={zoom:c.zoom(),pan:c.pan(),width:s.canvasWidth,height:s.canvasHeight}).mpan={x:(0-E.pan.x)/E.zoom,y:(0-E.pan.y)/E.zoom}}d[s.DRAG]=!1,d[s.NODE]=!1;var T=u.contexts[s.NODE],j=s.textureCache.texture;E=s.textureCache.viewport,s.textureCache.bb,T.setTransform(1,0,0,1,0,0),p?$(T,0,0,E.width,E.height):T.clearRect(0,0,E.width,E.height);var P=y["outside-texture-bg-color"].value,D=y["outside-texture-bg-opacity"].value;s.fillStyle(T,P[0],P[1],P[2],D),T.fillRect(0,0,E.width,E.height),x=c.zoom(),O(T,!1),T.clearRect(E.mpan.x,E.mpan.y,E.width/E.zoom/l,E.height/E.zoom/l),T.drawImage(j,E.mpan.x,E.mpan.y,E.width/E.zoom/l,E.height/E.zoom/l)}else s.textureOnViewport&&!t&&(s.textureCache=null);var R=c.extent(),I=s.pinching||s.hoverData.dragging||s.swipePanning||s.data.wheelZooming||s.hoverData.draggingEles,N=s.hideEdgesOnViewport&&I,M=[];if(M[s.NODE]=!d[s.NODE]&&p&&!s.clearedForMotionBlur[s.NODE]||s.clearingMotionBlur,M[s.NODE]&&(s.clearedForMotionBlur[s.NODE]=!0),M[s.DRAG]=!d[s.DRAG]&&p&&!s.clearedForMotionBlur[s.DRAG]||s.clearingMotionBlur,M[s.DRAG]&&(s.clearedForMotionBlur[s.DRAG]=!0),d[s.NODE]||n||r||M[s.NODE]){var z=p&&!M[s.NODE]&&1!==h;O(T=t||(z?s.data.bufferContexts[s.MOTIONBLUR_BUFFER_NODE]:u.contexts[s.NODE]),p&&!z?"motionBlur":void 0),N?s.drawCachedNodes(T,C.nondrag,l,R):s.drawLayeredElements(T,C.nondrag,l,R),s.debug&&s.drawDebugPoints(T,C.nondrag),n||p||(d[s.NODE]=!1)}if(!r&&(d[s.DRAG]||n||M[s.DRAG])&&(z=p&&!M[s.DRAG]&&1!==h,O(T=t||(z?s.data.bufferContexts[s.MOTIONBLUR_BUFFER_DRAG]:u.contexts[s.DRAG]),p&&!z?"motionBlur":void 0),N?s.drawCachedNodes(T,C.drag,l,R):s.drawCachedElements(T,C.drag,l,R),s.debug&&s.drawDebugPoints(T,C.drag),n||p||(d[s.DRAG]=!1)),s.showFps||!r&&d[s.SELECT_BOX]&&!n){if(O(T=t||u.contexts[s.SELECT_BOX]),1==s.selection[4]&&(s.hoverData.selecting||s.touchData.selecting)){x=s.cy.zoom();var L=y["selection-box-border-width"].value/x;T.lineWidth=L,T.fillStyle="rgba("+y["selection-box-color"].value[0]+","+y["selection-box-color"].value[1]+","+y["selection-box-color"].value[2]+","+y["selection-box-opacity"].value+")",T.fillRect(s.selection[0],s.selection[1],s.selection[2]-s.selection[0],s.selection[3]-s.selection[1]),L>0&&(T.strokeStyle="rgba("+y["selection-box-border-color"].value[0]+","+y["selection-box-border-color"].value[1]+","+y["selection-box-border-color"].value[2]+","+y["selection-box-opacity"].value+")",T.strokeRect(s.selection[0],s.selection[1],s.selection[2]-s.selection[0],s.selection[3]-s.selection[1]))}if(u.bgActivePosistion&&!s.hoverData.selecting){x=s.cy.zoom();var B=u.bgActivePosistion;T.fillStyle="rgba("+y["active-bg-color"].value[0]+","+y["active-bg-color"].value[1]+","+y["active-bg-color"].value[2]+","+y["active-bg-opacity"].value+")",T.beginPath(),T.arc(B.x,B.y,y["active-bg-size"].pfValue/x,0,2*Math.PI),T.fill()}var F=s.lastRedrawTime;if(s.showFps&&F){F=Math.round(F);var q=Math.round(1e3/F);T.setTransform(1,0,0,1,0,0),T.fillStyle="rgba(255, 0, 0, 0.75)",T.strokeStyle="rgba(255, 0, 0, 0.75)",T.lineWidth=1,T.fillText("1 frame = "+F+" ms = "+q+" fps",0,20),T.strokeRect(0,30,250,20),T.fillRect(0,30,250*Math.min(q/60,1),20)}n||(d[s.SELECT_BOX]=!1)}if(p&&1!==h){var V=u.contexts[s.NODE],U=s.data.bufferCanvases[s.MOTIONBLUR_BUFFER_NODE],H=u.contexts[s.DRAG],G=s.data.bufferCanvases[s.MOTIONBLUR_BUFFER_DRAG],W=function(e,t,n){e.setTransform(1,0,0,1,0,0),n||!b?e.clearRect(0,0,s.canvasWidth,s.canvasHeight):$(e,0,0,s.canvasWidth,s.canvasHeight);var r=h;e.drawImage(t,0,0,s.canvasWidth*r,s.canvasHeight*r,0,0,s.canvasWidth,s.canvasHeight)};(d[s.NODE]||M[s.NODE])&&(W(V,U,M[s.NODE]),d[s.NODE]=!1),(d[s.DRAG]||M[s.DRAG])&&(W(H,G,M[s.DRAG]),d[s.DRAG]=!1)}s.prevViewport=E,s.clearingMotionBlur&&(s.clearingMotionBlur=!1,s.motionBlurCleared=!0,s.motionBlur=!0),p&&(s.motionBlurTimeout=setTimeout((function(){s.motionBlurTimeout=null,s.clearedForMotionBlur[s.NODE]=!1,s.clearedForMotionBlur[s.DRAG]=!1,s.motionBlur=!1,s.clearingMotionBlur=!f,s.mbFrames=0,d[s.NODE]=!0,d[s.DRAG]=!0,s.redraw()}),100)),t||c.emit("render")},e.exports=r},function(e,t,n){"use strict";for(var r=n(2),i={drawPolygonPath:function(e,t,n,r,i,o){var a=r/2,s=i/2;e.beginPath&&e.beginPath(),e.moveTo(t+a*o[0],n+s*o[1]);for(var l=1;l<o.length/2;l++)e.lineTo(t+a*o[2*l],n+s*o[2*l+1]);e.closePath()},drawRoundRectanglePath:function(e,t,n,i,o){var a=i/2,s=o/2,l=r.getRoundRectangleRadius(i,o);e.beginPath&&e.beginPath(),e.moveTo(t,n-s),e.arcTo(t+a,n-s,t+a,n,l),e.arcTo(t+a,n+s,t,n+s,l),e.arcTo(t-a,n+s,t-a,n,l),e.arcTo(t-a,n-s,t,n-s,l),e.lineTo(t,n-s),e.closePath()},drawBottomRoundRectanglePath:function(e,t,n,i,o){var a=i/2,s=o/2,l=r.getRoundRectangleRadius(i,o);e.beginPath&&e.beginPath(),e.moveTo(t,n-s),e.lineTo(t+a,n-s),e.lineTo(t+a,n),e.arcTo(t+a,n+s,t,n+s,l),e.arcTo(t-a,n+s,t-a,n,l),e.lineTo(t-a,n-s),e.lineTo(t,n-s),e.closePath()},drawCutRectanglePath:function(e,t,n,i,o){var a=i/2,s=o/2,l=r.getCutRectangleCornerLength();e.beginPath&&e.beginPath(),e.moveTo(t-a+l,n-s),e.lineTo(t+a-l,n-s),e.lineTo(t+a,n-s+l),e.lineTo(t+a,n+s-l),e.lineTo(t+a-l,n+s),e.lineTo(t-a+l,n+s),e.lineTo(t-a,n+s-l),e.lineTo(t-a,n-s+l),e.closePath()},drawBarrelPath:function(e,t,n,i,o){var a=i/2,s=o/2,l=t-a,c=t+a,u=n-s,d=n+s,f=r.getBarrelCurveConstants(i,o),p=f.widthOffset,h=f.heightOffset,g=f.ctrlPtOffsetPct*p;e.beginPath&&e.beginPath(),e.moveTo(l,u+h),e.lineTo(l,d-h),e.quadraticCurveTo(l+g,d,l+p,d),e.lineTo(c-p,d),e.quadraticCurveTo(c-g,d,c,d-h),e.lineTo(c,u+h),e.quadraticCurveTo(c-g,u,c-p,u),e.lineTo(l+p,u),e.quadraticCurveTo(l+g,u,l,u+h),e.closePath()}},o=Math.sin(0),a=Math.cos(0),s={},l={},c=Math.PI/40,u=0*Math.PI;u<2*Math.PI;u+=c)s[u]=Math.sin(u),l[u]=Math.cos(u);i.drawEllipsePath=function(e,t,n,r,i){if(e.beginPath&&e.beginPath(),e.ellipse)e.ellipse(t,n,r/2,i/2,0,0,2*Math.PI);else for(var u,d,f=r/2,p=i/2,h=0*Math.PI;h<2*Math.PI;h+=c)u=t-f*s[h]*o+f*l[h]*a,d=n+p*l[h]*o+p*s[h]*a,0===h?e.moveTo(u,d):e.lineTo(u,d);e.closePath()},e.exports=i},function(e,t,n){"use strict";var r=n(0),i={};function o(e){var t=e.indexOf(",");return e.substr(t+1)}function a(e,t,n){var r=t.toDataURL(n,e.quality);switch(e.output){case"blob":return function(e,t){for(var n=atob(e),r=new ArrayBuffer(n.length),i=new Uint8Array(r),o=0;o<n.length;o++)i[o]=n.charCodeAt(o);return new Blob([r],{type:t})}(o(r),n);case"base64":return o(r);case"base64uri":default:return r}}i.createBuffer=function(e,t){var n=document.createElement("canvas");return n.width=e,n.height=t,[n,n.getContext("2d")]},i.bufferCanvasImage=function(e){var t=this.cy,n=t.mutableElements().boundingBox(),i=this.findContainerClientCoords(),o=e.full?Math.ceil(n.w):i[2],a=e.full?Math.ceil(n.h):i[3],s=r.number(e.maxWidth)||r.number(e.maxHeight),l=this.getPixelRatio(),c=1;if(void 0!==e.scale)o*=e.scale,a*=e.scale,c=e.scale;else if(s){var u=1/0,d=1/0;r.number(e.maxWidth)&&(u=c*e.maxWidth/o),r.number(e.maxHeight)&&(d=c*e.maxHeight/a),o*=c=Math.min(u,d),a*=c}s||(o*=l,a*=l,c*=l);var f=document.createElement("canvas");f.width=o,f.height=a,f.style.width=o+"px",f.style.height=a+"px";var p=f.getContext("2d");if(o>0&&a>0){p.clearRect(0,0,o,a),p.globalCompositeOperation="source-over";var h=this.getCachedZSortedEles();if(e.full)p.translate(-n.x1*c,-n.y1*c),p.scale(c,c),this.drawElements(p,h),p.scale(1/c,1/c),p.translate(n.x1*c,n.y1*c);else{var g=t.pan(),v={x:g.x*c,y:g.y*c};c*=t.zoom(),p.translate(v.x,v.y),p.scale(c,c),this.drawElements(p,h),p.scale(1/c,1/c),p.translate(-v.x,-v.y)}e.bg&&(p.globalCompositeOperation="destination-over",p.fillStyle=e.bg,p.rect(0,0,o,a),p.fill())}return f},i.png=function(e){return a(e,this.bufferCanvasImage(e),"image/png")},i.jpg=function(e){return a(e,this.bufferCanvasImage(e),"image/jpeg")},e.exports=i},function(e,t,n){"use strict";var r={nodeShapeImpl:function(e,t,n,r,i,o,a){switch(e){case"ellipse":return this.drawEllipsePath(t,n,r,i,o);case"polygon":return this.drawPolygonPath(t,n,r,i,o,a);case"roundrectangle":return this.drawRoundRectanglePath(t,n,r,i,o);case"cutrectangle":return this.drawCutRectanglePath(t,n,r,i,o);case"bottomroundrectangle":return this.drawBottomRoundRectanglePath(t,n,r,i,o);case"barrel":return this.drawBarrelPath(t,n,r,i,o)}}};e.exports=r},function(e,t,n){"use strict";var r=n(0),i=n(1),o=n(18),a=function e(){if(!(this instanceof e))return new e;this.length=0},s=a.prototype;s.instanceString=function(){return"stylesheet"},s.selector=function(e){return this[this.length++]={selector:e,properties:[]},this},s.css=function(e,t){var n=this.length-1;if(r.string(e))this[n].properties.push({name:e,value:t});else if(r.plainObject(e))for(var a=e,s=0;s<o.properties.length;s++){var l=o.properties[s],c=a[l.name];if(void 0===c&&(c=a[i.dash2camel(l.name)]),void 0!==c){var u=l.name,d=c;this[n].properties.push({name:u,value:d})}}return this},s.style=s.css,s.generateStyle=function(e){var t=new o(e);return this.appendToStyle(t)},s.appendToStyle=function(e){for(var t=0;t<this.length;t++){var n=this[t],r=n.selector,i=n.properties;e.selector(r);for(var o=0;o<i.length;o++){var a=i[o];e.css(a.name,a.value)}}return e},e.exports=a},function(e,t,n){"use strict";e.exports="snapshot-2fd4aa6cc2-1531011493999"}])},e.exports=r(n(241),n(242))}).call(this,n(238).setImmediate)},function(e,t,n){(function(e){var r=void 0!==e&&e||"undefined"!=typeof self&&self||window,i=Function.prototype.apply;function o(e,t){this._id=e,this._clearFn=t}t.setTimeout=function(){return new o(i.call(setTimeout,r,arguments),clearTimeout)},t.setInterval=function(){return new o(i.call(setInterval,r,arguments),clearInterval)},t.clearTimeout=t.clearInterval=function(e){e&&e.close()},o.prototype.unref=o.prototype.ref=function(){},o.prototype.close=function(){this._clearFn.call(r,this._id)},t.enroll=function(e,t){clearTimeout(e._idleTimeoutId),e._idleTimeout=t},t.unenroll=function(e){clearTimeout(e._idleTimeoutId),e._idleTimeout=-1},t._unrefActive=t.active=function(e){clearTimeout(e._idleTimeoutId);var t=e._idleTimeout;t>=0&&(e._idleTimeoutId=setTimeout((function(){e._onTimeout&&e._onTimeout()}),t))},n(239),t.setImmediate="undefined"!=typeof self&&self.setImmediate||void 0!==e&&e.setImmediate||this&&this.setImmediate,t.clearImmediate="undefined"!=typeof self&&self.clearImmediate||void 0!==e&&e.clearImmediate||this&&this.clearImmediate}).call(this,n(33))},function(e,t,n){(function(e,t){!function(e,n){"use strict";if(!e.setImmediate){var r,i,o,a,s,l=1,c={},u=!1,d=e.document,f=Object.getPrototypeOf&&Object.getPrototypeOf(e);f=f&&f.setTimeout?f:e,"[object process]"==={}.toString.call(e.process)?r=function(e){t.nextTick((function(){h(e)}))}:!function(){if(e.postMessage&&!e.importScripts){var t=!0,n=e.onmessage;return e.onmessage=function(){t=!1},e.postMessage("","*"),e.onmessage=n,t}}()?e.MessageChannel?((o=new MessageChannel).port1.onmessage=function(e){h(e.data)},r=function(e){o.port2.postMessage(e)}):d&&"onreadystatechange"in d.createElement("script")?(i=d.documentElement,r=function(e){var t=d.createElement("script");t.onreadystatechange=function(){h(e),t.onreadystatechange=null,i.removeChild(t),t=null},i.appendChild(t)}):r=function(e){setTimeout(h,0,e)}:(a="setImmediate$"+Math.random()+"$",s=function(t){t.source===e&&"string"==typeof t.data&&0===t.data.indexOf(a)&&h(+t.data.slice(a.length))},e.addEventListener?e.addEventListener("message",s,!1):e.attachEvent("onmessage",s),r=function(t){e.postMessage(a+t,"*")}),f.setImmediate=function(e){"function"!=typeof e&&(e=new Function(""+e));for(var t=new Array(arguments.length-1),n=0;n<t.length;n++)t[n]=arguments[n+1];var i={callback:e,args:t};return c[l]=i,r(l),l++},f.clearImmediate=p}function p(e){delete c[e]}function h(e){if(u)setTimeout(h,0,e);else{var t=c[e];if(t){u=!0;try{!function(e){var t=e.callback,n=e.args;switch(n.length){case 0:t();break;case 1:t(n[0]);break;case 2:t(n[0],n[1]);break;case 3:t(n[0],n[1],n[2]);break;default:t.apply(void 0,n)}}(t)}finally{p(e),u=!1}}}}}("undefined"==typeof self?void 0===e?this:e:self)}).call(this,n(33),n(240))},function(e,t){var n,r,i=e.exports={};function o(){throw new Error("setTimeout has not been defined")}function a(){throw new Error("clearTimeout has not been defined")}function s(e){if(n===setTimeout)return setTimeout(e,0);if((n===o||!n)&&setTimeout)return n=setTimeout,setTimeout(e,0);try{return n(e,0)}catch(t){try{return n.call(null,e,0)}catch(t){return n.call(this,e,0)}}}!function(){try{n="function"==typeof setTimeout?setTimeout:o}catch(e){n=o}try{r="function"==typeof clearTimeout?clearTimeout:a}catch(e){r=a}}();var l,c=[],u=!1,d=-1;function f(){u&&l&&(u=!1,l.length?c=l.concat(c):d=-1,c.length&&p())}function p(){if(!u){var e=s(f);u=!0;for(var t=c.length;t;){for(l=c,c=[];++d<t;)l&&l[d].run();d=-1,t=c.length}l=null,u=!1,function(e){if(r===clearTimeout)return clearTimeout(e);if((r===a||!r)&&clearTimeout)return r=clearTimeout,clearTimeout(e);try{r(e)}catch(t){try{return r.call(null,e)}catch(t){return r.call(this,e)}}}(e)}}function h(e,t){this.fun=e,this.array=t}function g(){}i.nextTick=function(e){var t=new Array(arguments.length-1);if(arguments.length>1)for(var n=1;n<arguments.length;n++)t[n-1]=arguments[n];c.push(new h(e,t)),1!==c.length||u||s(p)},h.prototype.run=function(){this.fun.apply(null,this.array)},i.title="browser",i.browser=!0,i.env={},i.argv=[],i.version="",i.versions={},i.on=g,i.addListener=g,i.once=g,i.off=g,i.removeListener=g,i.removeAllListeners=g,i.emit=g,i.prependListener=g,i.prependOnceListener=g,i.listeners=function(e){return[]},i.binding=function(e){throw new Error("process.binding is not supported")},i.cwd=function(){return"/"},i.chdir=function(e){throw new Error("process.chdir is not supported")},i.umask=function(){return 0}},function(e,t,n){(function(t){var n=/^\s+|\s+$/g,r=/^[-+]0x[0-9a-f]+$/i,i=/^0b[01]+$/i,o=/^0o[0-7]+$/i,a=parseInt,s="object"==typeof t&&t&&t.Object===Object&&t,l="object"==typeof self&&self&&self.Object===Object&&self,c=s||l||Function("return this")(),u=Object.prototype.toString,d=Math.max,f=Math.min,p=function(){return c.Date.now()};function h(e){var t=typeof e;return!!e&&("object"==t||"function"==t)}function g(e){if("number"==typeof e)return e;if(function(e){return"symbol"==typeof e||function(e){return!!e&&"object"==typeof e}(e)&&"[object Symbol]"==u.call(e)}(e))return NaN;if(h(e)){var t="function"==typeof e.valueOf?e.valueOf():e;e=h(t)?t+"":t}if("string"!=typeof e)return 0===e?e:+e;e=e.replace(n,"");var s=i.test(e);return s||o.test(e)?a(e.slice(2),s?2:8):r.test(e)?NaN:+e}e.exports=function(e,t,n){var r,i,o,a,s,l,c=0,u=!1,v=!1,m=!0;if("function"!=typeof e)throw new TypeError("Expected a function");function b(t){var n=r,o=i;return r=i=void 0,c=t,a=e.apply(o,n)}function y(e){return c=e,s=setTimeout(w,t),u?b(e):a}function x(e){var n=e-l;return void 0===l||n>=t||n<0||v&&e-c>=o}function w(){var e=p();if(x(e))return k(e);s=setTimeout(w,function(e){var n=t-(e-l);return v?f(n,o-(e-c)):n}(e))}function k(e){return s=void 0,m&&r?b(e):(r=i=void 0,a)}function A(){var e=p(),n=x(e);if(r=arguments,i=this,l=e,n){if(void 0===s)return y(l);if(v)return s=setTimeout(w,t),b(l)}return void 0===s&&(s=setTimeout(w,t)),a}return t=g(t)||0,h(n)&&(u=!!n.leading,o=(v="maxWait"in n)?d(g(n.maxWait)||0,t):o,m="trailing"in n?!!n.trailing:m),A.cancel=function(){void 0!==s&&clearTimeout(s),c=0,r=l=i=s=void 0},A.flush=function(){return void 0===s?a:k(p())},A}}).call(this,n(33))},function(e,t,n){e.exports=n(243)},function(e,t,n){var r,i,o;(function(){var n,a,s,l,c,u,d,f,p,h,g,v,m,b,y;s=Math.floor,h=Math.min,a=function(e,t){return e<t?-1:e>t?1:0},p=function(e,t,n,r,i){var o;if(null==n&&(n=0),null==i&&(i=a),n<0)throw new Error("lo must be non-negative");for(null==r&&(r=e.length);n<r;)i(t,e[o=s((n+r)/2)])<0?r=o:n=o+1;return[].splice.apply(e,[n,n-n].concat(t)),t},u=function(e,t,n){return null==n&&(n=a),e.push(t),b(e,0,e.length-1,n)},c=function(e,t){var n,r;return null==t&&(t=a),n=e.pop(),e.length?(r=e[0],e[0]=n,y(e,0,t)):r=n,r},f=function(e,t,n){var r;return null==n&&(n=a),r=e[0],e[0]=t,y(e,0,n),r},d=function(e,t,n){var r;return null==n&&(n=a),e.length&&n(e[0],t)<0&&(t=(r=[e[0],t])[0],e[0]=r[1],y(e,0,n)),t},l=function(e,t){var n,r,i,o,l,c;for(null==t&&(t=a),l=[],r=0,i=(o=function(){c=[];for(var t=0,n=s(e.length/2);0<=n?t<n:t>n;0<=n?t++:t--)c.push(t);return c}.apply(this).reverse()).length;r<i;r++)n=o[r],l.push(y(e,n,t));return l},m=function(e,t,n){var r;if(null==n&&(n=a),-1!==(r=e.indexOf(t)))return b(e,0,r,n),y(e,r,n)},g=function(e,t,n){var r,i,o,s,c;if(null==n&&(n=a),!(i=e.slice(0,t)).length)return i;for(l(i,n),o=0,s=(c=e.slice(t)).length;o<s;o++)r=c[o],d(i,r,n);return i.sort(n).reverse()},v=function(e,t,n){var r,i,o,s,u,d,f,g,v;if(null==n&&(n=a),10*t<=e.length){if(!(o=e.slice(0,t).sort(n)).length)return o;for(i=o[o.length-1],s=0,d=(f=e.slice(t)).length;s<d;s++)n(r=f[s],i)<0&&(p(o,r,0,null,n),o.pop(),i=o[o.length-1]);return o}for(l(e,n),v=[],u=0,g=h(t,e.length);0<=g?u<g:u>g;0<=g?++u:--u)v.push(c(e,n));return v},b=function(e,t,n,r){var i,o,s;for(null==r&&(r=a),i=e[n];n>t&&r(i,o=e[s=n-1>>1])<0;)e[n]=o,n=s;return e[n]=i},y=function(e,t,n){var r,i,o,s,l;for(null==n&&(n=a),i=e.length,l=t,o=e[t],r=2*t+1;r<i;)(s=r+1)<i&&!(n(e[r],e[s])<0)&&(r=s),e[t]=e[r],r=2*(t=r)+1;return e[t]=o,b(e,l,t,n)},n=function(){function e(e){this.cmp=null!=e?e:a,this.nodes=[]}return e.push=u,e.pop=c,e.replace=f,e.pushpop=d,e.heapify=l,e.updateItem=m,e.nlargest=g,e.nsmallest=v,e.prototype.push=function(e){return u(this.nodes,e,this.cmp)},e.prototype.pop=function(){return c(this.nodes,this.cmp)},e.prototype.peek=function(){return this.nodes[0]},e.prototype.contains=function(e){return-1!==this.nodes.indexOf(e)},e.prototype.replace=function(e){return f(this.nodes,e,this.cmp)},e.prototype.pushpop=function(e){return d(this.nodes,e,this.cmp)},e.prototype.heapify=function(){return l(this.nodes,this.cmp)},e.prototype.updateItem=function(e){return m(this.nodes,e,this.cmp)},e.prototype.clear=function(){return this.nodes=[]},e.prototype.empty=function(){return 0===this.nodes.length},e.prototype.size=function(){return this.nodes.length},e.prototype.clone=function(){var t;return(t=new e).nodes=this.nodes.slice(0),t},e.prototype.toArray=function(){return this.nodes.slice(0)},e.prototype.insert=e.prototype.push,e.prototype.top=e.prototype.peek,e.prototype.front=e.prototype.peek,e.prototype.has=e.prototype.contains,e.prototype.copy=e.prototype.clone,e}(),i=[],void 0===(o="function"==typeof(r=function(){return n})?r.apply(t,i):r)||(e.exports=o)}).call(this)},function(e,t,n){var r;!function(){"use strict";var i="undefined"==typeof jQuery?null:jQuery,o=function(e,t){if(e){var n,r={menuItems:[],menuItemClasses:[],contextMenuClasses:[]};e("core","contextMenus",(function(e){var i=this;i.scratch("cycontextmenus")||i.scratch("cycontextmenus",{});var o,a=l("options"),s=l("cxtMenu");function l(e){return i.scratch("cycontextmenus")[e]}function c(e,t){i.scratch("cycontextmenus")[e]=t}function u(e){for(var t="",n=0;n<e.length;n++){t+=e[n],n!==e.length-1&&(t+=" ")}return t}function d(e){e.css("display","block")}function f(e){e.css("display","none")}function p(e,n,r){function o(n){c("currentCyEvent",n),function(e){var n=l("cxtMenuPosition"),r=e.position||e.cyPosition;if(n!=r){s.children().css("display","none"),c("anyVisibleChild",!1),c("cxtMenuPosition",r);var o=t(i.container()).offset(),a=e.renderedPosition||e.cyRenderedPosition,u=o.left+a.x,d=o.top+a.y;s.css("left",u),s.css("top",d)}}(n),e.data("show")&&(s.is(":visible")||d(s),c("anyVisibleChild",!0),d(e)),!l("anyVisibleChild")&&s.is(":visible")&&f(s)}var a,u;r&&i.on("cxttap",u=function(e){(e.target||e.cyTarget)==i&&o(e)}),n&&i.on("cxttap",n,a=function(e){o(e)}),e.data("cy-context-menus-cxtfcn",a),e.data("cy-context-menus-cxtcorefcn",u)}function h(e,t,n,r){!function(e,t){var n;e.on("click",n=function(){t(l("currentCyEvent"))}),e.data("call-on-click-function",n)}(e,t),p(e,n,r)}function g(e){for(var t=0;t<e.length;t++)v(e[t])}function v(e){var t,n=b(e);t=n,s.append(t),function(e){e.click((function(){f(s),c("cxtMenuPosition",void 0)}))}(t),h(n,e.onClickFunction,e.selector,e.coreAsWell)}function m(e,n){var r,i,o=b(e);r=o,i=t("#"+n),r.insertBefore(i),h(o,e.onClickFunction,e.selector,e.coreAsWell)}function b(e){var n,r,i,o=(n=a.menuItemClasses,r=e.hasTrailingDivider,i=u(n),i+=" cy-context-menus-cxt-menuitem",r&&(i+=" cy-context-menus-divider"),i),s='<button id="'+e.id+'" class="'+o+'"';e.tooltipText&&(s+=' title="'+e.tooltipText+'"'),e.disabled&&(s+=" disabled"),e.image?s+='><img src="'+e.image.src+'" width="'+e.image.width+'px"; height="'+e.image.height+'px"; style="position:absolute; top: '+e.image.y+"px; left: "+e.image.x+'px;">'+e.content+"</button>":s+=">"+e.content+"</button>";var l=t(s);return l.data("selector",e.selector),l.data("on-click-function",e.onClickFunction),l.data("show",void 0===e.show||e.show),l}function y(){var e;l("active")&&(e=s.children(),t(e).each((function(){x(t(this))})),i.off("tapstart",n),s.remove(),c(s=void 0,void 0),c("active",!1),c("anyVisibleChild",!1))}function x(e){var n="string"==typeof e?t("#"+e):e,r=n.data("cy-context-menus-cxtfcn"),o=n.data("selector"),a=n.data("call-on-click-function"),s=n.data("cy-context-menus-cxtcorefcn");r&&i.off("cxttap",o,r),s&&i.off("cxttap",s),a&&n.off("click",a),n.remove()}"get"!==e&&(c("options",a=function(e,t){var n={};for(var r in e)n[r]=e[r];for(var r in t)n[r]=t[r];return n}(r,e)),l("active")&&y(),c("active",!0),o=u(a.contextMenuClasses),(s=t("<div class="+o+"></div>")).addClass("cy-context-menus-cxt-menu"),c("cxtMenu",s),t("body").append(s),s=s,g(a.menuItems),i.on("tapstart",n=function(){f(s),c("cxtMenuPosition",void 0),c("currentCyEvent",void 0)}),t(".cy-context-menus-cxt-menu").contextmenu((function(){return!1})));return function(e){return{isActive:function(){return l("active")},appendMenuItem:function(t){return v(t),e},appendMenuItems:function(t){return g(t),e},removeMenuItem:function(t){return x(t),e},setTrailingDivider:function(n,r){return function(e,n){var r=t("#"+e);n?r.addClass("cy-context-menus-divider"):r.removeClass("cy-context-menus-divider")}(n,r),e},insertBeforeMenuItem:function(t,n){return m(t,n),e},moveBeforeOtherMenuItem:function(n,r){return function(e,n){if(e!==n){var r=t("#"+e).detach(),i=t("#"+n);r.insertBefore(i)}}(n,r),e},disableMenuItem:function(n){return t("#"+n).attr("disabled",!0),e},enableMenuItem:function(n){return t("#"+n).attr("disabled",!1),e},hideMenuItem:function(n){return t("#"+n).data("show",!1),f(t("#"+n)),e},showMenuItem:function(n){return t("#"+n).data("show",!0),d(t("#"+n)),e},destroy:function(){return y(),e}}}(this)}))}};e.exports&&(e.exports=o),void 0===(r=function(){return o}.call(t,n,t,e))||(e.exports=r),"undefined"!=typeof cytoscape&&i&&o(cytoscape,i)}()},function(e,t,n){var r;r=function(e){return function(e){var t={};function n(r){if(t[r])return t[r].exports;var i=t[r]={i:r,l:!1,exports:{}};return e[r].call(i.exports,i,i.exports,n),i.l=!0,i.exports}return n.m=e,n.c=t,n.d=function(e,t,r){n.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:r})},n.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},n.t=function(e,t){if(1&t&&(e=n(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var r=Object.create(null);if(n.r(r),Object.defineProperty(r,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var i in e)n.d(r,i,function(t){return e[t]}.bind(null,i));return r},n.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return n.d(t,"a",t),t},n.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},n.p="",n(n.s=0)}([function(e,t,n){var r=n(1),i=function(e){e&&e("layout","dagre",r)};"undefined"!=typeof cytoscape&&i(cytoscape),e.exports=i},function(e,t,n){function r(e){return(r="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}var i=n(2),o=n(3),a=n(4);function s(e){this.options=o({},i,e)}s.prototype.run=function(){var e=this.options,t=e.cy,n=e.eles,i=function(e,t){return"function"==typeof t?t.apply(e,[e]):t},o=e.boundingBox||{x1:0,y1:0,w:t.width(),h:t.height()};void 0===o.x2&&(o.x2=o.x1+o.w),void 0===o.w&&(o.w=o.x2-o.x1),void 0===o.y2&&(o.y2=o.y1+o.h),void 0===o.h&&(o.h=o.y2-o.y1);var s=new a.graphlib.Graph({multigraph:!0,compound:!0}),l={},c=function(e,t){null!=t&&(l[e]=t)};c("nodesep",e.nodeSep),c("edgesep",e.edgeSep),c("ranksep",e.rankSep),c("rankdir",e.rankDir),c("ranker",e.ranker),s.setGraph(l),s.setDefaultEdgeLabel((function(){return{}})),s.setDefaultNodeLabel((function(){return{}}));for(var u=n.nodes(),d=0;d<u.length;d++){var f=u[d],p=f.layoutDimensions(e);s.setNode(f.id(),{width:p.w,height:p.h,name:f.id()})}for(var h=0;h<u.length;h++){var g=u[h];g.isChild()&&s.setParent(g.id(),g.parent().id())}for(var v=n.edges().stdFilter((function(e){return!e.source().isParent()&&!e.target().isParent()})),m=0;m<v.length;m++){var b=v[m];s.setEdge(b.source().id(),b.target().id(),{minlen:i(b,e.minLen),weight:i(b,e.edgeWeight),name:b.id()},b.id())}a.layout(s);for(var y,x=s.nodes(),w=0;w<x.length;w++){var k=x[w],A=s.node(k);t.getElementById(k).scratch().dagre=A}return e.boundingBox?(y={x1:1/0,x2:-1/0,y1:1/0,y2:-1/0},u.forEach((function(e){var t=e.scratch().dagre;y.x1=Math.min(y.x1,t.x),y.x2=Math.max(y.x2,t.x),y.y1=Math.min(y.y1,t.y),y.y2=Math.max(y.y2,t.y)})),y.w=y.x2-y.x1,y.h=y.y2-y.y1):y=o,u.layoutPositions(this,e,(function(t){var n=(t="object"===r(t)?t:this).scratch().dagre;return function(t){if(e.boundingBox){var n=0===y.w?0:(t.x-y.x1)/y.w,r=0===y.h?0:(t.y-y.y1)/y.h;return{x:o.x1+n*o.w,y:o.y1+r*o.h}}return t}({x:n.x,y:n.y})})),this},e.exports=s},function(e,t){var n={nodeSep:void 0,edgeSep:void 0,rankSep:void 0,rankDir:void 0,ranker:void 0,minLen:function(e){return 1},edgeWeight:function(e){return 1},fit:!0,padding:30,spacingFactor:void 0,nodeDimensionsIncludeLabels:!1,animate:!1,animateFilter:function(e,t){return!0},animationDuration:500,animationEasing:void 0,boundingBox:void 0,transform:function(e,t){return t},ready:function(){},stop:function(){}};e.exports=n},function(e,t){e.exports=null!=Object.assign?Object.assign.bind(Object):function(e){for(var t=arguments.length,n=new Array(t>1?t-1:0),r=1;r<t;r++)n[r-1]=arguments[r];return n.forEach((function(t){Object.keys(t).forEach((function(n){return e[n]=t[n]}))})),e}},function(t,n){t.exports=e}])},e.exports=r(n(246))},function(e,t,n){e.exports={graphlib:n(28),layout:n(359),debug:n(418),util:{time:n(20).time,notime:n(20).notime},version:n(419)}},function(e,t,n){e.exports={Graph:n(116),version:n(348)}},function(e,t,n){var r=n(149);e.exports=function(e){return r(e,4)}},function(e,t){e.exports=function(){this.__data__=[],this.size=0}},function(e,t,n){var r=n(74),i=Array.prototype.splice;e.exports=function(e){var t=this.__data__,n=r(t,e);return!(n<0)&&(n==t.length-1?t.pop():i.call(t,n,1),--this.size,!0)}},function(e,t,n){var r=n(74);e.exports=function(e){var t=this.__data__,n=r(t,e);return n<0?void 0:t[n][1]}},function(e,t,n){var r=n(74);e.exports=function(e){return r(this.__data__,e)>-1}},function(e,t,n){var r=n(74);e.exports=function(e,t){var n=this.__data__,i=r(n,e);return i<0?(++this.size,n.push([e,t])):n[i][1]=t,this}},function(e,t,n){var r=n(73);e.exports=function(){this.__data__=new r,this.size=0}},function(e,t){e.exports=function(e){var t=this.__data__,n=t.delete(e);return this.size=t.size,n}},function(e,t){e.exports=function(e){return this.__data__.get(e)}},function(e,t){e.exports=function(e){return this.__data__.has(e)}},function(e,t,n){var r=n(73),i=n(117),o=n(118);e.exports=function(e,t){var n=this.__data__;if(n instanceof r){var a=n.__data__;if(!i||a.length<199)return a.push([e,t]),this.size=++n.size,this;n=this.__data__=new o(a)}return n.set(e,t),this.size=n.size,this}},function(e,t,n){var r=n(63),i=n(262),o=n(23),a=n(151),s=/^\[object .+?Constructor\]$/,l=Function.prototype,c=Object.prototype,u=l.toString,d=c.hasOwnProperty,f=RegExp("^"+u.call(d).replace(/[\\^$.*+?()[\]{}|]/g,"\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,"$1.*?")+"$");e.exports=function(e){return!(!o(e)||i(e))&&(r(e)?f:s).test(a(e))}},function(e,t,n){var r=n(58),i=Object.prototype,o=i.hasOwnProperty,a=i.toString,s=r?r.toStringTag:void 0;e.exports=function(e){var t=o.call(e,s),n=e[s];try{e[s]=void 0;var r=!0}catch(e){}var i=a.call(e);return r&&(t?e[s]=n:delete e[s]),i}},function(e,t){var n=Object.prototype.toString;e.exports=function(e){return n.call(e)}},function(e,t,n){var r,i=n(263),o=(r=/[^.]+$/.exec(i&&i.keys&&i.keys.IE_PROTO||""))?"Symbol(src)_1."+r:"";e.exports=function(e){return!!o&&o in e}},function(e,t,n){var r=n(29)["__core-js_shared__"];e.exports=r},function(e,t){e.exports=function(e,t){return null==e?void 0:e[t]}},function(e,t,n){var r=n(266),i=n(73),o=n(117);e.exports=function(){this.size=0,this.__data__={hash:new r,map:new(o||i),string:new r}}},function(e,t,n){var r=n(267),i=n(268),o=n(269),a=n(270),s=n(271);function l(e){var t=-1,n=null==e?0:e.length;for(this.clear();++t<n;){var r=e[t];this.set(r[0],r[1])}}l.prototype.clear=r,l.prototype.delete=i,l.prototype.get=o,l.prototype.has=a,l.prototype.set=s,e.exports=l},function(e,t,n){var r=n(75);e.exports=function(){this.__data__=r?r(null):{},this.size=0}},function(e,t){e.exports=function(e){var t=this.has(e)&&delete this.__data__[e];return this.size-=t?1:0,t}},function(e,t,n){var r=n(75),i=Object.prototype.hasOwnProperty;e.exports=function(e){var t=this.__data__;if(r){var n=t[e];return"__lodash_hash_undefined__"===n?void 0:n}return i.call(t,e)?t[e]:void 0}},function(e,t,n){var r=n(75),i=Object.prototype.hasOwnProperty;e.exports=function(e){var t=this.__data__;return r?void 0!==t[e]:i.call(t,e)}},function(e,t,n){var r=n(75);e.exports=function(e,t){var n=this.__data__;return this.size+=this.has(e)?0:1,n[e]=r&&void 0===t?"__lodash_hash_undefined__":t,this}},function(e,t,n){var r=n(76);e.exports=function(e){var t=r(this,e).delete(e);return this.size-=t?1:0,t}},function(e,t){e.exports=function(e){var t=typeof e;return"string"==t||"number"==t||"symbol"==t||"boolean"==t?"__proto__"!==e:null===e}},function(e,t,n){var r=n(76);e.exports=function(e){return r(this,e).get(e)}},function(e,t,n){var r=n(76);e.exports=function(e){return r(this,e).has(e)}},function(e,t,n){var r=n(76);e.exports=function(e,t){var n=r(this,e),i=n.size;return n.set(e,t),this.size+=n.size==i?0:1,this}},function(e,t,n){var r=n(64),i=n(41);e.exports=function(e,t){return e&&r(t,i(t),e)}},function(e,t){e.exports=function(e,t){for(var n=-1,r=Array(e);++n<e;)r[n]=t(n);return r}},function(e,t,n){var r=n(47),i=n(32);e.exports=function(e){return i(e)&&"[object Arguments]"==r(e)}},function(e,t){e.exports=function(){return!1}},function(e,t,n){var r=n(47),i=n(120),o=n(32),a={};a["[object Float32Array]"]=a["[object Float64Array]"]=a["[object Int8Array]"]=a["[object Int16Array]"]=a["[object Int32Array]"]=a["[object Uint8Array]"]=a["[object Uint8ClampedArray]"]=a["[object Uint16Array]"]=a["[object Uint32Array]"]=!0,a["[object Arguments]"]=a["[object Array]"]=a["[object ArrayBuffer]"]=a["[object Boolean]"]=a["[object DataView]"]=a["[object Date]"]=a["[object Error]"]=a["[object Function]"]=a["[object Map]"]=a["[object Number]"]=a["[object Object]"]=a["[object RegExp]"]=a["[object Set]"]=a["[object String]"]=a["[object WeakMap]"]=!1,e.exports=function(e){return o(e)&&i(e.length)&&!!a[r(e)]}},function(e,t,n){var r=n(154)(Object.keys,Object);e.exports=r},function(e,t,n){var r=n(64),i=n(48);e.exports=function(e,t){return e&&r(t,i(t),e)}},function(e,t,n){var r=n(23),i=n(82),o=n(285),a=Object.prototype.hasOwnProperty;e.exports=function(e){if(!r(e))return o(e);var t=i(e),n=[];for(var s in e)("constructor"!=s||!t&&a.call(e,s))&&n.push(s);return n}},function(e,t){e.exports=function(e){var t=[];if(null!=e)for(var n in Object(e))t.push(n);return t}},function(e,t,n){var r=n(64),i=n(123);e.exports=function(e,t){return r(e,i(e),t)}},function(e,t,n){var r=n(64),i=n(159);e.exports=function(e,t){return r(e,i(e),t)}},function(e,t,n){var r=n(161),i=n(159),o=n(48);e.exports=function(e){return r(e,o,i)}},function(e,t,n){var r=n(46)(n(29),"DataView");e.exports=r},function(e,t,n){var r=n(46)(n(29),"Promise");e.exports=r},function(e,t,n){var r=n(46)(n(29),"WeakMap");e.exports=r},function(e,t){var n=Object.prototype.hasOwnProperty;e.exports=function(e){var t=e.length,r=new e.constructor(t);return t&&"string"==typeof e[0]&&n.call(e,"index")&&(r.index=e.index,r.input=e.input),r}},function(e,t,n){var r=n(125),i=n(294),o=n(295),a=n(296),s=n(164);e.exports=function(e,t,n){var l=e.constructor;switch(t){case"[object ArrayBuffer]":return r(e);case"[object Boolean]":case"[object Date]":return new l(+e);case"[object DataView]":return i(e,n);case"[object Float32Array]":case"[object Float64Array]":case"[object Int8Array]":case"[object Int16Array]":case"[object Int32Array]":case"[object Uint8Array]":case"[object Uint8ClampedArray]":case"[object Uint16Array]":case"[object Uint32Array]":return s(e,n);case"[object Map]":return new l;case"[object Number]":case"[object String]":return new l(e);case"[object RegExp]":return o(e);case"[object Set]":return new l;case"[object Symbol]":return a(e)}}},function(e,t,n){var r=n(125);e.exports=function(e,t){var n=t?r(e.buffer):e.buffer;return new e.constructor(n,e.byteOffset,e.byteLength)}},function(e,t){var n=/\w*$/;e.exports=function(e){var t=new e.constructor(e.source,n.exec(e));return t.lastIndex=e.lastIndex,t}},function(e,t,n){var r=n(58),i=r?r.prototype:void 0,o=i?i.valueOf:void 0;e.exports=function(e){return o?Object(o.call(e)):{}}},function(e,t,n){var r=n(298),i=n(81),o=n(121),a=o&&o.isMap,s=a?i(a):r;e.exports=s},function(e,t,n){var r=n(60),i=n(32);e.exports=function(e){return i(e)&&"[object Map]"==r(e)}},function(e,t,n){var r=n(300),i=n(81),o=n(121),a=o&&o.isSet,s=a?i(a):r;e.exports=s},function(e,t,n){var r=n(60),i=n(32);e.exports=function(e){return i(e)&&"[object Set]"==r(e)}},function(e,t){e.exports=function(e){return function(t,n,r){for(var i=-1,o=Object(t),a=r(t),s=a.length;s--;){var l=a[e?s:++i];if(!1===n(o[l],l,o))break}return t}}},function(e,t,n){var r=n(34);e.exports=function(e,t){return function(n,i){if(null==n)return n;if(!r(n))return e(n,i);for(var o=n.length,a=t?o:-1,s=Object(n);(t?a--:++a<o)&&!1!==i(s[a],a,s););return n}}},function(e,t,n){var r=n(84);e.exports=function(e,t){var n=[];return r(e,(function(e,r,i){t(e,r,i)&&n.push(e)})),n}},function(e,t,n){var r=n(305),i=n(313),o=n(176);e.exports=function(e){var t=i(e);return 1==t.length&&t[0][2]?o(t[0][0],t[0][1]):function(n){return n===e||r(n,e,t)}}},function(e,t,n){var r=n(72),i=n(171);e.exports=function(e,t,n,o){var a=n.length,s=a,l=!o;if(null==e)return!s;for(e=Object(e);a--;){var c=n[a];if(l&&c[2]?c[1]!==e[c[0]]:!(c[0]in e))return!1}for(;++a<s;){var u=(c=n[a])[0],d=e[u],f=c[1];if(l&&c[2]){if(void 0===d&&!(u in e))return!1}else{var p=new r;if(o)var h=o(d,f,u,e,t,p);if(!(void 0===h?i(f,d,3,o,p):h))return!1}}return!0}},function(e,t,n){var r=n(72),i=n(172),o=n(310),a=n(312),s=n(60),l=n(13),c=n(59),u=n(66),d="[object Object]",f=Object.prototype.hasOwnProperty;e.exports=function(e,t,n,p,h,g){var v=l(e),m=l(t),b=v?"[object Array]":s(e),y=m?"[object Array]":s(t),x=(b="[object Arguments]"==b?d:b)==d,w=(y="[object Arguments]"==y?d:y)==d,k=b==y;if(k&&c(e)){if(!c(t))return!1;v=!0,x=!1}if(k&&!x)return g||(g=new r),v||u(e)?i(e,t,n,p,h,g):o(e,t,b,n,p,h,g);if(!(1&n)){var A=x&&f.call(e,"__wrapped__"),E=w&&f.call(t,"__wrapped__");if(A||E){var S=A?e.value():e,C=E?t.value():t;return g||(g=new r),h(S,C,n,p,g)}}return!!k&&(g||(g=new r),a(e,t,n,p,h,g))}},function(e,t){e.exports=function(e){return this.__data__.set(e,"__lodash_hash_undefined__"),this}},function(e,t){e.exports=function(e){return this.__data__.has(e)}},function(e,t){e.exports=function(e,t){for(var n=-1,r=null==e?0:e.length;++n<r;)if(t(e[n],n,e))return!0;return!1}},function(e,t,n){var r=n(58),i=n(163),o=n(57),a=n(172),s=n(311),l=n(129),c=r?r.prototype:void 0,u=c?c.valueOf:void 0;e.exports=function(e,t,n,r,c,d,f){switch(n){case"[object DataView]":if(e.byteLength!=t.byteLength||e.byteOffset!=t.byteOffset)return!1;e=e.buffer,t=t.buffer;case"[object ArrayBuffer]":return!(e.byteLength!=t.byteLength||!d(new i(e),new i(t)));case"[object Boolean]":case"[object Date]":case"[object Number]":return o(+e,+t);case"[object Error]":return e.name==t.name&&e.message==t.message;case"[object RegExp]":case"[object String]":return e==t+"";case"[object Map]":var p=s;case"[object Set]":var h=1&r;if(p||(p=l),e.size!=t.size&&!h)return!1;var g=f.get(e);if(g)return g==t;r|=2,f.set(e,t);var v=a(p(e),p(t),r,c,d,f);return f.delete(e),v;case"[object Symbol]":if(u)return u.call(e)==u.call(t)}return!1}},function(e,t){e.exports=function(e){var t=-1,n=Array(e.size);return e.forEach((function(e,r){n[++t]=[r,e]})),n}},function(e,t,n){var r=n(160),i=Object.prototype.hasOwnProperty;e.exports=function(e,t,n,o,a,s){var l=1&n,c=r(e),u=c.length;if(u!=r(t).length&&!l)return!1;for(var d=u;d--;){var f=c[d];if(!(l?f in t:i.call(t,f)))return!1}var p=s.get(e),h=s.get(t);if(p&&h)return p==t&&h==e;var g=!0;s.set(e,t),s.set(t,e);for(var v=l;++d<u;){var m=e[f=c[d]],b=t[f];if(o)var y=l?o(b,m,f,t,e,s):o(m,b,f,e,t,s);if(!(void 0===y?m===b||a(m,b,n,o,s):y)){g=!1;break}v||(v="constructor"==f)}if(g&&!v){var x=e.constructor,w=t.constructor;x==w||!("constructor"in e)||!("constructor"in t)||"function"==typeof x&&x instanceof x&&"function"==typeof w&&w instanceof w||(g=!1)}return s.delete(e),s.delete(t),g}},function(e,t,n){var r=n(175),i=n(41);e.exports=function(e){for(var t=i(e),n=t.length;n--;){var o=t[n],a=e[o];t[n]=[o,a,r(a)]}return t}},function(e,t,n){var r=n(171),i=n(315),o=n(178),a=n(130),s=n(175),l=n(176),c=n(67);e.exports=function(e,t){return a(e)&&s(t)?l(c(e),t):function(n){var a=i(n,e);return void 0===a&&a===t?o(n,e):r(t,a,3)}}},function(e,t,n){var r=n(85);e.exports=function(e,t,n){var i=null==e?void 0:r(e,t);return void 0===i?n:i}},function(e,t,n){var r=n(317),i=/[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g,o=/\\(\\)?/g,a=r((function(e){var t=[];return 46===e.charCodeAt(0)&&t.push(""),e.replace(i,(function(e,n,r,i){t.push(r?i.replace(o,"$1"):n||e)})),t}));e.exports=a},function(e,t,n){var r=n(318);e.exports=function(e){var t=r(e,(function(e){return 500===n.size&&n.clear(),e})),n=t.cache;return t}},function(e,t,n){var r=n(118);function i(e,t){if("function"!=typeof e||null!=t&&"function"!=typeof t)throw new TypeError("Expected a function");var n=function(){var r=arguments,i=t?t.apply(this,r):r[0],o=n.cache;if(o.has(i))return o.get(i);var a=e.apply(this,r);return n.cache=o.set(i,a)||o,a};return n.cache=new(i.Cache||r),n}i.Cache=r,e.exports=i},function(e,t,n){var r=n(58),i=n(87),o=n(13),a=n(61),s=r?r.prototype:void 0,l=s?s.toString:void 0;e.exports=function e(t){if("string"==typeof t)return t;if(o(t))return i(t,e)+"";if(a(t))return l?l.call(t):"";var n=t+"";return"0"==n&&1/t==-1/0?"-0":n}},function(e,t){e.exports=function(e,t){return null!=e&&t in Object(e)}},function(e,t,n){var r=n(180),i=n(322),o=n(130),a=n(67);e.exports=function(e){return o(e)?r(a(e)):i(e)}},function(e,t,n){var r=n(85);e.exports=function(e){return function(t){return r(t,e)}}},function(e,t){var n=Object.prototype.hasOwnProperty;e.exports=function(e,t){return null!=e&&n.call(e,t)}},function(e,t,n){var r=n(122),i=n(60),o=n(65),a=n(13),s=n(34),l=n(59),c=n(82),u=n(66),d=Object.prototype.hasOwnProperty;e.exports=function(e){if(null==e)return!0;if(s(e)&&(a(e)||"string"==typeof e||"function"==typeof e.splice||l(e)||u(e)||o(e)))return!e.length;var t=i(e);if("[object Map]"==t||"[object Set]"==t)return!e.size;if(c(e))return!r(e).length;for(var n in e)if(d.call(e,n))return!1;return!0}},function(e,t){e.exports=function(e,t,n,r){var i=-1,o=null==e?0:e.length;for(r&&o&&(n=e[++i]);++i<o;)n=t(n,e[i],i,e);return n}},function(e,t){e.exports=function(e,t,n,r,i){return i(e,(function(e,i,o){n=r?(r=!1,e):t(n,e,i,o)})),n}},function(e,t,n){var r=n(122),i=n(60),o=n(34),a=n(328),s=n(329);e.exports=function(e){if(null==e)return 0;if(o(e))return a(e)?s(e):e.length;var t=i(e);return"[object Map]"==t||"[object Set]"==t?e.size:r(e).length}},function(e,t,n){var r=n(47),i=n(13),o=n(32);e.exports=function(e){return"string"==typeof e||!i(e)&&o(e)&&"[object String]"==r(e)}},function(e,t,n){var r=n(330),i=n(331),o=n(332);e.exports=function(e){return i(e)?o(e):r(e)}},function(e,t,n){var r=n(180)("length");e.exports=r},function(e,t){var n=RegExp("[\\u200d\\ud800-\\udfff\\u0300-\\u036f\\ufe20-\\ufe2f\\u20d0-\\u20ff\\ufe0e\\ufe0f]");e.exports=function(e){return n.test(e)}},function(e,t){var n="[\\ud800-\\udfff]",r="[\\u0300-\\u036f\\ufe20-\\ufe2f\\u20d0-\\u20ff]",i="\\ud83c[\\udffb-\\udfff]",o="[^\\ud800-\\udfff]",a="(?:\\ud83c[\\udde6-\\uddff]){2}",s="[\\ud800-\\udbff][\\udc00-\\udfff]",l="(?:"+r+"|"+i+")"+"?",c="[\\ufe0e\\ufe0f]?"+l+("(?:\\u200d(?:"+[o,a,s].join("|")+")[\\ufe0e\\ufe0f]?"+l+")*"),u="(?:"+[o+r+"?",r,a,s,n].join("|")+")",d=RegExp(i+"(?="+i+")|"+u+c,"g");e.exports=function(e){for(var t=d.lastIndex=0;d.test(e);)++t;return t}},function(e,t,n){var r=n(119),i=n(166),o=n(127),a=n(35),s=n(83),l=n(13),c=n(59),u=n(63),d=n(23),f=n(66);e.exports=function(e,t,n){var p=l(e),h=p||c(e)||f(e);if(t=a(t,4),null==n){var g=e&&e.constructor;n=h?p?new g:[]:d(e)&&u(g)?i(s(e)):{}}return(h?r:o)(e,(function(e,r,i){return t(n,e,r,i)})),n}},function(e,t,n){var r=n(131),i=n(88),o=n(339),a=n(189),s=i((function(e){return o(r(e,1,a,!0))}));e.exports=s},function(e,t,n){var r=n(58),i=n(65),o=n(13),a=r?r.isConcatSpreadable:void 0;e.exports=function(e){return o(e)||i(e)||!!(a&&e&&e[a])}},function(e,t){e.exports=function(e,t,n){switch(n.length){case 0:return e.call(t);case 1:return e.call(t,n[0]);case 2:return e.call(t,n[0],n[1]);case 3:return e.call(t,n[0],n[1],n[2])}return e.apply(t,n)}},function(e,t,n){var r=n(126),i=n(152),o=n(49),a=i?function(e,t){return i(e,"toString",{configurable:!0,enumerable:!1,value:r(t),writable:!0})}:o;e.exports=a},function(e,t){var n=Date.now;e.exports=function(e){var t=0,r=0;return function(){var i=n(),o=16-(i-r);if(r=i,o>0){if(++t>=800)return arguments[0]}else t=0;return e.apply(void 0,arguments)}}},function(e,t,n){var r=n(173),i=n(340),o=n(344),a=n(174),s=n(345),l=n(129);e.exports=function(e,t,n){var c=-1,u=i,d=e.length,f=!0,p=[],h=p;if(n)f=!1,u=o;else if(d>=200){var g=t?null:s(e);if(g)return l(g);f=!1,u=a,h=new r}else h=t?[]:p;e:for(;++c<d;){var v=e[c],m=t?t(v):v;if(v=n||0!==v?v:0,f&&m==m){for(var b=h.length;b--;)if(h[b]===m)continue e;t&&h.push(m),p.push(v)}else u(h,m,n)||(h!==p&&h.push(m),p.push(v))}return p}},function(e,t,n){var r=n(341);e.exports=function(e,t){return!!(null==e?0:e.length)&&r(e,t,0)>-1}},function(e,t,n){var r=n(188),i=n(342),o=n(343);e.exports=function(e,t,n){return t==t?o(e,t,n):r(e,i,n)}},function(e,t){e.exports=function(e){return e!=e}},function(e,t){e.exports=function(e,t,n){for(var r=n-1,i=e.length;++r<i;)if(e[r]===t)return r;return-1}},function(e,t){e.exports=function(e,t,n){for(var r=-1,i=null==e?0:e.length;++r<i;)if(n(t,e[r]))return!0;return!1}},function(e,t,n){var r=n(162),i=n(346),o=n(129),a=r&&1/o(new r([,-0]))[1]==1/0?function(e){return new r(e)}:i;e.exports=a},function(e,t){e.exports=function(){}},function(e,t,n){var r=n(87);e.exports=function(e,t){return r(t,(function(t){return e[t]}))}},function(e,t){e.exports="2.1.8"},function(e,t,n){var r=n(22),i=n(116);function o(e){return r.map(e.nodes(),(function(t){var n=e.node(t),i=e.parent(t),o={v:t};return r.isUndefined(n)||(o.value=n),r.isUndefined(i)||(o.parent=i),o}))}function a(e){return r.map(e.edges(),(function(t){var n=e.edge(t),i={v:t.v,w:t.w};return r.isUndefined(t.name)||(i.name=t.name),r.isUndefined(n)||(i.value=n),i}))}e.exports={write:function(e){var t={options:{directed:e.isDirected(),multigraph:e.isMultigraph(),compound:e.isCompound()},nodes:o(e),edges:a(e)};r.isUndefined(e.graph())||(t.value=r.clone(e.graph()));return t},read:function(e){var t=new i(e.options).setGraph(e.value);return r.each(e.nodes,(function(e){t.setNode(e.v,e.value),e.parent&&t.setParent(e.v,e.parent)})),r.each(e.edges,(function(e){t.setEdge({v:e.v,w:e.w,name:e.name},e.value)})),t}}},function(e,t,n){e.exports={components:n(351),dijkstra:n(191),dijkstraAll:n(352),findCycles:n(353),floydWarshall:n(354),isAcyclic:n(355),postorder:n(356),preorder:n(357),prim:n(358),tarjan:n(193),topsort:n(194)}},function(e,t,n){var r=n(22);e.exports=function(e){var t,n={},i=[];function o(i){r.has(n,i)||(n[i]=!0,t.push(i),r.each(e.successors(i),o),r.each(e.predecessors(i),o))}return r.each(e.nodes(),(function(e){t=[],o(e),t.length&&i.push(t)})),i}},function(e,t,n){var r=n(191),i=n(22);e.exports=function(e,t,n){return i.transform(e.nodes(),(function(i,o){i[o]=r(e,o,t,n)}),{})}},function(e,t,n){var r=n(22),i=n(193);e.exports=function(e){return r.filter(i(e),(function(t){return t.length>1||1===t.length&&e.hasEdge(t[0],t[0])}))}},function(e,t,n){var r=n(22);e.exports=function(e,t,n){return function(e,t,n){var r={},i=e.nodes();return i.forEach((function(e){r[e]={},r[e][e]={distance:0},i.forEach((function(t){e!==t&&(r[e][t]={distance:Number.POSITIVE_INFINITY})})),n(e).forEach((function(n){var i=n.v===e?n.w:n.v,o=t(n);r[e][i]={distance:o,predecessor:e}}))})),i.forEach((function(e){var t=r[e];i.forEach((function(n){var o=r[n];i.forEach((function(n){var r=o[e],i=t[n],a=o[n],s=r.distance+i.distance;s<a.distance&&(a.distance=s,a.predecessor=i.predecessor)}))}))})),r}(e,t||i,n||function(t){return e.outEdges(t)})};var i=r.constant(1)},function(e,t,n){var r=n(194);e.exports=function(e){try{r(e)}catch(e){if(e instanceof r.CycleException)return!1;throw e}return!0}},function(e,t,n){var r=n(195);e.exports=function(e,t){return r(e,t,"post")}},function(e,t,n){var r=n(195);e.exports=function(e,t){return r(e,t,"pre")}},function(e,t,n){var r=n(22),i=n(116),o=n(192);e.exports=function(e,t){var n,a=new i,s={},l=new o;function c(e){var r=e.v===n?e.w:e.v,i=l.priority(r);if(void 0!==i){var o=t(e);o<i&&(s[r]=n,l.decrease(r,o))}}if(0===e.nodeCount())return a;r.each(e.nodes(),(function(e){l.add(e,Number.POSITIVE_INFINITY),a.setNode(e)})),l.decrease(e.nodes()[0],0);var u=!1;for(;l.size()>0;){if(n=l.removeMin(),r.has(s,n))a.setEdge(n,s[n]);else{if(u)throw new Error("Input graph is not connected: "+e);u=!0}e.nodeEdges(n).forEach(c)}return a}},function(e,t,n){"use strict";var r=n(11),i=n(397),o=n(400),a=n(401),s=n(20).normalizeRanks,l=n(403),c=n(20).removeEmptyRanks,u=n(404),d=n(405),f=n(406),p=n(407),h=n(416),g=n(20),v=n(28).Graph;e.exports=function(e,t){var n=t&&t.debugTiming?g.time:g.notime;n("layout",(function(){var t=n(" buildLayoutGraph",(function(){return function(e){var t=new v({multigraph:!0,compound:!0}),n=C(e.graph());return t.setGraph(r.merge({},b,S(n,m),r.pick(n,y))),r.forEach(e.nodes(),(function(n){var i=C(e.node(n));t.setNode(n,r.defaults(S(i,x),w)),t.setParent(n,e.parent(n))})),r.forEach(e.edges(),(function(n){var i=C(e.edge(n));t.setEdge(n,r.merge({},A,S(i,k),r.pick(i,E)))})),t}(e)}));n(" runLayout",(function(){!function(e,t){t(" makeSpaceForEdgeLabels",(function(){!function(e){var t=e.graph();t.ranksep/=2,r.forEach(e.edges(),(function(n){var r=e.edge(n);r.minlen*=2,"c"!==r.labelpos.toLowerCase()&&("TB"===t.rankdir||"BT"===t.rankdir?r.width+=r.labeloffset:r.height+=r.labeloffset)}))}(e)})),t(" removeSelfEdges",(function(){!function(e){r.forEach(e.edges(),(function(t){if(t.v===t.w){var n=e.node(t.v);n.selfEdges||(n.selfEdges=[]),n.selfEdges.push({e:t,label:e.edge(t)}),e.removeEdge(t)}}))}(e)})),t(" acyclic",(function(){i.run(e)})),t(" nestingGraph.run",(function(){u.run(e)})),t(" rank",(function(){a(g.asNonCompoundGraph(e))})),t(" injectEdgeLabelProxies",(function(){!function(e){r.forEach(e.edges(),(function(t){var n=e.edge(t);if(n.width&&n.height){var r=e.node(t.v),i={rank:(e.node(t.w).rank-r.rank)/2+r.rank,e:t};g.addDummyNode(e,"edge-proxy",i,"_ep")}}))}(e)})),t(" removeEmptyRanks",(function(){c(e)})),t(" nestingGraph.cleanup",(function(){u.cleanup(e)})),t(" normalizeRanks",(function(){s(e)})),t(" assignRankMinMax",(function(){!function(e){var t=0;r.forEach(e.nodes(),(function(n){var i=e.node(n);i.borderTop&&(i.minRank=e.node(i.borderTop).rank,i.maxRank=e.node(i.borderBottom).rank,t=r.max(t,i.maxRank))})),e.graph().maxRank=t}(e)})),t(" removeEdgeLabelProxies",(function(){!function(e){r.forEach(e.nodes(),(function(t){var n=e.node(t);"edge-proxy"===n.dummy&&(e.edge(n.e).labelRank=n.rank,e.removeNode(t))}))}(e)})),t(" normalize.run",(function(){o.run(e)})),t(" parentDummyChains",(function(){l(e)})),t(" addBorderSegments",(function(){d(e)})),t(" order",(function(){p(e)})),t(" insertSelfEdges",(function(){!function(e){var t=g.buildLayerMatrix(e);r.forEach(t,(function(t){var n=0;r.forEach(t,(function(t,i){var o=e.node(t);o.order=i+n,r.forEach(o.selfEdges,(function(t){g.addDummyNode(e,"selfedge",{width:t.label.width,height:t.label.height,rank:o.rank,order:i+ ++n,e:t.e,label:t.label},"_se")})),delete o.selfEdges}))}))}(e)})),t(" adjustCoordinateSystem",(function(){f.adjust(e)})),t(" position",(function(){h(e)})),t(" positionSelfEdges",(function(){!function(e){r.forEach(e.nodes(),(function(t){var n=e.node(t);if("selfedge"===n.dummy){var r=e.node(n.e.v),i=r.x+r.width/2,o=r.y,a=n.x-i,s=r.height/2;e.setEdge(n.e,n.label),e.removeNode(t),n.label.points=[{x:i+2*a/3,y:o-s},{x:i+5*a/6,y:o-s},{x:i+a,y:o},{x:i+5*a/6,y:o+s},{x:i+2*a/3,y:o+s}],n.label.x=n.x,n.label.y=n.y}}))}(e)})),t(" removeBorderNodes",(function(){!function(e){r.forEach(e.nodes(),(function(t){if(e.children(t).length){var n=e.node(t),i=e.node(n.borderTop),o=e.node(n.borderBottom),a=e.node(r.last(n.borderLeft)),s=e.node(r.last(n.borderRight));n.width=Math.abs(s.x-a.x),n.height=Math.abs(o.y-i.y),n.x=a.x+n.width/2,n.y=i.y+n.height/2}})),r.forEach(e.nodes(),(function(t){"border"===e.node(t).dummy&&e.removeNode(t)}))}(e)})),t(" normalize.undo",(function(){o.undo(e)})),t(" fixupEdgeLabelCoords",(function(){!function(e){r.forEach(e.edges(),(function(t){var n=e.edge(t);if(r.has(n,"x"))switch("l"!==n.labelpos&&"r"!==n.labelpos||(n.width-=n.labeloffset),n.labelpos){case"l":n.x-=n.width/2+n.labeloffset;break;case"r":n.x+=n.width/2+n.labeloffset}}))}(e)})),t(" undoCoordinateSystem",(function(){f.undo(e)})),t(" translateGraph",(function(){!function(e){var t=Number.POSITIVE_INFINITY,n=0,i=Number.POSITIVE_INFINITY,o=0,a=e.graph(),s=a.marginx||0,l=a.marginy||0;function c(e){var r=e.x,a=e.y,s=e.width,l=e.height;t=Math.min(t,r-s/2),n=Math.max(n,r+s/2),i=Math.min(i,a-l/2),o=Math.max(o,a+l/2)}r.forEach(e.nodes(),(function(t){c(e.node(t))})),r.forEach(e.edges(),(function(t){var n=e.edge(t);r.has(n,"x")&&c(n)})),t-=s,i-=l,r.forEach(e.nodes(),(function(n){var r=e.node(n);r.x-=t,r.y-=i})),r.forEach(e.edges(),(function(n){var o=e.edge(n);r.forEach(o.points,(function(e){e.x-=t,e.y-=i})),r.has(o,"x")&&(o.x-=t),r.has(o,"y")&&(o.y-=i)})),a.width=n-t+s,a.height=o-i+l}(e)})),t(" assignNodeIntersects",(function(){!function(e){r.forEach(e.edges(),(function(t){var n,r,i=e.edge(t),o=e.node(t.v),a=e.node(t.w);i.points?(n=i.points[0],r=i.points[i.points.length-1]):(i.points=[],n=a,r=o),i.points.unshift(g.intersectRect(o,n)),i.points.push(g.intersectRect(a,r))}))}(e)})),t(" reversePoints",(function(){!function(e){r.forEach(e.edges(),(function(t){var n=e.edge(t);n.reversed&&n.points.reverse()}))}(e)})),t(" acyclic.undo",(function(){i.undo(e)}))}(t,n)})),n(" updateInputGraph",(function(){!function(e,t){r.forEach(e.nodes(),(function(n){var r=e.node(n),i=t.node(n);r&&(r.x=i.x,r.y=i.y,t.children(n).length&&(r.width=i.width,r.height=i.height))})),r.forEach(e.edges(),(function(n){var i=e.edge(n),o=t.edge(n);i.points=o.points,r.has(o,"x")&&(i.x=o.x,i.y=o.y)})),e.graph().width=t.graph().width,e.graph().height=t.graph().height}(e,t)}))}))};var m=["nodesep","edgesep","ranksep","marginx","marginy"],b={ranksep:50,edgesep:20,nodesep:50,rankdir:"tb"},y=["acyclicer","ranker","rankdir","align"],x=["width","height"],w={width:0,height:0},k=["minlen","weight","width","height","labeloffset"],A={minlen:1,weight:1,width:0,height:0,labeloffset:10,labelpos:"r"},E=["labelpos"];function S(e,t){return r.mapValues(r.pick(e,t),Number)}function C(e){var t={};return r.forEach(e,(function(e,n){t[n.toLowerCase()]=e})),t}},function(e,t,n){var r=n(149);e.exports=function(e){return r(e,5)}},function(e,t,n){var r=n(88),i=n(57),o=n(89),a=n(48),s=Object.prototype,l=s.hasOwnProperty,c=r((function(e,t){e=Object(e);var n=-1,r=t.length,c=r>2?t[2]:void 0;for(c&&o(t[0],t[1],c)&&(r=1);++n<r;)for(var u=t[n],d=a(u),f=-1,p=d.length;++f<p;){var h=d[f],g=e[h];(void 0===g||i(g,s[h])&&!l.call(e,h))&&(e[h]=u[h])}return e}));e.exports=c},function(e,t,n){var r=n(363)(n(364));e.exports=r},function(e,t,n){var r=n(35),i=n(34),o=n(41);e.exports=function(e){return function(t,n,a){var s=Object(t);if(!i(t)){var l=r(n,3);t=o(t),n=function(e){return l(s[e],e,s)}}var c=e(t,n,a);return c>-1?s[l?t[c]:c]:void 0}}},function(e,t,n){var r=n(188),i=n(35),o=n(365),a=Math.max;e.exports=function(e,t,n){var s=null==e?0:e.length;if(!s)return-1;var l=null==n?0:o(n);return l<0&&(l=a(s+l,0)),r(e,i(t,3),l)}},function(e,t,n){var r=n(196);e.exports=function(e){var t=r(e),n=t%1;return t==t?n?t-n:t:0}},function(e,t,n){var r=n(23),i=n(61),o=/^\s+|\s+$/g,a=/^[-+]0x[0-9a-f]+$/i,s=/^0b[01]+$/i,l=/^0o[0-7]+$/i,c=parseInt;e.exports=function(e){if("number"==typeof e)return e;if(i(e))return NaN;if(r(e)){var t="function"==typeof e.valueOf?e.valueOf():e;e=r(t)?t+"":t}if("string"!=typeof e)return 0===e?e:+e;e=e.replace(o,"");var n=s.test(e);return n||l.test(e)?c(e.slice(2),n?2:8):a.test(e)?NaN:+e}},function(e,t,n){var r=n(128),i=n(169),o=n(48);e.exports=function(e,t){return null==e?e:r(e,i(t),o)}},function(e,t){e.exports=function(e){var t=null==e?0:e.length;return t?e[t-1]:void 0}},function(e,t,n){var r=n(78),i=n(127),o=n(35);e.exports=function(e,t){var n={};return t=o(t,3),i(e,(function(e,i,o){r(n,i,t(e,i,o))})),n}},function(e,t,n){var r=n(132),i=n(371),o=n(49);e.exports=function(e){return e&&e.length?r(e,o,i):void 0}},function(e,t){e.exports=function(e,t){return e>t}},function(e,t,n){var r=n(373),i=n(377)((function(e,t,n){r(e,t,n)}));e.exports=i},function(e,t,n){var r=n(72),i=n(198),o=n(128),a=n(374),s=n(23),l=n(48),c=n(199);e.exports=function e(t,n,u,d,f){t!==n&&o(n,(function(o,l){if(f||(f=new r),s(o))a(t,n,l,u,e,d,f);else{var p=d?d(c(t,l),o,l+"",t,n,f):void 0;void 0===p&&(p=o),i(t,l,p)}}),l)}},function(e,t,n){var r=n(198),i=n(155),o=n(164),a=n(156),s=n(165),l=n(65),c=n(13),u=n(189),d=n(59),f=n(63),p=n(23),h=n(375),g=n(66),v=n(199),m=n(376);e.exports=function(e,t,n,b,y,x,w){var k=v(e,n),A=v(t,n),E=w.get(A);if(E)r(e,n,E);else{var S=x?x(k,A,n+"",e,t,w):void 0,C=void 0===S;if(C){var $=c(A),O=!$&&d(A),_=!$&&!O&&g(A);S=A,$||O||_?c(k)?S=k:u(k)?S=a(k):O?(C=!1,S=i(A,!0)):_?(C=!1,S=o(A,!0)):S=[]:h(A)||l(A)?(S=k,l(k)?S=m(k):p(k)&&!f(k)||(S=s(A))):C=!1}C&&(w.set(A,S),y(S,A,b,x,w),w.delete(A)),r(e,n,S)}}},function(e,t,n){var r=n(47),i=n(83),o=n(32),a=Function.prototype,s=Object.prototype,l=a.toString,c=s.hasOwnProperty,u=l.call(Object);e.exports=function(e){if(!o(e)||"[object Object]"!=r(e))return!1;var t=i(e);if(null===t)return!0;var n=c.call(t,"constructor")&&t.constructor;return"function"==typeof n&&n instanceof n&&l.call(n)==u}},function(e,t,n){var r=n(64),i=n(48);e.exports=function(e){return r(e,i(e))}},function(e,t,n){var r=n(88),i=n(89);e.exports=function(e){return r((function(t,n){var r=-1,o=n.length,a=o>1?n[o-1]:void 0,s=o>2?n[2]:void 0;for(a=e.length>3&&"function"==typeof a?(o--,a):void 0,s&&i(n[0],n[1],s)&&(a=o<3?void 0:a,o=1),t=Object(t);++r<o;){var l=n[r];l&&e(t,l,r,a)}return t}))}},function(e,t,n){var r=n(132),i=n(200),o=n(49);e.exports=function(e){return e&&e.length?r(e,o,i):void 0}},function(e,t,n){var r=n(132),i=n(35),o=n(200);e.exports=function(e,t){return e&&e.length?r(e,i(t,2),o):void 0}},function(e,t,n){var r=n(29);e.exports=function(){return r.Date.now()}},function(e,t,n){var r=n(382),i=n(385)((function(e,t){return null==e?{}:r(e,t)}));e.exports=i},function(e,t,n){var r=n(383),i=n(178);e.exports=function(e,t){return r(e,t,(function(t,n){return i(e,n)}))}},function(e,t,n){var r=n(85),i=n(384),o=n(86);e.exports=function(e,t,n){for(var a=-1,s=t.length,l={};++a<s;){var c=t[a],u=r(e,c);n(u,c)&&i(l,o(c,e),u)}return l}},function(e,t,n){var r=n(77),i=n(86),o=n(80),a=n(23),s=n(67);e.exports=function(e,t,n,l){if(!a(e))return e;for(var c=-1,u=(t=i(t,e)).length,d=u-1,f=e;null!=f&&++c<u;){var p=s(t[c]),h=n;if("__proto__"===p||"constructor"===p||"prototype"===p)return e;if(c!=d){var g=f[p];void 0===(h=l?l(g,p,f):void 0)&&(h=a(g)?g:o(t[c+1])?[]:{})}r(f,p,h),f=f[p]}return e}},function(e,t,n){var r=n(197),i=n(186),o=n(187);e.exports=function(e){return o(i(e,void 0,r),e+"")}},function(e,t,n){var r=n(387)();e.exports=r},function(e,t,n){var r=n(388),i=n(89),o=n(196);e.exports=function(e){return function(t,n,a){return a&&"number"!=typeof a&&i(t,n,a)&&(n=a=void 0),t=o(t),void 0===n?(n=t,t=0):n=o(n),a=void 0===a?t<n?1:-1:o(a),r(t,n,a,e)}}},function(e,t){var n=Math.ceil,r=Math.max;e.exports=function(e,t,i,o){for(var a=-1,s=r(n((t-e)/(i||1)),0),l=Array(s);s--;)l[o?s:++a]=e,e+=i;return l}},function(e,t,n){var r=n(131),i=n(390),o=n(88),a=n(89),s=o((function(e,t){if(null==e)return[];var n=t.length;return n>1&&a(e,t[0],t[1])?t=[]:n>2&&a(t[0],t[1],t[2])&&(t=[t[0]]),i(e,r(t,1),[])}));e.exports=s},function(e,t,n){var r=n(87),i=n(85),o=n(35),a=n(184),s=n(391),l=n(81),c=n(392),u=n(49),d=n(13);e.exports=function(e,t,n){t=t.length?r(t,(function(e){return d(e)?function(t){return i(t,1===e.length?e[0]:e)}:e})):[u];var f=-1;t=r(t,l(o));var p=a(e,(function(e,n,i){return{criteria:r(t,(function(t){return t(e)})),index:++f,value:e}}));return s(p,(function(e,t){return c(e,t,n)}))}},function(e,t){e.exports=function(e,t){var n=e.length;for(e.sort(t);n--;)e[n]=e[n].value;return e}},function(e,t,n){var r=n(393);e.exports=function(e,t,n){for(var i=-1,o=e.criteria,a=t.criteria,s=o.length,l=n.length;++i<s;){var c=r(o[i],a[i]);if(c)return i>=l?c:c*("desc"==n[i]?-1:1)}return e.index-t.index}},function(e,t,n){var r=n(61);e.exports=function(e,t){if(e!==t){var n=void 0!==e,i=null===e,o=e==e,a=r(e),s=void 0!==t,l=null===t,c=t==t,u=r(t);if(!l&&!u&&!a&&e>t||a&&s&&c&&!l&&!u||i&&s&&c||!n&&c||!o)return 1;if(!i&&!a&&!u&&e<t||u&&n&&o&&!i&&!a||l&&n&&o||!s&&o||!c)return-1}return 0}},function(e,t,n){var r=n(177),i=0;e.exports=function(e){var t=++i;return r(e)+t}},function(e,t,n){var r=n(77),i=n(396);e.exports=function(e,t){return i(e||[],t||[],r)}},function(e,t){e.exports=function(e,t,n){for(var r=-1,i=e.length,o=t.length,a={};++r<i;){var s=r<o?t[r]:void 0;n(a,e[r],s)}return a}},function(e,t,n){"use strict";var r=n(11),i=n(398);e.exports={run:function(e){var t="greedy"===e.graph().acyclicer?i(e,function(e){return function(t){return e.edge(t).weight}}(e)):function(e){var t=[],n={},i={};function o(a){r.has(i,a)||(i[a]=!0,n[a]=!0,r.forEach(e.outEdges(a),(function(e){r.has(n,e.w)?t.push(e):o(e.w)})),delete n[a])}return r.forEach(e.nodes(),o),t}(e);r.forEach(t,(function(t){var n=e.edge(t);e.removeEdge(t),n.forwardName=t.name,n.reversed=!0,e.setEdge(t.w,t.v,n,r.uniqueId("rev"))}))},undo:function(e){r.forEach(e.edges(),(function(t){var n=e.edge(t);if(n.reversed){e.removeEdge(t);var r=n.forwardName;delete n.reversed,delete n.forwardName,e.setEdge(t.w,t.v,n,r)}}))}}},function(e,t,n){var r=n(11),i=n(28).Graph,o=n(399);e.exports=function(e,t){if(e.nodeCount()<=1)return[];var n=function(e,t){var n=new i,a=0,s=0;r.forEach(e.nodes(),(function(e){n.setNode(e,{v:e,in:0,out:0})})),r.forEach(e.edges(),(function(e){var r=n.edge(e.v,e.w)||0,i=t(e),o=r+i;n.setEdge(e.v,e.w,o),s=Math.max(s,n.node(e.v).out+=i),a=Math.max(a,n.node(e.w).in+=i)}));var c=r.range(s+a+3).map((function(){return new o})),u=a+1;return r.forEach(n.nodes(),(function(e){l(c,u,n.node(e))})),{graph:n,buckets:c,zeroIdx:u}}(e,t||a),c=function(e,t,n){var r,i=[],o=t[t.length-1],a=t[0];for(;e.nodeCount();){for(;r=a.dequeue();)s(e,t,n,r);for(;r=o.dequeue();)s(e,t,n,r);if(e.nodeCount())for(var l=t.length-2;l>0;--l)if(r=t[l].dequeue()){i=i.concat(s(e,t,n,r,!0));break}}return i}(n.graph,n.buckets,n.zeroIdx);return r.flatten(r.map(c,(function(t){return e.outEdges(t.v,t.w)})),!0)};var a=r.constant(1);function s(e,t,n,i,o){var a=o?[]:void 0;return r.forEach(e.inEdges(i.v),(function(r){var i=e.edge(r),s=e.node(r.v);o&&a.push({v:r.v,w:r.w}),s.out-=i,l(t,n,s)})),r.forEach(e.outEdges(i.v),(function(r){var i=e.edge(r),o=r.w,a=e.node(o);a.in-=i,l(t,n,a)})),e.removeNode(i.v),a}function l(e,t,n){n.out?n.in?e[n.out-n.in+t].enqueue(n):e[e.length-1].enqueue(n):e[0].enqueue(n)}},function(e,t){function n(){var e={};e._next=e._prev=e,this._sentinel=e}function r(e){e._prev._next=e._next,e._next._prev=e._prev,delete e._next,delete e._prev}function i(e,t){if("_next"!==e&&"_prev"!==e)return t}e.exports=n,n.prototype.dequeue=function(){var e=this._sentinel,t=e._prev;if(t!==e)return r(t),t},n.prototype.enqueue=function(e){var t=this._sentinel;e._prev&&e._next&&r(e),e._next=t._next,t._next._prev=e,t._next=e,e._prev=t},n.prototype.toString=function(){for(var e=[],t=this._sentinel,n=t._prev;n!==t;)e.push(JSON.stringify(n,i)),n=n._prev;return"["+e.join(", ")+"]"}},function(e,t,n){"use strict";var r=n(11),i=n(20);e.exports={run:function(e){e.graph().dummyChains=[],r.forEach(e.edges(),(function(t){!function(e,t){var n,r,o,a=t.v,s=e.node(a).rank,l=t.w,c=e.node(l).rank,u=t.name,d=e.edge(t),f=d.labelRank;if(c===s+1)return;for(e.removeEdge(t),o=0,++s;s<c;++o,++s)d.points=[],r={width:0,height:0,edgeLabel:d,edgeObj:t,rank:s},n=i.addDummyNode(e,"edge",r,"_d"),s===f&&(r.width=d.width,r.height=d.height,r.dummy="edge-label",r.labelpos=d.labelpos),e.setEdge(a,n,{weight:d.weight},u),0===o&&e.graph().dummyChains.push(n),a=n;e.setEdge(a,l,{weight:d.weight},u)}(e,t)}))},undo:function(e){r.forEach(e.graph().dummyChains,(function(t){var n,r=e.node(t),i=r.edgeLabel;for(e.setEdge(r.edgeObj,i);r.dummy;)n=e.successors(t)[0],e.removeNode(t),i.points.push({x:r.x,y:r.y}),"edge-label"===r.dummy&&(i.x=r.x,i.y=r.y,i.width=r.width,i.height=r.height),t=n,r=e.node(t)}))}}},function(e,t,n){"use strict";var r=n(90).longestPath,i=n(201),o=n(402);e.exports=function(e){switch(e.graph().ranker){case"network-simplex":s(e);break;case"tight-tree":!function(e){r(e),i(e)}(e);break;case"longest-path":a(e);break;default:s(e)}};var a=r;function s(e){o(e)}},function(e,t,n){"use strict";var r=n(11),i=n(201),o=n(90).slack,a=n(90).longestPath,s=n(28).alg.preorder,l=n(28).alg.postorder,c=n(20).simplify;function u(e){e=c(e),a(e);var t,n=i(e);for(p(n),d(n,e);t=g(n);)m(n,e,t,v(n,e,t))}function d(e,t){var n=l(e,e.nodes());n=n.slice(0,n.length-1),r.forEach(n,(function(n){!function(e,t,n){var r=e.node(n).parent;e.edge(n,r).cutvalue=f(e,t,n)}(e,t,n)}))}function f(e,t,n){var i=e.node(n).parent,o=!0,a=t.edge(n,i),s=0;return a||(o=!1,a=t.edge(i,n)),s=a.weight,r.forEach(t.nodeEdges(n),(function(r){var a,l,c=r.v===n,u=c?r.w:r.v;if(u!==i){var d=c===o,f=t.edge(r).weight;if(s+=d?f:-f,a=n,l=u,e.hasEdge(a,l)){var p=e.edge(n,u).cutvalue;s+=d?-p:p}}})),s}function p(e,t){arguments.length<2&&(t=e.nodes()[0]),h(e,{},1,t)}function h(e,t,n,i,o){var a=n,s=e.node(i);return t[i]=!0,r.forEach(e.neighbors(i),(function(o){r.has(t,o)||(n=h(e,t,n,o,i))})),s.low=a,s.lim=n++,o?s.parent=o:delete s.parent,n}function g(e){return r.find(e.edges(),(function(t){return e.edge(t).cutvalue<0}))}function v(e,t,n){var i=n.v,a=n.w;t.hasEdge(i,a)||(i=n.w,a=n.v);var s=e.node(i),l=e.node(a),c=s,u=!1;s.lim>l.lim&&(c=l,u=!0);var d=r.filter(t.edges(),(function(t){return u===b(e,e.node(t.v),c)&&u!==b(e,e.node(t.w),c)}));return r.minBy(d,(function(e){return o(t,e)}))}function m(e,t,n,i){var o=n.v,a=n.w;e.removeEdge(o,a),e.setEdge(i.v,i.w,{}),p(e),d(e,t),function(e,t){var n=r.find(e.nodes(),(function(e){return!t.node(e).parent})),i=s(e,n);i=i.slice(1),r.forEach(i,(function(n){var r=e.node(n).parent,i=t.edge(n,r),o=!1;i||(i=t.edge(r,n),o=!0),t.node(n).rank=t.node(r).rank+(o?i.minlen:-i.minlen)}))}(e,t)}function b(e,t,n){return n.low<=t.lim&&t.lim<=n.lim}e.exports=u,u.initLowLimValues=p,u.initCutValues=d,u.calcCutValue=f,u.leaveEdge=g,u.enterEdge=v,u.exchangeEdges=m},function(e,t,n){var r=n(11);e.exports=function(e){var t=function(e){var t={},n=0;function i(o){var a=n;r.forEach(e.children(o),i),t[o]={low:a,lim:n++}}return r.forEach(e.children(),i),t}(e);r.forEach(e.graph().dummyChains,(function(n){for(var r=e.node(n),i=r.edgeObj,o=function(e,t,n,r){var i,o,a=[],s=[],l=Math.min(t[n].low,t[r].low),c=Math.max(t[n].lim,t[r].lim);i=n;do{i=e.parent(i),a.push(i)}while(i&&(t[i].low>l||c>t[i].lim));o=i,i=r;for(;(i=e.parent(i))!==o;)s.push(i);return{path:a.concat(s.reverse()),lca:o}}(e,t,i.v,i.w),a=o.path,s=o.lca,l=0,c=a[l],u=!0;n!==i.w;){if(r=e.node(n),u){for(;(c=a[l])!==s&&e.node(c).maxRank<r.rank;)l++;c===s&&(u=!1)}if(!u){for(;l<a.length-1&&e.node(c=a[l+1]).minRank<=r.rank;)l++;c=a[l]}e.setParent(n,c),n=e.successors(n)[0]}}))}},function(e,t,n){var r=n(11),i=n(20);e.exports={run:function(e){var t=i.addDummyNode(e,"root",{},"_root"),n=function(e){var t={};return r.forEach(e.children(),(function(n){!function n(i,o){var a=e.children(i);a&&a.length&&r.forEach(a,(function(e){n(e,o+1)}));t[i]=o}(n,1)})),t}(e),o=r.max(r.values(n))-1,a=2*o+1;e.graph().nestingRoot=t,r.forEach(e.edges(),(function(t){e.edge(t).minlen*=a}));var s=function(e){return r.reduce(e.edges(),(function(t,n){return t+e.edge(n).weight}),0)}(e)+1;r.forEach(e.children(),(function(l){!function e(t,n,o,a,s,l,c){var u=t.children(c);if(!u.length)return void(c!==n&&t.setEdge(n,c,{weight:0,minlen:o}));var d=i.addBorderNode(t,"_bt"),f=i.addBorderNode(t,"_bb"),p=t.node(c);t.setParent(d,c),p.borderTop=d,t.setParent(f,c),p.borderBottom=f,r.forEach(u,(function(r){e(t,n,o,a,s,l,r);var i=t.node(r),u=i.borderTop?i.borderTop:r,p=i.borderBottom?i.borderBottom:r,h=i.borderTop?a:2*a,g=u!==p?1:s-l[c]+1;t.setEdge(d,u,{weight:h,minlen:g,nestingEdge:!0}),t.setEdge(p,f,{weight:h,minlen:g,nestingEdge:!0})})),t.parent(c)||t.setEdge(n,d,{weight:0,minlen:s+l[c]})}(e,t,a,s,o,n,l)})),e.graph().nodeRankFactor=a},cleanup:function(e){var t=e.graph();e.removeNode(t.nestingRoot),delete t.nestingRoot,r.forEach(e.edges(),(function(t){e.edge(t).nestingEdge&&e.removeEdge(t)}))}}},function(e,t,n){var r=n(11),i=n(20);function o(e,t,n,r,o,a){var s={width:0,height:0,rank:a,borderType:t},l=o[t][a-1],c=i.addDummyNode(e,"border",s,n);o[t][a]=c,e.setParent(c,r),l&&e.setEdge(l,c,{weight:1})}e.exports=function(e){r.forEach(e.children(),(function t(n){var i=e.children(n),a=e.node(n);if(i.length&&r.forEach(i,t),r.has(a,"minRank")){a.borderLeft=[],a.borderRight=[];for(var s=a.minRank,l=a.maxRank+1;s<l;++s)o(e,"borderLeft","_bl",n,a,s),o(e,"borderRight","_br",n,a,s)}}))}},function(e,t,n){"use strict";var r=n(11);function i(e){r.forEach(e.nodes(),(function(t){o(e.node(t))})),r.forEach(e.edges(),(function(t){o(e.edge(t))}))}function o(e){var t=e.width;e.width=e.height,e.height=t}function a(e){e.y=-e.y}function s(e){var t=e.x;e.x=e.y,e.y=t}e.exports={adjust:function(e){var t=e.graph().rankdir.toLowerCase();"lr"!==t&&"rl"!==t||i(e)},undo:function(e){var t=e.graph().rankdir.toLowerCase();"bt"!==t&&"rl"!==t||function(e){r.forEach(e.nodes(),(function(t){a(e.node(t))})),r.forEach(e.edges(),(function(t){var n=e.edge(t);r.forEach(n.points,a),r.has(n,"y")&&a(n)}))}(e);"lr"!==t&&"rl"!==t||(!function(e){r.forEach(e.nodes(),(function(t){s(e.node(t))})),r.forEach(e.edges(),(function(t){var n=e.edge(t);r.forEach(n.points,s),r.has(n,"x")&&s(n)}))}(e),i(e))}}},function(e,t,n){"use strict";var r=n(11),i=n(408),o=n(409),a=n(410),s=n(414),l=n(415),c=n(28).Graph,u=n(20);function d(e,t,n){return r.map(t,(function(t){return s(e,t,n)}))}function f(e,t){var n=new c;r.forEach(e,(function(e){var i=e.graph().root,o=a(e,i,n,t);r.forEach(o.vs,(function(t,n){e.node(t).order=n})),l(e,n,o.vs)}))}function p(e,t){r.forEach(t,(function(t){r.forEach(t,(function(t,n){e.node(t).order=n}))}))}e.exports=function(e){var t=u.maxRank(e),n=d(e,r.range(1,t+1),"inEdges"),a=d(e,r.range(t-1,-1,-1),"outEdges"),s=i(e);p(e,s);for(var l,c=Number.POSITIVE_INFINITY,h=0,g=0;g<4;++h,++g){f(h%2?n:a,h%4>=2),s=u.buildLayerMatrix(e);var v=o(e,s);v<c&&(g=0,l=r.cloneDeep(s),c=v)}p(e,l)}},function(e,t,n){"use strict";var r=n(11);e.exports=function(e){var t={},n=r.filter(e.nodes(),(function(t){return!e.children(t).length})),i=r.max(r.map(n,(function(t){return e.node(t).rank}))),o=r.map(r.range(i+1),(function(){return[]}));var a=r.sortBy(n,(function(t){return e.node(t).rank}));return r.forEach(a,(function n(i){if(r.has(t,i))return;t[i]=!0;var a=e.node(i);o[a.rank].push(i),r.forEach(e.successors(i),n)})),o}},function(e,t,n){"use strict";var r=n(11);function i(e,t,n){for(var i=r.zipObject(n,r.map(n,(function(e,t){return t}))),o=r.flatten(r.map(t,(function(t){return r.sortBy(r.map(e.outEdges(t),(function(t){return{pos:i[t.w],weight:e.edge(t).weight}})),"pos")})),!0),a=1;a<n.length;)a<<=1;var s=2*a-1;a-=1;var l=r.map(new Array(s),(function(){return 0})),c=0;return r.forEach(o.forEach((function(e){var t=e.pos+a;l[t]+=e.weight;for(var n=0;t>0;)t%2&&(n+=l[t+1]),l[t=t-1>>1]+=e.weight;c+=e.weight*n}))),c}e.exports=function(e,t){for(var n=0,r=1;r<t.length;++r)n+=i(e,t[r-1],t[r]);return n}},function(e,t,n){var r=n(11),i=n(411),o=n(412),a=n(413);e.exports=function e(t,n,s,l){var c=t.children(n),u=t.node(n),d=u?u.borderLeft:void 0,f=u?u.borderRight:void 0,p={};d&&(c=r.filter(c,(function(e){return e!==d&&e!==f})));var h=i(t,c);r.forEach(h,(function(n){if(t.children(n.v).length){var i=e(t,n.v,s,l);p[n.v]=i,r.has(i,"barycenter")&&(o=n,a=i,r.isUndefined(o.barycenter)?(o.barycenter=a.barycenter,o.weight=a.weight):(o.barycenter=(o.barycenter*o.weight+a.barycenter*a.weight)/(o.weight+a.weight),o.weight+=a.weight))}var o,a}));var g=o(h,s);!function(e,t){r.forEach(e,(function(e){e.vs=r.flatten(e.vs.map((function(e){return t[e]?t[e].vs:e})),!0)}))}(g,p);var v=a(g,l);if(d&&(v.vs=r.flatten([d,v.vs,f],!0),t.predecessors(d).length)){var m=t.node(t.predecessors(d)[0]),b=t.node(t.predecessors(f)[0]);r.has(v,"barycenter")||(v.barycenter=0,v.weight=0),v.barycenter=(v.barycenter*v.weight+m.order+b.order)/(v.weight+2),v.weight+=2}return v}},function(e,t,n){var r=n(11);e.exports=function(e,t){return r.map(t,(function(t){var n=e.inEdges(t);if(n.length){var i=r.reduce(n,(function(t,n){var r=e.edge(n),i=e.node(n.v);return{sum:t.sum+r.weight*i.order,weight:t.weight+r.weight}}),{sum:0,weight:0});return{v:t,barycenter:i.sum/i.weight,weight:i.weight}}return{v:t}}))}},function(e,t,n){"use strict";var r=n(11);e.exports=function(e,t){var n={};return r.forEach(e,(function(e,t){var i=n[e.v]={indegree:0,in:[],out:[],vs:[e.v],i:t};r.isUndefined(e.barycenter)||(i.barycenter=e.barycenter,i.weight=e.weight)})),r.forEach(t.edges(),(function(e){var t=n[e.v],i=n[e.w];r.isUndefined(t)||r.isUndefined(i)||(i.indegree++,t.out.push(n[e.w]))})),function(e){var t=[];function n(e){return function(t){t.merged||(r.isUndefined(t.barycenter)||r.isUndefined(e.barycenter)||t.barycenter>=e.barycenter)&&function(e,t){var n=0,r=0;e.weight&&(n+=e.barycenter*e.weight,r+=e.weight);t.weight&&(n+=t.barycenter*t.weight,r+=t.weight);e.vs=t.vs.concat(e.vs),e.barycenter=n/r,e.weight=r,e.i=Math.min(t.i,e.i),t.merged=!0}(e,t)}}function i(t){return function(n){n.in.push(t),0==--n.indegree&&e.push(n)}}for(;e.length;){var o=e.pop();t.push(o),r.forEach(o.in.reverse(),n(o)),r.forEach(o.out,i(o))}return r.map(r.filter(t,(function(e){return!e.merged})),(function(e){return r.pick(e,["vs","i","barycenter","weight"])}))}(r.filter(n,(function(e){return!e.indegree})))}},function(e,t,n){var r=n(11),i=n(20);function o(e,t,n){for(var i;t.length&&(i=r.last(t)).i<=n;)t.pop(),e.push(i.vs),n++;return n}e.exports=function(e,t){var n=i.partition(e,(function(e){return r.has(e,"barycenter")})),a=n.lhs,s=r.sortBy(n.rhs,(function(e){return-e.i})),l=[],c=0,u=0,d=0;a.sort((f=!!t,function(e,t){return e.barycenter<t.barycenter?-1:e.barycenter>t.barycenter?1:f?t.i-e.i:e.i-t.i})),d=o(l,s,d),r.forEach(a,(function(e){d+=e.vs.length,l.push(e.vs),c+=e.barycenter*e.weight,u+=e.weight,d=o(l,s,d)}));var f;var p={vs:r.flatten(l,!0)};u&&(p.barycenter=c/u,p.weight=u);return p}},function(e,t,n){var r=n(11),i=n(28).Graph;e.exports=function(e,t,n){var o=function(e){var t;for(;e.hasNode(t=r.uniqueId("_root")););return t}(e),a=new i({compound:!0}).setGraph({root:o}).setDefaultNodeLabel((function(t){return e.node(t)}));return r.forEach(e.nodes(),(function(i){var s=e.node(i),l=e.parent(i);(s.rank===t||s.minRank<=t&&t<=s.maxRank)&&(a.setNode(i),a.setParent(i,l||o),r.forEach(e[n](i),(function(t){var n=t.v===i?t.w:t.v,o=a.edge(n,i),s=r.isUndefined(o)?0:o.weight;a.setEdge(n,i,{weight:e.edge(t).weight+s})})),r.has(s,"minRank")&&a.setNode(i,{borderLeft:s.borderLeft[t],borderRight:s.borderRight[t]}))})),a}},function(e,t,n){var r=n(11);e.exports=function(e,t,n){var i,o={};r.forEach(n,(function(n){for(var r,a,s=e.parent(n);s;){if((r=e.parent(s))?(a=o[r],o[r]=s):(a=i,i=s),a&&a!==s)return void t.setEdge(a,s);s=r}}))}},function(e,t,n){"use strict";var r=n(11),i=n(20),o=n(417).positionX;e.exports=function(e){(function(e){var t=i.buildLayerMatrix(e),n=e.graph().ranksep,o=0;r.forEach(t,(function(t){var i=r.max(r.map(t,(function(t){return e.node(t).height})));r.forEach(t,(function(t){e.node(t).y=o+i/2})),o+=i+n}))})(e=i.asNonCompoundGraph(e)),r.forEach(o(e),(function(t,n){e.node(n).x=t}))}},function(e,t,n){"use strict";var r=n(11),i=n(28).Graph,o=n(20);function a(e,t){var n={};return r.reduce(t,(function(t,i){var o=0,a=0,s=t.length,c=r.last(i);return r.forEach(i,(function(t,u){var d=function(e,t){if(e.node(t).dummy)return r.find(e.predecessors(t),(function(t){return e.node(t).dummy}))}(e,t),f=d?e.node(d).order:s;(d||t===c)&&(r.forEach(i.slice(a,u+1),(function(t){r.forEach(e.predecessors(t),(function(r){var i=e.node(r),a=i.order;!(a<o||f<a)||i.dummy&&e.node(t).dummy||l(n,r,t)}))})),a=u+1,o=f)})),i})),n}function s(e,t){var n={};function i(t,i,o,a,s){var c;r.forEach(r.range(i,o),(function(i){c=t[i],e.node(c).dummy&&r.forEach(e.predecessors(c),(function(t){var r=e.node(t);r.dummy&&(r.order<a||r.order>s)&&l(n,t,c)}))}))}return r.reduce(t,(function(t,n){var o,a=-1,s=0;return r.forEach(n,(function(r,l){if("border"===e.node(r).dummy){var c=e.predecessors(r);c.length&&(o=e.node(c[0]).order,i(n,s,l,a,o),s=l,a=o)}i(n,s,n.length,o,t.length)})),n})),n}function l(e,t,n){if(t>n){var r=t;t=n,n=r}var i=e[t];i||(e[t]=i={}),i[n]=!0}function c(e,t,n){if(t>n){var i=t;t=n,n=i}return r.has(e[t],n)}function u(e,t,n,i){var o={},a={},s={};return r.forEach(t,(function(e){r.forEach(e,(function(e,t){o[e]=e,a[e]=e,s[e]=t}))})),r.forEach(t,(function(e){var t=-1;r.forEach(e,(function(e){var l=i(e);if(l.length)for(var u=((l=r.sortBy(l,(function(e){return s[e]}))).length-1)/2,d=Math.floor(u),f=Math.ceil(u);d<=f;++d){var p=l[d];a[e]===e&&t<s[p]&&!c(n,e,p)&&(a[p]=e,a[e]=o[e]=o[p],t=s[p])}}))})),{root:o,align:a}}function d(e,t,n,o,a){var s={},l=function(e,t,n,o){var a=new i,s=e.graph(),l=function(e,t,n){return function(i,o,a){var s,l=i.node(o),c=i.node(a),u=0;if(u+=l.width/2,r.has(l,"labelpos"))switch(l.labelpos.toLowerCase()){case"l":s=-l.width/2;break;case"r":s=l.width/2}if(s&&(u+=n?s:-s),s=0,u+=(l.dummy?t:e)/2,u+=(c.dummy?t:e)/2,u+=c.width/2,r.has(c,"labelpos"))switch(c.labelpos.toLowerCase()){case"l":s=c.width/2;break;case"r":s=-c.width/2}return s&&(u+=n?s:-s),s=0,u}}(s.nodesep,s.edgesep,o);return r.forEach(t,(function(t){var i;r.forEach(t,(function(t){var r=n[t];if(a.setNode(r),i){var o=n[i],s=a.edge(o,r);a.setEdge(o,r,Math.max(l(e,t,i),s||0))}i=t}))})),a}(e,t,n,a),c=a?"borderLeft":"borderRight";function u(e,t){for(var n=l.nodes(),r=n.pop(),i={};r;)i[r]?e(r):(i[r]=!0,n.push(r),n=n.concat(t(r))),r=n.pop()}return u((function(e){s[e]=l.inEdges(e).reduce((function(e,t){return Math.max(e,s[t.v]+l.edge(t))}),0)}),l.predecessors.bind(l)),u((function(t){var n=l.outEdges(t).reduce((function(e,t){return Math.min(e,s[t.w]-l.edge(t))}),Number.POSITIVE_INFINITY),r=e.node(t);n!==Number.POSITIVE_INFINITY&&r.borderType!==c&&(s[t]=Math.max(s[t],n))}),l.successors.bind(l)),r.forEach(o,(function(e){s[e]=s[n[e]]})),s}function f(e,t){return r.minBy(r.values(t),(function(t){var n=Number.NEGATIVE_INFINITY,i=Number.POSITIVE_INFINITY;return r.forIn(t,(function(t,r){var o=function(e,t){return e.node(t).width}(e,r)/2;n=Math.max(t+o,n),i=Math.min(t-o,i)})),n-i}))}function p(e,t){var n=r.values(t),i=r.min(n),o=r.max(n);r.forEach(["u","d"],(function(n){r.forEach(["l","r"],(function(a){var s,l=n+a,c=e[l];if(c!==t){var u=r.values(c);(s="l"===a?i-r.min(u):o-r.max(u))&&(e[l]=r.mapValues(c,(function(e){return e+s})))}}))}))}function h(e,t){return r.mapValues(e.ul,(function(n,i){if(t)return e[t.toLowerCase()][i];var o=r.sortBy(r.map(e,i));return(o[1]+o[2])/2}))}e.exports={positionX:function(e){var t,n=o.buildLayerMatrix(e),i=r.merge(a(e,n),s(e,n)),l={};r.forEach(["u","d"],(function(o){t="u"===o?n:r.values(n).reverse(),r.forEach(["l","r"],(function(n){"r"===n&&(t=r.map(t,(function(e){return r.values(e).reverse()})));var a=("u"===o?e.predecessors:e.successors).bind(e),s=u(e,t,i,a),c=d(e,t,s.root,s.align,"r"===n);"r"===n&&(c=r.mapValues(c,(function(e){return-e}))),l[o+n]=c}))}));var c=f(e,l);return p(l,c),h(l,e.graph().align)},findType1Conflicts:a,findType2Conflicts:s,addConflict:l,hasConflict:c,verticalAlignment:u,horizontalCompaction:d,alignCoordinates:p,findSmallestWidthAlignment:f,balance:h}},function(e,t,n){var r=n(11),i=n(20),o=n(28).Graph;e.exports={debugOrdering:function(e){var t=i.buildLayerMatrix(e),n=new o({compound:!0,multigraph:!0}).setGraph({});return r.forEach(e.nodes(),(function(t){n.setNode(t,{label:t}),n.setParent(t,"layer"+e.node(t).rank)})),r.forEach(e.edges(),(function(e){n.setEdge(e.v,e.w,{},e.name)})),r.forEach(t,(function(e,t){var i="layer"+t;n.setNode(i,{rank:"same"}),r.reduce(e,(function(e,t){return n.setEdge(e,t,{style:"invis"}),t}))})),n}}},function(e,t){e.exports="0.8.5"},function(e,t,n){"use strict";const r=n(421);angular.module("dbt").directive("modelTree",[function(){return{scope:{tree:"="},templateUrl:r,link:function(e){e.nav_selected="project"}}}])},function(e,t){var n="/components/model_tree/model_tree.html";window.angular.module("ng").run(["$templateCache",function(e){e.put(n,'<style>\n.menu ul ul {\n margin-left: 12px;\n}\n</style>\n\n<div class="menu">\n <ul>\n <li>\n <a ui-sref="dbt.overview()" class="menu-link menu-main">\n Overview\n </a>\n </li>\n\n <li>\n <div class="switches">\n <div class="switch ">\n <span\n class="switch-label btn btn-sm"\n ng-class="{active: (nav_selected == \'project\')}"\n ng-click="nav_selected = \'project\'">\n <svg class="icn menu-icon-on"><use xlink:href="#icn-dir-on"></use></svg>\n Project\n </span>\n </div>\n <div class="switch">\n <span\n class="switch-label btn btn-sm"\n ng-class="{active: (nav_selected == \'database\')}"\n ng-click="nav_selected = \'database\'">\n <svg class="icn menu-icon-on"><use xlink:href="#icn-tree-on"></use></svg>\n Database\n </span>\n </div>\n </div>\n </li>\n\n <li>\n <div class="menu" ng-show="nav_selected == \'project\'">\n <div ng-show="tree.sources.length > 0">\n <strong>Sources</strong>\n <ul style="display: block">\n <model-tree-line\n item="item"\n resource-type="source"\n ng-repeat="item in tree.sources"></source-tree-line>\n </ul>\n <br />\n </div>\n\n <div ng-show="tree.exposures.length > 0">\n <strong>Exposures</strong>\n <ul style="display: block">\n <model-tree-line\n item="item"\n resource-type="exposure"\n ng-repeat="item in tree.exposures"></model-tree-line>\n </ul>\n <br />\n </div>\n \n <div ng-show="tree.metrics.length > 0">\n <strong>Metrics</strong>\n <ul style="display: block">\n <model-tree-line\n item="item"\n resource-type="metric"\n ng-repeat="item in tree.metrics"></model-tree-line>\n </ul>\n <br />\n </div>\n\n <strong>Projects</strong>\n <ul>\n <model-tree-line\n item="item"\n resource-type="model"\n ng-repeat="item in tree.project"></model-tree-line>\n </ul>\n </div>\n </li>\n\n <li>\n <div class="menu" ng-show="nav_selected == \'database\'">\n <strong>Tables and Views</strong>\n <ul>\n <model-tree-line\n item="item"\n resource-type="model"\n ng-repeat="item in tree.database"></model-tree-line>\n </ul>\n </div>\n </li>\n </ul>\n</div>\n')}]),e.exports=n},function(e,t,n){"use strict";const r=n(423),i=n(21);n(424),angular.module("dbt").directive("modelTreeLine",["$state",function(e){return{scope:{item:"=",depth:"<",resourceType:"@"},replace:!0,templateUrl:r,link:function(t,n,r,o){t.depth||(t.depth=0);var a=t.item.name,s=i.last(a,15).join(""),l=i.initial(a,s.length).join("");t.name={name:a,start:l,end:s},t.name_start=l,t.name_end=s,t.onFolderClick=function(n){if(n.active=!n.active,"source"==t.resourceType){var r=n.name;e.go("dbt.source_list",{source:r})}else 0===t.depth&&"database"!==n.type&&e.go("dbt.project_overview",{project_name:n.name})},t.activate=function(n){t.$emit("clearSearch"),n.active=!0;var r="dbt."+n.node.resource_type;e.go(r,{unique_id:n.unique_id})},t.getIcon=function(e,t){return"#"+{header:{on:"icn-down",off:"icn-right"},database:{on:"icn-db-on",off:"icn-db"},schema:{on:"icn-tree-on",off:"icn-tree"},table:{on:"icn-doc-on",off:"icn-doc"},folder:{on:"icn-dir-on",off:"icn-dir"},file:{on:"icn-doc-on",off:"icn-doc"}}[e][t]},t.getClass=function(e){return{active:e.active,"menu-tree":"header"==e.type||"schema"==e.type||"folder"==e.type,"menu-main":"header"==e.type,"menu-node":"file"==e.type||"table"==e.type}}}}}])},function(e,t){var n="/components/model_tree/model_tree_line.html";window.angular.module("ng").run(["$templateCache",function(e){e.put(n,'<li class=\'unselectable\'>\n\n <a ng-if="!item.unique_id"\n class=\'unselectable\'\n ng-class="getClass(item)"\n ng-click="onFolderClick(item)">\n <span class="filename">\n <span class="filename-normal">\n <svg class="icn menu-icon-on"><use xlink:href="{{ getIcon(item.type, \'on\') }}"></use></svg>\n <svg class="icn menu-icon-off"><use xlink:href="{{ getIcon(item.type, \'off\') }}"></use></svg>\n </span>\n <span class="filename-ellip">{{name.start}}</span>\n <span class="filename-normal">{{name.end}}</span>\n </span>\n </a>\n\n <a ng-if="item.unique_id"\n class=\'unselectable\'\n ng-class="getClass(item)"\n ng-click="activate(item)"\n data-nav-unique-id="{{ item.unique_id }}"\n title="{{ name.name }}">\n <span class="filename">\n <span class="filename-normal">\n <svg class="icn menu-icon-on"><use xlink:href="{{ getIcon(item.type, \'on\') }}"></use></svg>\n <svg class="icn menu-icon-off"><use xlink:href="{{ getIcon(item.type, \'off\') }}"></use></svg>\n </span>\n <span class="filename-ellip">{{name.start}}</span>\n <span class="filename-normal">{{name.end}}</span>\n </span>\n </a>\n\n <ul ng-if="item.items">\n <model-tree-line\n resource-type="{{ resourceType }}"\n item="subitem"\n depth="depth + 1"\n ng-repeat="subitem in item.items" />\n </ul>\n</li>\n')}]),e.exports=n},function(e,t,n){var r=n(425);"string"==typeof r&&(r=[[e.i,r,""]]);var i={hmr:!0,transform:void 0,insertInto:void 0};n(40)(r,i);r.locals&&(e.exports=r.locals)},function(e,t,n){(e.exports=n(39)(!1)).push([e.i,"\n.unselectable{\n -webkit-user-select: none;\n -moz-user-select: none;\n -ms-user-select: none;\n user-select: none;\n}\n",""])},function(e,t,n){"use strict";const r=n(9),i=n(427);n(31);n(206),r.module("dbt").directive("docsSearch",["$sce","project",function(e,t){return{scope:{query:"=",results:"=",onSelect:"&"},replace:!0,templateUrl:i,link:function(n){n.max_results=20,n.show_all=!1,n.max_results_columns=3,n.limit_columns={},n.checkboxStatus={show_names:!1,show_descriptions:!1,show_columns:!1,show_code:!1,show_tags:!1},n.limit_search=function(e,t,r){return t<n.max_results||n.show_all},n.getState=function(e){return"dbt."+e.resource_type},n.getModelName=function(e){return"source"==e.resource_type?e.source_name+"."+e.name:"macro"==e.resource_type?e.package_name+"."+e.name:e.name};n.$watchGroup(["query","checkboxStatus.show_names","checkboxStatus.show_descriptions","checkboxStatus.show_columns","checkboxStatus.show_code","checkboxStatus.show_tags"],(function(){n.results=function(e,t){if(!_.some(_.values(t)))return e;let n=[],r=[];const{show_names:i,show_descriptions:o,show_columns:a,show_code:s,show_tags:l}=t;return _.each(e,(function(e){_.each(e.matches,(function(t){r.includes(e.model.unique_id)||(i&&"name"===t.key||o&&"description"===t.key||a&&"columns"===t.key||s&&"raw_sql"===t.key||l&&"tags"===t.key)&&(r.push(e.model.unique_id),n.push(e))}))})),n}(t.search(n.query),n.checkboxStatus)})),n.shorten=function(e){if(null!=e&&e.length>0){let t=e.replace(/\s+/g," "),r=t.search(n.query),i=r-75<0?0:r-75,o=r+75>t.length?t.length:r+75;return"..."+t.substring(i,o)+"..."}return e},n.highlight=function(t){return n.query&&t?e.trustAsHtml(t.replace(new RegExp(n.query,"gi"),'<span class="search-result-match">$&</span>')):e.trustAsHtml(t)},n.$watch("query",(function(e,t){0==e.length&&(n.show_all=!1,n.limit_columns={})})),n.columnFilter=function(e){var t=[];for(var r in e)-1!=r.toLowerCase().indexOf(n.query.toLowerCase())&&t.push(r);return t},n.limitColumns=function(e){return void 0!==n.limit_columns[e]?n.limit_columns[e]:3}}}}])},function(e,t){var n="/components/search/search.html";window.angular.module("ng").run(["$templateCache",function(e){e.put(n,'<div class="app-scroll">\n <style>\n .search-result-match {\n background-color: #eee;\n }\n .spacing {\n margin-right: 0.25em;\n }\n .sub-results {\n margin-left: 36px;\n }\n </style>\n <div class="app-title">\n <div class="app-frame app-pad">\n <h1>\n <span class="break">{{ query }}</span>\n <small><span>{{ results.length }}</span> search results</small>\n </h1>\n <input type="checkbox" id="name" ng-model="checkboxStatus.show_names" ng-click="filterResults(results, checkboxStatus)" style = "margin-left:10px;margin-right:5px">\n <label for="name" style="margin-right:25px">Name</label> \n <input type="checkbox" id="desc" ng-model="checkboxStatus.show_descriptions" ng-click = "filterResults(results, checkboxStatus)" style = "margin-right:5px">\n <label for="desc" style="margin-right:25px;">Description</label> \n <input type="checkbox" id="column" ng-model="checkboxStatus.show_columns" ng-click = "filterResults(results, checkboxStatus)" style = "margin-right:5px">\n <label for="column" style="margin-right:25px;">Column</label> \n <input type="checkbox" id="code" ng-model="checkboxStatus.show_code" ng-click = "filterResults(results, checkboxStatus)" style = "margin-right:5px">\n <label for="code" style="margin-right:15px;">SQL</label>\n <input type="checkbox" id="code" ng-model="checkboxStatus.show_tags" ng-click = "filterResults(results, checkboxStatus)" style = "margin-right:5px">\n <label for="code" style="margin-right:15px;">Tags</label>\n </div>\n </div>\n <div class="app-details">\n <div class="app-frame app-pad">\n <div class="results">\n <div ng-repeat="result in results | filter:limit_search | orderBy:\'overallWeight\':true track by result.model.unique_id"\n data-ui-state="getState(result.model)" data-ui-state-params="{unique_id: result.model.unique_id}"\n ng-click="onSelect()"\n class="result search-result a">\n <div class="result-content">\n <div class="result-icn">\n <svg class="icn "><use xlink:href="#icn-doc"></use></svg>\n </div>\n <div class="result-body">\n <h4 class="a">\n <span ng-bind-html="highlight(getModelName(result.model))"></span>\n <small>{{result.model.resource_type}}</small>\n </h4>\n <p ng-bind-html="highlight(shorten(result.model.description))"></p>\n </div>\n </div>\n <div class="sub-results" ng-show="query.length > 0">\n <span ng-repeat="column in columnFilter(result.model.columns) | limitTo:limitColumns(result.model.unique_id)">\n <span ng-show="$first === true">columns:</span>\n <span ng-bind-html="highlight(column + \',\')" ng-show="$last === false"></span>\n <span ng-bind-html="highlight(column)" ng-show="$last === true"></span>\n </span>\n <a\n ng-show="columnFilter(result.model.columns).length > max_results_columns && !limit_columns[result.model.unique_id]"\n ng-click="$event.stopPropagation(); limit_columns[result.model.unique_id] = 100">Show {{ columnFilter(result.model.columns).length - max_results_columns }} more</a>\n </div>\n <div class="sub-results" ng-show="query.length > 0">\n <span>\n <span ng-bind-html = "highlight(shorten(result.model[\'raw_sql\']))"></span>\n </span>\n </div>\n <div class="sub-results" ng-show="query.length > 0">\n <span ng-repeat="tag in result.model.tags">\n <span ng-show="$first === true">tags:</span>\n <span ng-bind-html="highlight(tag + \',\')" ng-show="$last === false"></span>\n <span ng-bind-html="highlight(tag)" ng-show="$last === true"></span>\n </span>\n </div>\n </div>\n <a\n ng-show="results.length >= max_results && !show_all"\n ng-click="show_all = true">Show {{ results.length - max_results }} more</a>\n </div>\n </div>\n </div>\n</div>\n')}]),e.exports=n},function(e,t,n){"use strict";const r=n(429);n(430);const i=n(21);angular.module("dbt").directive("tableDetails",["$sce","$filter",function(e,t){return{scope:{model:"=",extras:"=",exclude:"<"},templateUrl:r,link:function(e){function n(e,t){if(0==e)return"0 bytes";if(e<1&&(e*=1e6),isNaN(parseFloat(e))||!isFinite(e))return"-";void 0===t&&(t=0);var n=Math.floor(Math.log(e)/Math.log(1024));return(e/Math.pow(1024,Math.floor(n))).toFixed(t)+" "+["bytes","KB","MB","GB","TB","PB"][n]}function r(e,n){return void 0===n&&(n=2),t("number")(100*e,n)+"%"}function o(e,n){return void 0===n&&(n=0),t("number")(e,n)}e.details=[],e.extended=[],e.exclude=e.exclude||[],e.meta=null,e._show_expanded=!1,e.show_expanded=function(t){return void 0!==t&&(e._show_expanded=t),e._show_expanded},e.hasData=function(e){return!(!e||i.isEmpty(e))&&(1!=e.length||0!=e[0].include)},e.$watch("model",(function(t,a){i.property(["metadata","type"])(t);var s,l,c,u=t.hasOwnProperty("sources")&&null!=t.sources[0]?t.sources[0].source_meta:null;if(e.meta=t.meta||u,e.details=function(e){var t,n,r=!e.metadata,o=e.metadata||{};t=e.database?e.database+".":"",n=r?void 0:"source"==e.resource_type?t+e.schema+"."+e.identifier:t+e.schema+"."+e.alias;var a,s=[{name:"Owner",value:o.owner},{name:"Type",value:r?void 0:(a=o.type,"BASE TABLE"==a?{type:"table",name:"table"}:"LATE BINDING VIEW"==a?{type:"view",name:"late binding view"}:{type:a.toLowerCase(),name:a.toLowerCase()}).name},{name:"Package",value:e.package_name},{name:"Relation",value:n}];return i.filter(s,(function(e){return void 0!==e.value}))}(t),e.extended=(s=t.stats,l={rows:o,row_count:o,num_rows:o,max_varchar:o,pct_used:r,size:n,bytes:n,num_bytes:n},c=i.sortBy(i.values(s),"label"),i.map(c,(function(e){var t=i.clone(e),n=l[e.id];return n&&(t.value=n(e.value),t.label=e.label.replace("Approximate","~"),t.label=e.label.replace("Utilization","Used")),t}))),e.extras){var d=i.filter(e.extras,(function(e){return void 0!==e.value&&null!==e.value}));e.details=e.details.concat(d)}e.show_extended=i.where(e.extended,{include:!0}).length>0})),e.queryTag=function(t){e.$emit("query",t)}}}}])},function(e,t){var n="/components/table_details/table_details.html";window.angular.module("ng").run(["$templateCache",function(e){e.put(n,'<div class="section-content">\n <h6>Details</h6>\n <div class="panel">\n <div class="panel-body">\n <div class="details">\n <div class="details-content">\n <div class="detail-group" ng-if="hasData(meta)">\n <div class="detail-body">\n <dl class="detail"\n ng-repeat="(k, v) in meta">\n <dt class="detail-label">{{ k }}</dt>\n <dd class="detail-value">{{ v }}</dd>\n </dl>\n </div>\n </div>\n <div class="detail-group">\n <div class="detail-body">\n <dl class=\'detail\' ng-if="model.tags != undefined && exclude.indexOf(\'tags\') == -1">\n <dt class="detail-label">Tags</dt>\n <dd ng-if="model.tags.length > 0" class="detail-value">\n <span ng-repeat="tag in model.tags"><code><a ng-click=queryTag(tag)>{{ tag }}</a></code> </span>\n </dd>\n <dd ng-if="model.tags.length == 0" class="detail-value">untagged</dd>\n </dl>\n <dl class="detail"\n ng-repeat="item in details">\n <dt class="detail-label">{{ item.name }}</dt>\n <dd class="detail-value">{{ item.value }}</dd>\n </dl>\n </div>\n </div>\n <div class="detail-group" ng-if="hasData(extended)">\n <div class="detail-body">\n <dl class="detail"\n ng-repeat="item in extended"\n ng-if="item.include">\n <dt data-toggle="tooltip" title="{{ item.description }}" class="detail-label">{{ item.label }}</dt>\n <dd class="detail-value">{{ item.value }}</dd>\n </dl>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n</div>\n')}]),e.exports=n},function(e,t,n){var r=n(431);"string"==typeof r&&(r=[[e.i,r,""]]);var i={hmr:!0,transform:void 0,insertInto:void 0};n(40)(r,i);r.locals&&(e.exports=r.locals)},function(e,t,n){(e.exports=n(39)(!1)).push([e.i,"\n\n.details-content {\n table-layout: fixed;\n}\n\n.detail-body {\n white-space: nowrap;\n overflow-x: scroll;\n}\n",""])},function(e,t,n){"use strict";const r=n(433),i=n(21);angular.module("dbt").directive("columnDetails",["project",function(e){return{scope:{model:"="},templateUrl:r,link:function(t){t.has_test=function(e,t){return-1!=i.pluck(e.tests,"short").indexOf(t)},t.has_more_info=function(e){var t=e.tests||[],n=e.description||"",r=e.meta||{};return t.length||n.length||!i.isEmpty(r)},t.toggle_column_expanded=function(e){t.has_more_info(e)&&(e.expanded=!e.expanded)},t.getState=function(e){return"dbt."+e.resource_type},t.get_col_name=function(t){return e.caseColumn(t)},t.get_columns=function(e){var t=i.chain(e.columns).values().sortBy("index").value();return i.each(t,(function(e,t){e.index=t})),t}}}}])},function(e,t){var n="/components/column_details/column_details.html";window.angular.module("ng").run(["$templateCache",function(e){e.put(n,'<div class="panel">\n <div class="panel-body">\n <div ng-if="_.isEmpty(model.columns)">\n Column information is not available for this seed\n </div>\n <div class="table-responsive"\n style="max-height: 800px; overflow-y: scroll;"\n ng-if="!_.isEmpty(model.columns)">\n <table class="table table-borderless table-hover">\n <thead>\n <tr>\n <th style="background-color: white; position: sticky; top: 0; z-index: 1;">Column</th>\n <th style="background-color: white; position: sticky; top: 0; z-index: 1;">Type</th>\n <th style="background-color: white; position: sticky; top: 0; z-index: 1;">Description</th>\n <th style="width: 1px; background-color: white; position: sticky; top: 0; z-index: 1;">Tests</th>\n <th style="width: 1px; background-color: white; position: sticky; top: 0; z-index: 1;" class=\'text-center\'>More?</th>\n </tr>\n </thead>\n <tbody>\n <tr\n ng-repeat-start="column in get_columns(model) track by column.index"\n ng-click="toggle_column_expanded(column)"\n class="column-row"\n ng-class="{\'column-row-selected\': column.expanded}"\n ng-style="{cursor: has_more_info(column) ? \'pointer\' : \'auto\'}">\n <td>\n <div>\n <span class=\'text-dark\'>{{ get_col_name(column.name) }}</span>\n </div>\n </td>\n <td>\n <span class=\'text-dark\'>{{ column.type }}</p>\n </td>\n <td style="text-overflow: ellipsis; overflow-x: hidden; white-space: nowrap; max-width: 1px;">\n <span ng-show="!column.expanded">{{ column.description }}</span>\n </td>\n <td>\n <span class="text-light" ng-show="!column.expanded">\n <span data-toggle="tooltip" title="Unique" ng-if="has_test(column, \'U\')">U</span>\n <span data-toggle="tooltip" title="Not Null" ng-if="has_test(column, \'N\')">N</span>\n <span data-toggle="tooltip" title="Foreign Key" ng-if="has_test(column, \'F\')">F</span>\n <span data-toggle="tooltip" title="Accepted Values" ng-if="has_test(column, \'A\')">A</span>\n <span data-toggle="tooltip" title="Custom Test" ng-if="has_test(column, \'+\')">+</span>\n </span>\n </td>\n <td class=\'text-center\'>\n <span class=\'text-light\' ng-show="has_more_info(column)">\n <span ng-if="column.expanded">\n <svg class="icn"><use xlink:href="#icn-up"></use></svg>\n </span>\n <span ng-if="!column.expanded">\n <svg class="icn"><use xlink:href="#icn-right"></use></svg>\n </span>\n </span>\n </td>\n </tr>\n <tr ng-repeat-end ng-show="column.expanded" style="background-color: white; padding: 10px">\n <td colspan="5" class="column-expanded">\n <div style="padding: 5px 20px">\n <div ng-show="column.meta">\n <h5>Details</h5>\n <div class="detail-group" style="padding-bottom: 0">\n <div class="detail-body" style="padding-left: 0">\n <dl class="detail"\n ng-style="{\'padding-left\': $index == 0 ? 0 : \'auto\'}"\n ng-repeat="(k, v) in column.meta">\n <dt class="detail-label">{{ k }}</dt>\n <dd class="detail-value">{{ v }}</dd>\n </dl>\n </div>\n </div>\n </div>\n\n <div style="margin-bottom: 15px" ng-if="column.description.length">\n <h5>Description</h5>\n <span marked="column.description"></span>\n </div>\n\n <div ng-show="column.tests && column.tests.length" style="margin-bottom: 15px">\n <h5>Generic Tests</h5>\n <ul class="list-unstyled" style="margin-top: 2px">\n <li ng-repeat="test in column.tests" ng-switch on="test.short" class=\'text-light\'>\n <span ng-switch-when="F">\n Foreign Key\n <span ng-if="test.fk_model.unique_id">\n <a data-ui-state="getState(test.fk_model)"\n data-ui-state-params="{unique_id: test.fk_model.unique_id}">\n to {{ test.fk_model.name }}\n </a> on <code>{{ test.fk_field }}</code>\n </span>\n </span>\n <span ng-switch-when="P">Primary Key</span>\n <span ng-switch-when="U">Unique</span>\n <span ng-switch-when="N">Not Null</span>\n <span ng-switch-default>{{ test.label }}</span>\n </li>\n </ul>\n </div>\n </div>\n </td>\n </tr>\n </tbody>\n </table>\n </div>\n </div>\n</div>\n')}]),e.exports=n},function(e,t,n){"use strict";const r=n(435);n(31),n(436);angular.module("dbt").directive("codeBlock",["code","$timeout",function(e,t){return{scope:{versions:"=",default:"<"},restrict:"E",templateUrl:r,link:function(n,r){n.selected_version=n.default,n.source=null,n.setSelected=function(r){n.selected_version=r,n.source=n.versions[r]||"";const i=n.source.trim();n.highlighted=e.highlight(i),t((function(){Prism.highlightAll()}))},n.titleCase=function(e){return e.charAt(0).toUpperCase()+e.substring(1)},n.copied=!1,n.copy_to_clipboard=function(){e.copy_to_clipboard(n.source),n.copied=!0,setTimeout((function(){n.$apply((function(){n.copied=!1}))}),1e3)},n.$watch("versions",(function(e,t){if(e)if(n.default)n.setSelected(n.default);else{var r=Object.keys(n.versions);r.length>0&&n.setSelected(r[0])}}),!0)}}}])},function(e,t){var n="/components/code_block/code_block.html";window.angular.module("ng").run(["$templateCache",function(e){e.put(n,'<h6>Code</h6>\n<div class="panel">\n <div class="panel-body">\n <ul class="nav nav-tabs">\n <li\n ng-repeat="(version_name, version) in versions"\n ng-class="{active: version_name == selected_version}">\n <a ng-click="setSelected(version_name)">{{ titleCase(version_name) }}</a>\n </li>\n <li class=\'nav-pull-right\'></li>\n <li>\n <a class=\'unselectable\'\n ng-click="copy_to_clipboard()">{{ copied ? \'copied\' : \'copy to clipboard\' }}</a>\n </li>\n </ul>\n <div style="margin-top: 1px">\n <pre style="background-color: white"\n class=\'code line-numbers\'><code class="source-code highlight language-sql" ng-bind-html="highlighted"></code></pre>\n </div>\n </div>\n</div>\n')}]),e.exports=n},function(e,t,n){var r=n(437);"string"==typeof r&&(r=[[e.i,r,""]]);var i={hmr:!0,transform:void 0,insertInto:void 0};n(40)(r,i);r.locals&&(e.exports=r.locals)},function(e,t,n){(e.exports=n(39)(!1)).push([e.i,"pre.code {\n border: none !important;\n overflow-y: visible !important;\n overflow-x: scroll !important;\n padding-bottom: 10px;\n}\n\npre.code code {\n font-family: Monaco, monospace !important;\n font-weight: 400 !important;\n}\n\n.line-numbers-rows {\n border: none !important;\n}\n",""])},function(e,t,n){"use strict";const r=n(439);angular.module("dbt").directive("macroArguments",[function(){return{scope:{macro:"="},templateUrl:r,link:function(e){_.each(e.macro.arguments,(function(e){e.expanded=!1}))}}}])},function(e,t){var n="/components/macro_arguments/index.html";window.angular.module("ng").run(["$templateCache",function(e){e.put(n,'<style>\n.arg-header {\n background-color: white;\n position: sticky;\n top: 0;\n z-index: 1;\n}\n\n</style>\n\n<div class="panel">\n <div class="panel-body">\n <div ng-if="macro.arguments.length == 0">\n Details are not available for this macro\n </div>\n <div\n ng-if="macro.arguments.length > 0"\n class="table-responsive"\n style="max-height: 800px; overflow-y: scroll;">\n <table class="table table-borderless table-hover">\n <thead>\n <tr>\n <th class="arg-header">Argument</th>\n <th class="arg-header">Type</th>\n <th class="arg-header">Description</th>\n <th style="width: 1px;" class=\'text-center\'>More?</th>\n </tr>\n </thead>\n <tbody>\n <tr ng-repeat-start="arg in macro.arguments"\n ng-click="arg.expanded = !arg.expanded"\n ng-class="{\'column-row-selected\': arg.expanded}"\n ng-style="{cursor: arg.description ? \'pointer\' : \'auto\'}"\n class="column-row">\n <td>\n <div>\n <span class=\'text-dark\'>{{ arg.name }}</span>\n </div>\n </td>\n <td>\n <span class=\'text-dark\'>{{ arg.type }}</p>\n </td>\n <td style="text-overflow: ellipsis; overflow-x: hidden; white-space: nowrap; max-width: 1px;">\n <span ng-show="!arg.expanded">{{ arg.description }}</span>\n </td>\n <td class=\'text-center\'>\n <span class=\'text-light\' ng-show="arg.description">\n <span ng-if="arg.expanded">\n <svg class="icn"><use xlink:href="#icn-up"></use></svg>\n </span>\n <span ng-if="!arg.expanded">\n <svg class="icn"><use xlink:href="#icn-right"></use></svg>\n </span>\n </span>\n </td>\n </tr>\n <tr ng-repeat-end\n ng-show="arg.expanded"\n style="background-color: white; padding: 10px">\n <td colspan="4" class="column-expanded">\n <div style="padding: 5px 20px">\n <div style="margin-bottom: 15px">\n <h5>Description</h5>\n <span marked="arg.description"></span>\n </div>\n </div>\n </td>\n </tr>\n </tbody>\n </table>\n </div>\n </div>\n</div>\n')}]),e.exports=n},function(e,t,n){"use strict";const r=n(441);angular.module("dbt").directive("referenceList",["$state",function(e){return{scope:{references:"=",node:"="},restrict:"E",templateUrl:r,link:function(t){t.selected_type=null,t.setType=function(e){t.selected_type=e,t.nodes=t.references[t.selected_type]},t.getNodeUrl=function(t){var n="dbt."+t.resource_type;return e.href(n,{unique_id:t.unique_id,"#":null})},t.mapResourceType=function(e){return"model"==e?"Models":"seed"==e?"Seeds":"test"==e?"Tests":"snapshot"==e?"Snapshots":"analysis"==e?"Analyses":"macro"==e?"Macros":"exposure"==e?"Exposures":"metric"==e?"Metrics":"Nodes"},t.$watch("references",(function(e){e&&_.size(e)>0?(t.selected_type=_.keys(e)[0],t.has_references=!0,t.nodes=t.references[t.selected_type]):t.has_references=!1}))}}}])},function(e,t){var n="/components/references/index.html";window.angular.module("ng").run(["$templateCache",function(e){e.put(n,'<div class="panel">\n <div class="panel-body" ng-if="!has_references">\n No resources reference this {{ node.resource_type }}\n </div>\n <div class="panel-body" ng-if="has_references">\n <ul class="nav nav-tabs">\n <li\n ng-repeat="(resource_type, nodes) in references"\n ng-class="{active: resource_type == selected_type}">\n <a ng-click="setType(resource_type)">\n {{ mapResourceType(resource_type) }}\n </a>\n </li>\n </ul>\n <div style="margin-top: 15px">\n <ul class=\'list-unstyled\'>\n <li ng-repeat="node in nodes">\n <a ng-href="{{ getNodeUrl(node) }}">{{ node.name }}</a>\n </li>\n </ul>\n <div>\n </div>\n</div>\n')}]),e.exports=n},function(e,t,n){n(443),n(445),n(446),n(447),n(448),n(449),n(450),n(451),n(452)},function(e,t,n){"use strict";const r=n(9),i=n(36);n(37),r.module("dbt").controller("ModelCtrl",["$scope","$state","project","code","$anchorScroll","$location",function(e,t,n,r,o,a){e.model_uid=t.params.unique_id,e.tab=t.params.tab,e.project=n,e.codeService=r,e.versions={},e.copied=!1,e.copy_to_clipboard=function(t){r.copy_to_clipboard(t),e.copied=!0,setTimeout((function(){e.$apply((function(){e.copied=!1}))}),1e3)},e.model={},n.ready((function(t){let n=t.nodes[e.model_uid];e.model=n,e.references=i.getReferences(t,n),e.referencesLength=Object.keys(e.references).length,e.parents=i.getParents(t,n),e.parentsLength=Object.keys(e.parents).length;e.versions={Source:e.model.raw_sql,Compiled:e.model.compiled_sql||"\n-- compiled SQL not found for this model\n"},setTimeout((function(){o()}),0)}))}])},function(e,t,n){(e.exports=n(39)(!1)).push([e.i,"\n.nav-tabs li.nav-pull-right {\n flex: 1 0 auto;\n text-align: right;\n}\n\ntr.column-row-selected {\n\n}\n\ntd.column-expanded{\n padding: 0px !important;\n}\n\ntd.column-expanded > div {\n padding: 5px 10px;\n margin-left: 20px;\n height: 100%;\n\n border-left: 1px solid #ccc !important;\n}\n",""])},function(e,t,n){"use strict";const r=n(9),i=n(36);n(37),r.module("dbt").controller("SourceCtrl",["$scope","$state","project","code","$anchorScroll","$location",function(e,t,n,r,o,a){e.model_uid=t.params.unique_id,e.project=n,e.codeService=r,e.extra_table_fields=[],e.versions={},e.model={},n.ready((function(t){let n=t.nodes[e.model_uid];e.model=n,e.references=i.getReferences(t,n),e.referencesLength=Object.keys(e.references).length,e.parents=i.getParents(t,n),e.parentsLength=Object.keys(e.parents).length,e.versions={"Sample SQL":r.generateSourceSQL(e.model)},e.extra_table_fields=[{name:"Loader",value:e.model.loader},{name:"Source",value:e.model.source_name}]}))}])},function(e,t,n){"use strict";const r=n(9),i=n(36);n(37),r.module("dbt").controller("SeedCtrl",["$scope","$state","project","code","$transitions","$anchorScroll","$location",function(e,t,n,r,o,a,s){e.model_uid=t.params.unique_id,e.tab=t.params.tab,e.project=n,e.codeService=r,e.versions={},e.model={},n.ready((function(t){let n=t.nodes[e.model_uid];e.model=n,e.references=i.getReferences(t,n),e.referencesLength=Object.keys(e.references).length,e.parents=i.getParents(t,n),e.parentsLength=Object.keys(e.parents).length,e.versions={"Example SQL":r.generateSourceSQL(e.model)}}))}])},function(e,t,n){"use strict";const r=n(9),i=n(36);n(37),r.module("dbt").controller("SnapshotCtrl",["$scope","$state","project","code","$anchorScroll","$location",function(e,t,n,r,o,a){e.model_uid=t.params.unique_id,e.tab=t.params.tab,e.project=n,e.codeService=r,e.versions={},e.model={},n.ready((function(t){let n=t.nodes[e.model_uid];e.model=n,e.references=i.getReferences(t,n),e.referencesLength=Object.keys(e.references).length,e.parents=i.getParents(t,n),e.parentsLength=Object.keys(e.parents).length;e.versions={Source:e.model.raw_sql,Compiled:e.model.compiled_sql||"Compiled SQL is not available for this snapshot"},setTimeout((function(){o()}),0)}))}])},function(e,t,n){"use strict";const r=n(9),i=n(36);n(37),r.module("dbt").controller("TestCtrl",["$scope","$state","project","code","$anchorScroll","$location",function(e,t,n,r,o,a){e.model_uid=t.params.unique_id,e.tab=t.params.tab,e.project=n,e.codeService=r,e.versions={},e.model={},n.ready((function(t){let n=t.nodes[e.model_uid];e.model=n,e.references=i.getReferences(t,n),e.referencesLength=Object.keys(e.references).length,e.parents=i.getParents(t,n),e.parentsLength=Object.keys(e.parents).length;e.versions={Source:e.model.raw_sql,Compiled:e.model.compiled_sql||"\n-- compiled SQL not found for this model\n"},setTimeout((function(){o()}),0)}))}])},function(e,t,n){"use strict";const r=n(9),i=n(21),o=n(36);n(37),r.module("dbt").controller("MacroCtrl",["$scope","$state","project","code","$transitions","$anchorScroll","$location",function(e,t,n,r,a,s,l){e.model_uid=t.params.unique_id,e.tab=t.params.tab,e.project=n,e.codeService=r,e.macro={},n.ready((function(t){let n=t.macros[e.model_uid];if(e.macro=n,e.references=o.getMacroReferences(t,n),e.referencesLength=Object.keys(e.references).length,e.parents=o.getMacroParents(t,n),e.parentsLength=Object.keys(e.parents).length,e.macro.is_adapter_macro){var r=t.metadata.adapter_type;e.versions=n.impls,n.impls[r]?e.default_version=r:n.impls.default?e.default_version="default":e.default_version=i.keys(n.impls)[0]}else e.default_version="Source",e.versions={Source:e.macro.macro_sql}}))}])},function(e,t,n){"use strict";const r=n(9),i=n(36);n(37),r.module("dbt").controller("AnalysisCtrl",["$scope","$state","project","code","$transitions","$anchorScroll","$location",function(e,t,n,r,o,a,s){e.model_uid=t.params.unique_id,e.project=n,e.codeService=r,e.default_version="Source",e.versions={Source:"",Compiled:""},e.model={},n.ready((function(t){let n=t.nodes[e.model_uid];e.model=n,e.references=i.getReferences(t,n),e.referencesLength=Object.keys(e.references).length,e.parents=i.getParents(t,n),e.parentsLength=Object.keys(e.parents).length,e.versions={Source:e.model.raw_sql,Compiled:e.model.compiled_sql}}))}])},function(e,t,n){"use strict";const r=n(9),i=n(36);n(37),r.module("dbt").controller("ExposureCtrl",["$scope","$state","project","code","$anchorScroll","$location",function(e,t,n,r,o,a){e.model_uid=t.params.unique_id,e.project=n,e.codeService=r,e.extra_table_fields=[],e.versions={},e.exposure={},n.ready((function(t){let n=t.nodes[e.model_uid];e.exposure=n,e.parents=i.getParents(t,n),e.parentsLength=e.parents.length,e.extra_table_fields=[{name:"Maturity",value:e.exposure.maturity},{name:"Owner",value:e.exposure.owner.name},{name:"Owner email",value:e.exposure.owner.email}]}))}])},function(e,t,n){"use strict";const r=n(9),i=n(36);n(37),r.module("dbt").controller("MetricCtrl",["$scope","$state","project","code","$anchorScroll","$location",function(e,t,n,r,o,a){e.model_uid=t.params.unique_id,e.project=n,e.codeService=r,e.extra_table_fields=[],e.versions={},e.metric={},n.ready((function(t){let n=t.nodes[e.model_uid];e.metric=n,e.parents=i.getParents(t,n),e.parentsLength=e.parents.length}))}])},function(e,t,n){"use strict";n(9).module("dbt").controller("GraphCtrl",["$scope","$state","$window","graph","project","selectorService",function(e,t,n,r,i,o){function a(e){return e&&"source"==e.resource_type?"source:"+e.source_name+"."+e.name:e&&"exposure"==e.resource_type?"exposure:"+e.name:e&&"metric"==e.resource_type?"metric:"+e.name:e.name?e.name:"*"}e.graph=r.graph,e.graphService=r,e.graphRendered=function(e){r.setGraphReady(e)},e.$watch((function(){return t.params.unique_id}),(function(e,t){e&&e!=t&&i.find_by_id(e,(function(e){e&&("sidebar"==r.orientation?r.showVerticalGraph(a(e),!1):r.showFullGraph(a(e)))})),e||o.clearViewNode()}))}])},function(e,t,n){"use strict";const r=n(9),i=n(21),o=n(31),a=n(455);n(456),n(206),n(463),n(464),n(467),n(471),r.module("dbt").controller("MainController",["$scope","$route","$state","project","graph","selectorService","trackingService","locationService","$transitions",function(e,t,n,r,s,l,c,u,d){function f(t){e.model_uid=t;var n=r.node(t);n&&l.resetSelection(n)}function p(e){e&&setTimeout((function(){var t=o("*[data-nav-unique-id='"+e+"']");t.length&&t[0].scrollIntoView&&t[0].scrollIntoView({behavior:"smooth",block:"center",inline:"center"})}),1)}e.tree={database:{},project:{},sources:{}},e.search={query:"",results:[],is_focused:!1},e.logo=a,e.model_uid=null,e.project={},o("body").bind("keydown",(function(e){"t"==event.key&&"INPUT"!=event.target.tagName&&(console.log("Opening search"),o("#search").focus(),event.preventDefault())})),e.onSearchFocus=function(t,n){e.search.is_focused=n},e.clearSearch=function(){e.search.is_focused=!1,e.search.query="",e.search.results=[],o("#search").blur()},e.$on("clearSearch",(function(){e.clearSearch()})),e.$on("query",(function(t,n){e.search.is_focused=!0,e.search.query=n})),e.onSearchKeypress=function(t){console.log(t),"Escape"==t.key&&(e.clearSearch(),t.preventDefault())},r.getModelTree(n.params.unique_id,(function(t){e.tree.database=t.database,e.tree.project=t.project,e.tree.sources=t.sources,e.tree.exposures=t.exposures,e.tree.metrics=t.metrics,setTimeout((function(){p(e.model_uid)}))})),d.onSuccess({},(function(t,n){var i=t.router.globals.params,o=l.getViewNode(),a=o?o.unique_id:null,s=i.unique_id,u=!0;if(t.from().name==t.to().name&&a==s&&(u=!1),u&&i.unique_id){var d=r.updateSelected(i.unique_id);e.tree.database=d.database,e.tree.project=d.project,e.tree.sources=d.sources,e.search.query="",console.log("updating selected model to: ",i),f(i.unique_id),setTimeout((function(){p(i.unique_id)}))}u&&c.track_pageview()})),e.$watch("search.query",(function(t){e.search.results=function(t){if(""===e.search.query)return t;let n={name:10,tags:5,description:3,raw_sql:2,columns:1};return i.each(t,(function(t){t.overallWeight=0,i.each(Object.keys(n),(function(r){if(null!=t.model[r]){let o=0,a=t.model[r],s=e.search.query.toLowerCase();if("columns"===r)i.each(a,(function(e){let t=e.name.toLowerCase(),n=0;for(;-1!=n;)n=t.indexOf(s,n),-1!=n&&(o++,n++)}));else if("tags"===r)i.each(a,(function(e){let t=e.toLowerCase(),n=0;for(;-1!=n;)n=t.indexOf(s,n),-1!=n&&(o++,n++)}));else{a=a.toLowerCase();let e=0;for(;-1!=e;)e=a.indexOf(s,e),-1!=e&&(o++,e++)}t.overallWeight+=o*n[r]}}))})),t}(r.search(t))})),r.init(),r.ready((function(t){e.project=t,e.search.results=r.search("");var o=i.unique(i.pluck(i.values(t.nodes),"package_name")),a=[null];i.each(t.nodes,(function(e){var t=e.tags;a=i.union(a,t)})),l.init({packages:o,tags:a}),f(n.params.unique_id);var d=u.parseState(n.params);d.show_graph&&s.ready((function(){i.assign(l.selection.dirty,d.selected);var e=l.updateSelection();s.updateGraph(e)}));var p=t.metadata||{};c.init({track:p.send_anonymous_usage_stats,project_id:p.project_id})}))}])},function(e,t){e.exports="data:image/svg+xml,%3Csvg width='242' height='90' viewBox='0 0 242 90' fill='none' xmlns='http://www.w3.org/2000/svg'%3E %3Cpath d='M240.384 74.5122L239.905 75.8589H239.728L239.249 74.5156V75.8589H238.941V74.0234H239.324L239.816 75.3872L240.309 74.0234H240.691V75.8589H240.384V74.5122ZM238.671 74.3003H238.169V75.8589H237.858V74.3003H237.352V74.0234H238.671V74.3003Z' fill='%23262A38'/%3E %3Cpath d='M154.123 13.915V75.3527H141.672V69.0868C140.37 71.2839 138.499 73.0742 136.22 74.2134C133.779 75.434 131.012 76.085 128.246 76.085C124.828 76.1664 121.41 75.1899 118.562 73.2369C115.633 71.2839 113.354 68.5986 111.889 65.425C110.262 61.7631 109.448 57.8572 109.529 53.8698C109.448 49.8825 110.262 45.9765 111.889 42.3961C113.354 39.3038 115.633 36.6185 118.481 34.7469C121.41 32.8753 124.828 31.9801 128.246 32.0615C130.931 32.0615 133.616 32.6311 135.976 33.8517C138.255 34.991 140.126 36.6999 141.428 38.8156V18.0651L154.123 13.915ZM139.15 63.2279C140.777 61.1121 141.672 58.0199 141.672 54.0326C141.672 50.0452 140.859 47.0344 139.15 44.9187C137.441 42.8029 134.755 41.5823 131.989 41.6637C129.222 41.5009 126.537 42.7215 124.746 44.8373C123.038 46.953 122.142 49.9639 122.142 53.8698C122.142 57.8572 123.038 60.9494 124.746 63.1465C126.455 65.3436 129.222 66.5642 131.989 66.4828C135.081 66.4828 137.522 65.3436 139.15 63.2279Z' fill='%23262A38'/%3E %3Cpath d='M198.635 34.6655C201.564 36.5371 203.843 39.2225 205.226 42.3147C206.853 45.8952 207.667 49.8011 207.586 53.7885C207.667 57.7758 206.853 61.7632 205.226 65.3436C203.761 68.5172 201.483 71.2026 198.553 73.1556C195.705 75.0272 192.287 76.0037 188.87 75.9223C186.103 76.0037 183.336 75.3527 180.895 74.0507C178.617 72.9114 176.745 71.1212 175.524 68.9241V75.2713H162.993V18.0651L175.606 13.915V38.9783C176.826 36.7812 178.698 34.991 180.976 33.8517C183.418 32.5498 186.103 31.8988 188.87 31.9801C192.287 31.8988 195.705 32.8753 198.635 34.6655ZM192.45 63.1465C194.159 60.9494 194.973 57.8572 194.973 53.7885C194.973 49.8825 194.159 46.8716 192.45 44.7559C190.741 42.6402 188.381 41.5823 185.289 41.5823C182.523 41.4196 179.837 42.6402 178.047 44.8373C176.338 47.0344 175.524 50.0452 175.524 53.9512C175.524 57.9386 176.338 61.0308 178.047 63.1465C179.756 65.3436 182.441 66.5642 185.289 66.4015C188.056 66.5642 190.741 65.3436 192.45 63.1465Z' fill='%23262A38'/%3E %3Cpath d='M225 42.4774V58.915C225 61.2749 225.651 62.9838 226.791 64.0416C228.093 65.1809 229.801 65.7505 231.592 65.6691C232.975 65.6691 234.44 65.425 235.742 65.0995V74.8644C233.382 75.6782 230.941 76.085 228.499 76.0037C223.292 76.0037 219.304 74.5389 216.537 71.6094C213.771 68.68 212.387 64.5299 212.387 59.1592V23.1103L225 19.0416V33.038H235.742V42.4774H225Z' fill='%23262A38'/%3E %3Cpath d='M86.1754 3.74322C88.2911 5.77758 89.6745 8.46293 90 11.3924C90 12.613 89.6745 13.4268 88.9421 14.9729C88.2098 16.519 79.1772 32.1429 76.4919 36.4557C74.9458 38.9783 74.132 41.9892 74.132 44.9186C74.132 47.9295 74.9458 50.859 76.4919 53.3816C79.1772 57.6944 88.2098 73.3996 88.9421 74.9457C89.6745 76.4919 90 77.2242 90 78.4448C89.6745 81.3743 88.3725 84.0597 86.2568 86.0127C84.2224 88.1284 81.5371 89.5118 78.689 89.7559C77.4684 89.7559 76.6546 89.4304 75.1899 88.698C73.7251 87.9656 57.7758 79.1772 53.4629 76.4919C53.1374 76.3291 52.8119 76.085 52.4051 75.9222L31.085 63.3092C31.5732 67.3779 33.3635 71.2839 36.2929 74.132C36.8626 74.7016 37.4322 75.1899 38.0832 75.6781C37.5949 75.9222 37.0253 76.1664 36.5371 76.4919C32.2242 79.1772 16.519 88.2098 14.9729 88.9421C13.4268 89.6745 12.6944 90 11.3924 90C8.46293 89.6745 5.77758 88.3725 3.82459 86.2568C1.70886 84.2224 0.325497 81.5371 0 78.6076C0.0813743 77.387 0.406872 76.1664 1.05787 75.1085C1.79024 73.5624 10.8228 57.8571 13.5081 53.5443C15.0542 51.0217 15.868 48.0922 15.868 45.0814C15.868 42.0705 15.0542 39.141 13.5081 36.6184C10.8228 32.1429 1.70886 16.4376 1.05787 14.8915C0.406872 13.8336 0.0813743 12.613 0 11.3924C0.325497 8.46293 1.62749 5.77758 3.74322 3.74322C5.77758 1.62749 8.46293 0.325497 11.3924 0C12.613 0.0813743 13.8336 0.406872 14.9729 1.05787C16.2749 1.62749 27.7486 8.30018 33.8517 11.8807L35.2351 12.6944C35.7233 13.0199 36.1302 13.264 36.4557 13.4268L37.1067 13.8336L58.8336 26.6908C58.3454 21.8083 55.8228 17.3327 51.9168 14.3219C52.4051 14.0778 52.9747 13.8336 53.4629 13.5081C57.7758 10.8228 73.481 1.70886 75.0271 1.05787C76.085 0.406872 77.3056 0.0813743 78.6076 0C81.4557 0.325497 84.1411 1.62749 86.1754 3.74322ZM46.1392 50.7776L50.7776 46.1392C51.4286 45.4882 51.4286 44.5118 50.7776 43.8608L46.1392 39.2224C45.4882 38.5714 44.5118 38.5714 43.8608 39.2224L39.2224 43.8608C38.5714 44.5118 38.5714 45.4882 39.2224 46.1392L43.8608 50.7776C44.4304 51.3472 45.4882 51.3472 46.1392 50.7776Z' fill='%23FF694A'/%3E %3C/svg%3E"},function(e,t,n){"use strict";n.r(t);var r=n(115),i=n.n(r);n(457),n(458),n(459),n(461);const o=n(9),a=(n(31),n(21));window.Prism=i.a,o.module("dbt").factory("code",["$sce",function(e){var t={copied:!1,highlight:function(t){var n=i.a.highlight(t,i.a.languages.sql,"sql");return e.trustAsHtml(n)},copy_to_clipboard:function(e){var t=document.createElement("textarea");t.value=e,t.setAttribute("readonly",""),t.style.position="absolute",t.style.left="-9999px",document.body.appendChild(t),t.select(),document.execCommand("copy"),document.body.removeChild(t)},generateSourceSQL:function(e){var t=["select"],n=a.size(e.columns),r=a.keys(e.columns);a.each(r,(function(e,r){var i=" "+e;r+1!=n&&(i+=","),t.push(i)}));var i=[e.database,e.schema,e.identifier||e.alias||e.name].join(".");return t.push("from "+i),t.join("\n")}};return t}])},function(e,t){Prism.languages.sql={comment:{pattern:/(^|[^\\])(?:\/\*[\s\S]*?\*\/|(?:--|\/\/|#).*)/,lookbehind:!0},variable:[{pattern:/@(["'`])(?:\\[\s\S]|(?!\1)[^\\])+\1/,greedy:!0},/@[\w.$]+/],string:{pattern:/(^|[^@\\])("|')(?:\\[\s\S]|(?!\2)[^\\]|\2\2)*\2/,greedy:!0,lookbehind:!0},function:/\b(?:AVG|COUNT|FIRST|FORMAT|LAST|LCASE|LEN|MAX|MID|MIN|MOD|NOW|ROUND|SUM|UCASE)(?=\s*\()/i,keyword:/\b(?:ACTION|ADD|AFTER|ALGORITHM|ALL|ALTER|ANALYZE|ANY|APPLY|AS|ASC|AUTHORIZATION|AUTO_INCREMENT|BACKUP|BDB|BEGIN|BERKELEYDB|BIGINT|BINARY|BIT|BLOB|BOOL|BOOLEAN|BREAK|BROWSE|BTREE|BULK|BY|CALL|CASCADED?|CASE|CHAIN|CHAR(?:ACTER|SET)?|CHECK(?:POINT)?|CLOSE|CLUSTERED|COALESCE|COLLATE|COLUMNS?|COMMENT|COMMIT(?:TED)?|COMPUTE|CONNECT|CONSISTENT|CONSTRAINT|CONTAINS(?:TABLE)?|CONTINUE|CONVERT|CREATE|CROSS|CURRENT(?:_DATE|_TIME|_TIMESTAMP|_USER)?|CURSOR|CYCLE|DATA(?:BASES?)?|DATE(?:TIME)?|DAY|DBCC|DEALLOCATE|DEC|DECIMAL|DECLARE|DEFAULT|DEFINER|DELAYED|DELETE|DELIMITERS?|DENY|DESC|DESCRIBE|DETERMINISTIC|DISABLE|DISCARD|DISK|DISTINCT|DISTINCTROW|DISTRIBUTED|DO|DOUBLE|DROP|DUMMY|DUMP(?:FILE)?|DUPLICATE|ELSE(?:IF)?|ENABLE|ENCLOSED|END|ENGINE|ENUM|ERRLVL|ERRORS|ESCAPED?|EXCEPT|EXEC(?:UTE)?|EXISTS|EXIT|EXPLAIN|EXTENDED|FETCH|FIELDS|FILE|FILLFACTOR|FIRST|FIXED|FLOAT|FOLLOWING|FOR(?: EACH ROW)?|FORCE|FOREIGN|FREETEXT(?:TABLE)?|FROM|FULL|FUNCTION|GEOMETRY(?:COLLECTION)?|GLOBAL|GOTO|GRANT|GROUP|HANDLER|HASH|HAVING|HOLDLOCK|HOUR|IDENTITY(?:_INSERT|COL)?|IF|IGNORE|IMPORT|INDEX|INFILE|INNER|INNODB|INOUT|INSERT|INT|INTEGER|INTERSECT|INTERVAL|INTO|INVOKER|ISOLATION|ITERATE|JOIN|KEYS?|KILL|LANGUAGE|LAST|LEAVE|LEFT|LEVEL|LIMIT|LINENO|LINES|LINESTRING|LOAD|LOCAL|LOCK|LONG(?:BLOB|TEXT)|LOOP|MATCH(?:ED)?|MEDIUM(?:BLOB|INT|TEXT)|MERGE|MIDDLEINT|MINUTE|MODE|MODIFIES|MODIFY|MONTH|MULTI(?:LINESTRING|POINT|POLYGON)|NATIONAL|NATURAL|NCHAR|NEXT|NO|NONCLUSTERED|NULLIF|NUMERIC|OFF?|OFFSETS?|ON|OPEN(?:DATASOURCE|QUERY|ROWSET)?|OPTIMIZE|OPTION(?:ALLY)?|ORDER|OUT(?:ER|FILE)?|OVER|PARTIAL|PARTITION|PERCENT|PIVOT|PLAN|POINT|POLYGON|PRECEDING|PRECISION|PREPARE|PREV|PRIMARY|PRINT|PRIVILEGES|PROC(?:EDURE)?|PUBLIC|PURGE|QUICK|RAISERROR|READS?|REAL|RECONFIGURE|REFERENCES|RELEASE|RENAME|REPEAT(?:ABLE)?|REPLACE|REPLICATION|REQUIRE|RESIGNAL|RESTORE|RESTRICT|RETURN(?:S|ING)?|REVOKE|RIGHT|ROLLBACK|ROUTINE|ROW(?:COUNT|GUIDCOL|S)?|RTREE|RULE|SAVE(?:POINT)?|SCHEMA|SECOND|SELECT|SERIAL(?:IZABLE)?|SESSION(?:_USER)?|SET(?:USER)?|SHARE|SHOW|SHUTDOWN|SIMPLE|SMALLINT|SNAPSHOT|SOME|SONAME|SQL|START(?:ING)?|STATISTICS|STATUS|STRIPED|SYSTEM_USER|TABLES?|TABLESPACE|TEMP(?:ORARY|TABLE)?|TERMINATED|TEXT(?:SIZE)?|THEN|TIME(?:STAMP)?|TINY(?:BLOB|INT|TEXT)|TOP?|TRAN(?:SACTIONS?)?|TRIGGER|TRUNCATE|TSEQUAL|TYPES?|UNBOUNDED|UNCOMMITTED|UNDEFINED|UNION|UNIQUE|UNLOCK|UNPIVOT|UNSIGNED|UPDATE(?:TEXT)?|USAGE|USE|USER|USING|VALUES?|VAR(?:BINARY|CHAR|CHARACTER|YING)|VIEW|WAITFOR|WARNINGS|WHEN|WHERE|WHILE|WITH(?: ROLLUP|IN)?|WORK|WRITE(?:TEXT)?|YEAR)\b/i,boolean:/\b(?:TRUE|FALSE|NULL)\b/i,number:/\b0x[\da-f]+\b|\b\d+(?:\.\d*)?|\B\.\d+\b/i,operator:/[-+*\/=%^~]|&&?|\|\|?|!=?|<(?:=>?|<|>)?|>[>=]?|\b(?:AND|BETWEEN|DIV|IN|ILIKE|IS|LIKE|NOT|OR|REGEXP|RLIKE|SOUNDS LIKE|XOR)\b/i,punctuation:/[;[\]()`,.]/}},function(e,t){!function(){if("undefined"!=typeof Prism&&"undefined"!=typeof document){var e=/\n(?!$)/g,t=Prism.plugins.lineNumbers={getLine:function(e,t){if("PRE"===e.tagName&&e.classList.contains("line-numbers")){var n=e.querySelector(".line-numbers-rows");if(n){var r=parseInt(e.getAttribute("data-start"),10)||1,i=r+(n.children.length-1);t<r&&(t=r),t>i&&(t=i);var o=t-r;return n.children[o]}}},resize:function(e){r([e])},assumeViewportIndependence:!0},n=void 0;window.addEventListener("resize",(function(){t.assumeViewportIndependence&&n===window.innerWidth||(n=window.innerWidth,r(Array.prototype.slice.call(document.querySelectorAll("pre.line-numbers"))))})),Prism.hooks.add("complete",(function(t){if(t.code){var n=t.element,i=n.parentNode;if(i&&/pre/i.test(i.nodeName)&&!n.querySelector(".line-numbers-rows")&&Prism.util.isActive(n,"line-numbers")){n.classList.remove("line-numbers"),i.classList.add("line-numbers");var o,a=t.code.match(e),s=a?a.length+1:1,l=new Array(s+1).join("<span></span>");(o=document.createElement("span")).setAttribute("aria-hidden","true"),o.className="line-numbers-rows",o.innerHTML=l,i.hasAttribute("data-start")&&(i.style.counterReset="linenumber "+(parseInt(i.getAttribute("data-start"),10)-1)),t.element.appendChild(o),r([i]),Prism.hooks.run("line-numbers",t)}}})),Prism.hooks.add("line-numbers",(function(e){e.plugins=e.plugins||{},e.plugins.lineNumbers=!0}))}function r(t){if(0!=(t=t.filter((function(e){var t=function(e){if(!e)return null;return window.getComputedStyle?getComputedStyle(e):e.currentStyle||null}(e)["white-space"];return"pre-wrap"===t||"pre-line"===t}))).length){var n=t.map((function(t){var n=t.querySelector("code"),r=t.querySelector(".line-numbers-rows");if(n&&r){var i=t.querySelector(".line-numbers-sizer"),o=n.textContent.split(e);i||((i=document.createElement("span")).className="line-numbers-sizer",n.appendChild(i)),i.innerHTML="0",i.style.display="block";var a=i.getBoundingClientRect().height;return i.innerHTML="",{element:t,lines:o,lineHeights:[],oneLinerHeight:a,sizer:i}}})).filter(Boolean);n.forEach((function(e){var t=e.sizer,n=e.lines,r=e.lineHeights,i=e.oneLinerHeight;r[n.length-1]=void 0,n.forEach((function(e,n){if(e&&e.length>1){var o=t.appendChild(document.createElement("span"));o.style.display="block",o.textContent=e}else r[n]=i}))})),n.forEach((function(e){for(var t=e.sizer,n=e.lineHeights,r=0,i=0;i<n.length;i++)void 0===n[i]&&(n[i]=t.children[r++].getBoundingClientRect().height)})),n.forEach((function(e){var t=e.sizer,n=e.element.querySelector(".line-numbers-rows");t.style.display="none",t.innerHTML="",e.lineHeights.forEach((function(e,t){n.children[t].style.height=e+"px"}))}))}}}()},function(e,t,n){var r=n(460);"string"==typeof r&&(r=[[e.i,r,""]]);var i={hmr:!0,transform:void 0,insertInto:void 0};n(40)(r,i);r.locals&&(e.exports=r.locals)},function(e,t,n){(e.exports=n(39)(!1)).push([e.i,'pre[class*="language-"].line-numbers {\n\tposition: relative;\n\tpadding-left: 3.8em;\n\tcounter-reset: linenumber;\n}\n\npre[class*="language-"].line-numbers > code {\n\tposition: relative;\n\twhite-space: inherit;\n}\n\n.line-numbers .line-numbers-rows {\n\tposition: absolute;\n\tpointer-events: none;\n\ttop: 0;\n\tfont-size: 100%;\n\tleft: -3.8em;\n\twidth: 3em; /* works for line-numbers below 1000 lines */\n\tletter-spacing: -1px;\n\tborder-right: 1px solid #999;\n\n\t-webkit-user-select: none;\n\t-moz-user-select: none;\n\t-ms-user-select: none;\n\tuser-select: none;\n\n}\n\n\t.line-numbers-rows > span {\n\t\tdisplay: block;\n\t\tcounter-increment: linenumber;\n\t}\n\n\t\t.line-numbers-rows > span:before {\n\t\t\tcontent: counter(linenumber);\n\t\t\tcolor: #999;\n\t\t\tdisplay: block;\n\t\t\tpadding-right: 0.8em;\n\t\t\ttext-align: right;\n\t\t}\n',""])},function(e,t,n){var r=n(462);"string"==typeof r&&(r=[[e.i,r,""]]);var i={hmr:!0,transform:void 0,insertInto:void 0};n(40)(r,i);r.locals&&(e.exports=r.locals)},function(e,t,n){(e.exports=n(39)(!1)).push([e.i,'/**\n * GHColors theme by Avi Aryan (http://aviaryan.in)\n * Inspired by Github syntax coloring\n */\n\ncode[class*="language-"],\npre[class*="language-"] {\n\tcolor: #393A34;\n\tfont-family: "Consolas", "Bitstream Vera Sans Mono", "Courier New", Courier, monospace;\n\tdirection: ltr;\n\ttext-align: left;\n\twhite-space: pre;\n\tword-spacing: normal;\n\tword-break: normal;\n\tfont-size: .9em;\n\tline-height: 1.2em;\n\n\t-moz-tab-size: 4;\n\t-o-tab-size: 4;\n\ttab-size: 4;\n\n\t-webkit-hyphens: none;\n\t-moz-hyphens: none;\n\t-ms-hyphens: none;\n\thyphens: none;\n}\n\npre > code[class*="language-"] {\n\tfont-size: 1em;\n}\n\npre[class*="language-"]::-moz-selection, pre[class*="language-"] ::-moz-selection,\ncode[class*="language-"]::-moz-selection, code[class*="language-"] ::-moz-selection {\n\tbackground: #b3d4fc;\n}\n\npre[class*="language-"]::selection, pre[class*="language-"] ::selection,\ncode[class*="language-"]::selection, code[class*="language-"] ::selection {\n\tbackground: #b3d4fc;\n}\n\n/* Code blocks */\npre[class*="language-"] {\n\tpadding: 1em;\n\tmargin: .5em 0;\n\toverflow: auto;\n\tborder: 1px solid #dddddd;\n\tbackground-color: white;\n}\n\n/* Inline code */\n:not(pre) > code[class*="language-"] {\n\tpadding: .2em;\n\tpadding-top: 1px;\n\tpadding-bottom: 1px;\n\tbackground: #f8f8f8;\n\tborder: 1px solid #dddddd;\n}\n\n.token.comment,\n.token.prolog,\n.token.doctype,\n.token.cdata {\n\tcolor: #999988;\n\tfont-style: italic;\n}\n\n.token.namespace {\n\topacity: .7;\n}\n\n.token.string,\n.token.attr-value {\n\tcolor: #e3116c;\n}\n\n.token.punctuation,\n.token.operator {\n\tcolor: #393A34; /* no highlight */\n}\n\n.token.entity,\n.token.url,\n.token.symbol,\n.token.number,\n.token.boolean,\n.token.variable,\n.token.constant,\n.token.property,\n.token.regex,\n.token.inserted {\n\tcolor: #36acaa;\n}\n\n.token.atrule,\n.token.keyword,\n.token.attr-name,\n.language-autohotkey .token.selector {\n\tcolor: #00a4db;\n}\n\n.token.function,\n.token.deleted,\n.language-autohotkey .token.tag {\n\tcolor: #9a050f;\n}\n\n.token.tag,\n.token.selector,\n.language-autohotkey .token.keyword {\n\tcolor: #00009f;\n}\n\n.token.important,\n.token.function,\n.token.bold {\n\tfont-weight: bold;\n}\n\n.token.italic {\n\tfont-style: italic;\n}\n',""])},function(e,t,n){n(31);const r=n(21),i=n(148),o=n(203);angular.module("dbt").factory("graph",["$state","$window","$q","selectorService","project","locationService",function(e,t,n,a,s,l){var c={vertical:{userPanningEnabled:!1,boxSelectionEnabled:!1,maxZoom:1.5},horizontal:{userPanningEnabled:!0,boxSelectionEnabled:!1,maxZoom:1,minZoom:.05}},u={none:{name:"null"},left_right:{name:"dagre",rankDir:"LR",rankSep:200,edgeSep:30,nodeSep:50},top_down:{name:"preset",positions:function(t){var n=e.params.unique_id;if(!n)return{x:0,y:0};var a=d.graph.pristine.dag,s=r.sortBy(o.ancestorNodes(a,n,1)),l=r.sortBy(o.descendentNodes(a,n,1)),c=r.partial(r.includes,s),u=r.partial(r.includes,l),f=a.filterNodes(c),p=a.filterNodes(u);return function(e,t,n,i){console.log("Getting position for ",i,". Primary: ",e);var o,a=100/(1+Math.max(t.length,n.length));if(e==i)return{x:0,y:0};if(r.includes(t,i))o={set:t,index:r.indexOf(t,i),factor:-1,type:"parent"};else{if(!r.includes(n,i))return{x:0,y:0};o={set:n,index:r.indexOf(n,i),factor:1,type:"child"}}var s=o.set.length;if("parent"==o.type)var l={x:(0+o.index)*a,y:-200-100*(s-o.index-1)};else l={x:(0+o.index)*a,y:200+100*(s-o.index-1)};return l}(n,i.alg.topsort(f),i.alg.topsort(p).reverse(),t.data("id"))}}},d={loading:!0,loaded:n.defer(),graph_element:null,orientation:"sidebar",expanded:!1,graph:{options:c.vertical,pristine:{nodes:{},edges:{},dag:null},elements:[],layout:u.none,style:[{selector:"edge.vertical",style:{"curve-style":"unbundled-bezier","target-arrow-shape":"triangle-backcurve","target-arrow-color":"#027599","arrow-scale":1.5,"line-color":"#027599",width:3,"target-distance-from-node":"5px","source-endpoint":"0% 50%","target-endpoint":"0deg"}},{selector:"edge.horizontal",style:{"curve-style":"unbundled-bezier","target-arrow-shape":"triangle-backcurve","target-arrow-color":"#006f8a","arrow-scale":1.5,"target-distance-from-node":"10px","source-distance-from-node":"5px","line-color":"#006f8a",width:3,"source-endpoint":"50% 0%","target-endpoint":"270deg"}},{selector:"edge[selected=1]",style:{"line-color":"#bd6bb6","target-arrow-color":"#bd6bb6","z-index":1}},{selector:'node[display="none"]',style:{display:"none"}},{selector:"node.vertical",style:{"text-margin-x":"5px","background-color":"#0094b3","font-size":"16px",shape:"ellipse",color:"#fff",width:"5px",height:"5px",padding:"5px",content:"data(label)","font-weight":300,"text-valign":"center","text-halign":"right"}},{selector:"node.horizontal",style:{"background-color":"#0094b3","font-size":"24px",shape:"roundrectangle",color:"#fff",width:"label",height:"label",padding:"12px",content:"data(label)","font-weight":300,"font-family":'-apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen, Ubuntu, Cantarell, "Fira Sans", "Droid Sans", "Helvetica Neue", Helvetica, Arial, sans-serif',"text-valign":"center","text-halign":"center",ghost:"yes","ghost-offset-x":"2px","ghost-offset-y":"4px","ghost-opacity":.5,"text-outline-color":"#000","text-outline-width":"1px","text-outline-opacity":.2}},{selector:'node[resource_type="source"]',style:{"background-color":"#5fb825"}},{selector:'node[resource_type="exposure"]',style:{"background-color":"#ff694b"}},{selector:'node[resource_type="metric"]',style:{"background-color":"#ff5688"}},{selector:"node[selected=1]",style:{"background-color":"#bd6bb6"}},{selector:"node.horizontal[selected=1]",style:{"background-color":"#88447d"}},{selector:"node.horizontal.dirty",style:{"background-color":"#919599"}},{selector:"node[hidden=1]",style:{"background-color":"#919599","background-opacity":.5}}],ready:function(e){console.log("graph ready")}}};function f(e,t,n){var i=r.map(e,(function(e){return d.graph.pristine.nodes[e]})),o=[];r.flatten(r.each(e,(function(t){var n=d.graph.pristine.edges[t];r.each(n,(function(t){r.includes(e,t.data.target)&&r.includes(e,t.data.source)&&o.push(t)}))})));var a=r.compact(i).concat(r.compact(o));return r.each(d.graph.elements,(function(e){e.data.display="none",e.data.selected=0,e.data.hidden=0,e.classes=n})),r.each(a,(function(e){e.data.display="element",e.classes=n,t&&r.includes(t,e.data.unique_id)&&(e.data.selected=1),e.data.docs&&!1===e.data.docs.show&&(e.data.hidden=1)})),d.graph.elements=r.filter(a,(function(e){return"element"==e.data.display})),e}function p(e,t,n){var r=d.graph.pristine.dag;if(r){var i=d.graph.pristine.nodes,o=a.selectNodes(r,i,e),s=n?o.matched:[];return f(o.selected,s,t)}}return d.setGraphReady=function(e){d.loading=!1,d.loaded.resolve(),d.graph_element=e},d.ready=function(e){d.loaded.promise.then((function(){e(d)}))},d.manifest={},d.packages=[],d.selected_node=null,d.getCanvasHeight=function(){return.8*t.innerHeight+"px"},s.ready((function(e){d.manifest=e,d.packages=r.uniq(r.map(d.manifest.nodes,"package_name")),r.each(r.filter(d.manifest.nodes,(function(e){var t=r.includes(["model","seed","source","snapshot","analysis","exposure","metric"],e.resource_type),n="test"==e.resource_type&&!e.hasOwnProperty("test_metadata");return t||n})),(function(e){var t={group:"nodes",data:r.assign(e,{parent:e.package_name,id:e.unique_id,is_group:"false"})};d.graph.pristine.nodes[e.unique_id]=t})),r.each(d.manifest.parent_map,(function(e,t){r.each(e,(function(e){var n=d.manifest.nodes[e],i=d.manifest.nodes[t];if(r.includes(["model","source","seed","snapshot"],n.resource_type)&&("test"!=i.resource_type||!i.hasOwnProperty("test_metadata"))){var o=n.unique_id+"|"+i.unique_id,a={group:"edges",data:{source:n.unique_id,target:i.unique_id,unique_id:o}},s=i.unique_id;d.graph.pristine.edges[s]||(d.graph.pristine.edges[s]=[]),d.graph.pristine.edges[s].push(a)}}))}));var t=new i.Graph({directed:!0});r.each(d.graph.pristine.nodes,(function(e){t.setNode(e.data.unique_id,e.data.name)})),r.each(d.graph.pristine.edges,(function(e){r.each(e,(function(e){t.setEdge(e.data.source,e.data.target)}))})),d.graph.pristine.dag=t,d.graph.elements=r.flatten(r.values(d.graph.pristine.nodes).concat(r.values(d.graph.pristine.edges))),f(t.nodes())})),d.hideGraph=function(){d.orientation="sidebar",d.expanded=!1},d.showVerticalGraph=function(e,t){d.orientation="sidebar",t&&(d.expanded=!0);var n=p(r.assign({},a.options,{include:"+"+e+"+",exclude:"",hops:1}),"vertical",!0);return d.graph.layout=u.top_down,d.graph.options=c.vertical,n},d.showFullGraph=function(e){d.orientation="fullscreen",d.expanded=!0;var t=r.assign({},a.options);e?(t.include="+"+e+"+",t.exclude=""):(t.include="",t.exclude="");var n=p(t,"horizontal",!0);return d.graph.layout=u.left_right,d.graph.options=c.horizontal,l.setState(t),n},d.updateGraph=function(e){d.orientation="fullscreen",d.expanded=!0;var t=p(e,"horizontal",!1);return d.graph.layout=u.left_right,d.graph.options=c.horizontal,l.setState(e),t},d.deselectNodes=function(){"fullscreen"==d.orientation&&d.graph_element.elements().data("selected",0)},d.selectNode=function(e){if("fullscreen"==d.orientation){d.graph.pristine.nodes[e];var t=d.graph.pristine.dag,n=r.indexBy(o.ancestorNodes(t,e)),i=r.indexBy(o.descendentNodes(t,e));n[e]=e,i[e]=e;var a=d.graph_element;r.each(d.graph.elements,(function(t){var r=a.$id(t.data.id);n[t.data.source]&&n[t.data.target]||i[t.data.source]&&i[t.data.target]||t.data.unique_id==e?r.data("selected",1):r.data("selected",0)}))}},d.markDirty=function(e){d.markAllClean(),r.each(e,(function(e){d.graph_element.$id(e).addClass("dirty")}))},d.markAllClean=function(){d.graph_element&&d.graph_element.elements().removeClass("dirty")},d}])},function(e,t,n){n(31);const r=n(21),i=n(465);angular.module("dbt").factory("selectorService",["$state",function(e){var t={include:"",exclude:"",packages:[],tags:[null],resource_types:["model","seed","snapshot","source","test","analysis","exposure","metric"],depth:1},n={view_node:null,selection:{clean:r.clone(t),dirty:r.clone(t)},options:{packages:[],tags:[null],resource_types:["model","seed","snapshot","source","test","analysis","exposure","metric"]},init:function(e){r.each(e,(function(e,r){n.options[r]=e,t[r]=e,n.selection.clean[r]=e,n.selection.dirty[r]=e}))},resetSelection:function(e){var i={include:e&&r.includes(["model","seed","snapshot"],e.resource_type)?"+"+e.name+"+":e&&"source"==e.resource_type?"+source:"+e.source_name+"."+e.name+"+":e&&"exposure"==e.resource_type?"+exposure:"+e.name:e&&"metric"==e.resource_type?"+metric:"+e.name:e&&r.includes(["analysis","test"],e.resource_type)?"+"+e.name:""},o=r.assign({},t,i);n.selection.clean=r.clone(o),n.selection.dirty=r.clone(o),n.view_node=e},getViewNode:function(){return n.view_node},excludeNode:function(e,t){var r,i=n.selection.dirty.exclude,o=t.parents?"+":"",a=t.children?"+":"",s=i.length>0?" ":"";"source"==e.resource_type?(o+="source:",r=e.source_name+"."+e.name):["exposure","metric"].indexOf(e.resource_type)>-1?(o+=e.resource_type+":",r=e.name):r=e.name;var l=i+s+o+r+a;return n.selection.dirty.exclude=l,n.updateSelection()},selectSource:function(e,t){var r="source:"+e+(t.children?"+":"");return n.selection.dirty.include=r,n.updateSelection()},clearViewNode:function(){n.view_node=null},isDirty:function(){return!r.isEqual(n.selection.clean,n.selection.dirty)},updateSelection:function(){return n.selection.clean=r.clone(n.selection.dirty),n.selection.clean},selectNodes:function(e,t,n){return i.selectNodes(e,t,n)}};return n}])},function(e,t,n){const r=n(21),i=n(466);function o(e,t){return t||(t=" "),r.filter(r.uniq(e.split(t)),(function(e){return e.length>0}))}function a(e){var t={raw:e,select_at:!1,select_children:!1,children_depth:null,select_parents:!1,parents_depth:null};const n=new RegExp(""+/^/.source+/(?<childs_parents>(\@))?/.source+/(?<parents>((?<parents_depth>(\d*))\+))?/.source+/((?<method>([\w.]+)):)?/.source+/(?<value>(.*?))/.source+/(?<children>(\+(?<children_depth>(\d*))))?/.source+/$/.source).exec(e).groups;t.select_at="@"==n.childs_parents,t.select_parents=!!n.parents,t.select_children=!!n.children,n.parents_depth&&(t.parents_depth=parseInt(n.parents_depth)),n.children_depth&&(t.children_depth=parseInt(n.children_depth));var r=n.method,i=n.value;return r?-1!=r.indexOf(".")&&([r,selector_modifier]=r.split(".",2),i={config:selector_modifier,value:i}):r="implicit",t.selector_type=r,t.selector_value=i,t}function s(e){var t=o(e," ");return r.map(t,(function(e){var t=o(e,",");return t.length>1?{method:"intersect",selectors:r.map(t,a)}:{method:"none",selectors:r.map([e],a)}}))}function l(e,t){var n=s(e),i=null,o=null;return r.each(n,(function(e){var n="intersect"==e.method?r.intersection:r.union;r.each(e.selectors,(function(e){var r=t(e);null===i?(i=r.matched,o=r.selected):(i=n(i,r.matched),o=n(o,r.selected))}))})),{matched:i||[],selected:o||[]}}e.exports={splitSpecs:o,parseSpec:a,parseSpecs:s,buildSpec:function(e,t,n){return{include:s(e),exclude:s(t),hops:n}},applySpec:l,selectNodes:function(e,t,n){n.include,n.exclude;var o,a=r.partial(i.getNodesFromSpec,e,t,n.hops);r.values(t),o=0==n.include.trim().length?{selected:e.nodes(),matched:[]}:l(n.include,a);var s=l(n.exclude,a),c=o.selected,u=o.matched;c=r.difference(c,s.selected),u=r.difference(u,s.matched);var d=[];return r.each(c,(function(e){var i=t[e];i.data.tags||(i.data.tags=[]);var o=r.includes(n.packages,i.data.package_name),a=r.intersection(n.tags,i.data.tags).length>0,s=r.includes(n.tags,null)&&0==i.data.tags.length,l=r.includes(n.resource_types,i.data.resource_type);o&&(a||s)&&l||d.push(i.data.unique_id)})),{selected:r.difference(c,d),matched:r.difference(u,d)}}}},function(e,t,n){const r=n(21),i=n(203);var o="fqn",a="tag",s="source",l="exposure",c="metric",u="path",d="package",f="config",p="test_name",h="test_type",g={};function v(e,t){if(t===r.last(e))return!0;var n=e.reduce((e,t)=>e.concat(t.split(".")),[]),i=t.split(".");if(n.length<i.length)return!1;for(var o=0;o<i.length;o++){var a=i[o];if("*"==a)return!0;if(n[o]!=a)return!1}return!0}function m(e,t){var n=[];return r.each(e,(function(e){var i=e.data,o=i.fqn;if(o&&"source"!=i.resource_type&&"exposure"!=i.resource_type&&"metric"!=i.resource_type){var a=r.rest(o);(v(o,t)||v(a,t))&&n.push(i)}})),r.uniq(n)}function b(e,t){var n=[],i=t.split("/");return r.each(e,(function(e){var t=(e.data.original_file_path||"").split("/"),o=!0;r.each(i,(function(e,n){"*"==e||""==e||e!=t[n]&&(o=!1)})),o&&n.push(e.data)})),n}function y(e,t){var n=[];return r.each(e,(function(e){var i=e.data.tags;r.includes(i,t)&&n.push(e.data)})),n}function x(e,t){var n=[];return r.each(e,(function(e){e.data.package_name==t&&n.push(e.data)})),n}function w(e,t){var n=[];return r.each(e,(function(e){var r=e.data;r.config&&r.config[t.config]==t.value&&n.push(r)})),n}function k(e,t){var n=[];return r.each(e,(function(e){var r=e.data;r.test_metadata&&r.test_metadata.name==t&&n.push(r)})),n}function A(e,t){var n=[];return r.each(e,(function(e){var r=e.data;if("test"!=r.resource_type)return!1;(r.hasOwnProperty("test_metadata")&&["schema","generic"].indexOf(t)>-1||!r.hasOwnProperty("test_metadata")&&["data","singular"].indexOf(t)>-1)&&n.push(r)})),n}function E(e,t){var n=[];return r.each(e,(function(e){var r=e.data;if("source"==r.resource_type){var i,o,a=r.source_name,s=r.name;-1!=t.indexOf(".")?[i,o]=t.split(".",2):(i=t,o=null),("*"==i||i==a&&"*"===o||i==a&&o===s||i==a&&null===o)&&n.push(e.data)}})),n}g["implicit"]=function(e,t){var n=m(e,t),i=b(e,t),o=r.uniq(r.map(n,"unique_id").concat(r.map(i,"unique_id")));return r.map(o,t=>e[t].data)},g[o]=m,g[a]=y,g[s]=E,g[l]=function(e,t){var n=[];return r.each(e,(function(e){var r=e.data;if("exposure"==r.resource_type){var i=r.name;("*"==t||t==i)&&n.push(e.data)}})),n},g[c]=function(e,t){var n=[];return r.each(e,(function(e){var r=e.data;if("metric"==r.resource_type){var i=r.name;("*"==t||t==i)&&n.push(e.data)}})),n},g[u]=b,g[d]=x,g[f]=w,g[p]=k,g[h]=A,e.exports={isFQNMatch:v,getNodesByFQN:m,getNodesByTag:y,getNodesBySource:E,getNodesByPath:b,getNodesByPackage:x,getNodesByConfig:w,getNodesByTestName:k,getNodesByTestType:A,getNodesFromSpec:function(e,t,n,o){const a=g[o.selector_type];if(!a)return console.log("Node matcher for selector",o.selector_type,"is invalid"),{selected:[],matched:[]};var s=a(t,o.selector_value),l=[],c=[];return r.each(s,(function(t){var a=t.unique_id;c.push(t.unique_id);var s=[],u=[],d=[];if(o.select_at&&(d=r.union(i.selectAt(e,a))),o.select_parents){var f=n||o.parents_depth;s=i.ancestorNodes(e,a,f)}if(o.select_children){f=n||o.children_depth;u=i.descendentNodes(e,a,f)}l=r.union([a],l,u,s,d)})),{selected:l,matched:c}}}},function(e,t,n){const r=n(9);n(468);r.module("dbt").factory("trackingService",["$location","selectorService","$rootScope",function(e,t,n){var r={initialized:!1,snowplow:null,project_id:null,init:function(e){r.initialized||(r.initialized=!0,r.project_id=e.project_id,!0===e.track&&r.turn_on_tracking())},isHosted:function(){return window.location.hostname.indexOf(".getdbt.com")>-1},turn_on_tracking:function(){var e,t,n,i,o,a;e=window,t=document,n="script",e[i="snowplow"]||(e.GlobalSnowplowNamespace=e.GlobalSnowplowNamespace||[],e.GlobalSnowplowNamespace.push(i),e[i]=function(){(e[i].q=e[i].q||[]).push(arguments)},e[i].q=e[i].q||[],o=t.createElement(n),a=t.getElementsByTagName(n)[0],o.async=1,o.src="//d1fc8wv8zag5ca.cloudfront.net/2.9.0/sp.js",a.parentNode.insertBefore(o,a));var s={appId:"dbt-docs",forceSecureTracker:!0,respectDoNotTrack:!0,userFingerprint:!1,contexts:{webPage:!0}};r.isHosted()&&(s.cookieDomain=".getdbt.com"),r.snowplow=window.snowplow,r.snowplow("newTracker","sp","fishtownanalytics.sinter-collect.com",s),r.snowplow("enableActivityTracking",30,30),r.track_pageview()},fuzzUrls:function(){r.isHosted()||(r.snowplow("setCustomUrl","https://fuzzed.getdbt.com/"),r.snowplow("setReferrerUrl","https://fuzzed.getdbt.com/"))},getContext:function(){return[{schema:"iglu:com.dbt/dbt_docs/jsonschema/1-0-0",data:{is_cloud_hosted:r.isHosted(),core_project_id:r.project_id}}]},track_pageview:function(){if(r.snowplow){r.fuzzUrls();r.snowplow("trackPageView",null,r.getContext())}},track_event:function(e,t,n,i){r.snowplow&&(r.fuzzUrls(),r.snowplow("trackStructEvent","dbt-docs",e,t,n,i,r.getContext()))},track_graph_interaction:function(e,t){r.snowplow&&(r.fuzzUrls(),r.track_event("graph","interact",e,t))}};return r}])},function(e,t,n){var r,i,o,a,s;r=n(469),i=n(204).utf8,o=n(470),a=n(204).bin,(s=function(e,t){e.constructor==String?e=t&&"binary"===t.encoding?a.stringToBytes(e):i.stringToBytes(e):o(e)?e=Array.prototype.slice.call(e,0):Array.isArray(e)||e.constructor===Uint8Array||(e=e.toString());for(var n=r.bytesToWords(e),l=8*e.length,c=1732584193,u=-271733879,d=-1732584194,f=271733878,p=0;p<n.length;p++)n[p]=16711935&(n[p]<<8|n[p]>>>24)|4278255360&(n[p]<<24|n[p]>>>8);n[l>>>5]|=128<<l%32,n[14+(l+64>>>9<<4)]=l;var h=s._ff,g=s._gg,v=s._hh,m=s._ii;for(p=0;p<n.length;p+=16){var b=c,y=u,x=d,w=f;c=h(c,u,d,f,n[p+0],7,-680876936),f=h(f,c,u,d,n[p+1],12,-389564586),d=h(d,f,c,u,n[p+2],17,606105819),u=h(u,d,f,c,n[p+3],22,-1044525330),c=h(c,u,d,f,n[p+4],7,-176418897),f=h(f,c,u,d,n[p+5],12,1200080426),d=h(d,f,c,u,n[p+6],17,-1473231341),u=h(u,d,f,c,n[p+7],22,-45705983),c=h(c,u,d,f,n[p+8],7,1770035416),f=h(f,c,u,d,n[p+9],12,-1958414417),d=h(d,f,c,u,n[p+10],17,-42063),u=h(u,d,f,c,n[p+11],22,-1990404162),c=h(c,u,d,f,n[p+12],7,1804603682),f=h(f,c,u,d,n[p+13],12,-40341101),d=h(d,f,c,u,n[p+14],17,-1502002290),c=g(c,u=h(u,d,f,c,n[p+15],22,1236535329),d,f,n[p+1],5,-165796510),f=g(f,c,u,d,n[p+6],9,-1069501632),d=g(d,f,c,u,n[p+11],14,643717713),u=g(u,d,f,c,n[p+0],20,-373897302),c=g(c,u,d,f,n[p+5],5,-701558691),f=g(f,c,u,d,n[p+10],9,38016083),d=g(d,f,c,u,n[p+15],14,-660478335),u=g(u,d,f,c,n[p+4],20,-405537848),c=g(c,u,d,f,n[p+9],5,568446438),f=g(f,c,u,d,n[p+14],9,-1019803690),d=g(d,f,c,u,n[p+3],14,-187363961),u=g(u,d,f,c,n[p+8],20,1163531501),c=g(c,u,d,f,n[p+13],5,-1444681467),f=g(f,c,u,d,n[p+2],9,-51403784),d=g(d,f,c,u,n[p+7],14,1735328473),c=v(c,u=g(u,d,f,c,n[p+12],20,-1926607734),d,f,n[p+5],4,-378558),f=v(f,c,u,d,n[p+8],11,-2022574463),d=v(d,f,c,u,n[p+11],16,1839030562),u=v(u,d,f,c,n[p+14],23,-35309556),c=v(c,u,d,f,n[p+1],4,-1530992060),f=v(f,c,u,d,n[p+4],11,1272893353),d=v(d,f,c,u,n[p+7],16,-155497632),u=v(u,d,f,c,n[p+10],23,-1094730640),c=v(c,u,d,f,n[p+13],4,681279174),f=v(f,c,u,d,n[p+0],11,-358537222),d=v(d,f,c,u,n[p+3],16,-722521979),u=v(u,d,f,c,n[p+6],23,76029189),c=v(c,u,d,f,n[p+9],4,-640364487),f=v(f,c,u,d,n[p+12],11,-421815835),d=v(d,f,c,u,n[p+15],16,530742520),c=m(c,u=v(u,d,f,c,n[p+2],23,-995338651),d,f,n[p+0],6,-198630844),f=m(f,c,u,d,n[p+7],10,1126891415),d=m(d,f,c,u,n[p+14],15,-1416354905),u=m(u,d,f,c,n[p+5],21,-57434055),c=m(c,u,d,f,n[p+12],6,1700485571),f=m(f,c,u,d,n[p+3],10,-1894986606),d=m(d,f,c,u,n[p+10],15,-1051523),u=m(u,d,f,c,n[p+1],21,-2054922799),c=m(c,u,d,f,n[p+8],6,1873313359),f=m(f,c,u,d,n[p+15],10,-30611744),d=m(d,f,c,u,n[p+6],15,-1560198380),u=m(u,d,f,c,n[p+13],21,1309151649),c=m(c,u,d,f,n[p+4],6,-145523070),f=m(f,c,u,d,n[p+11],10,-1120210379),d=m(d,f,c,u,n[p+2],15,718787259),u=m(u,d,f,c,n[p+9],21,-343485551),c=c+b>>>0,u=u+y>>>0,d=d+x>>>0,f=f+w>>>0}return r.endian([c,u,d,f])})._ff=function(e,t,n,r,i,o,a){var s=e+(t&n|~t&r)+(i>>>0)+a;return(s<<o|s>>>32-o)+t},s._gg=function(e,t,n,r,i,o,a){var s=e+(t&r|n&~r)+(i>>>0)+a;return(s<<o|s>>>32-o)+t},s._hh=function(e,t,n,r,i,o,a){var s=e+(t^n^r)+(i>>>0)+a;return(s<<o|s>>>32-o)+t},s._ii=function(e,t,n,r,i,o,a){var s=e+(n^(t|~r))+(i>>>0)+a;return(s<<o|s>>>32-o)+t},s._blocksize=16,s._digestsize=16,e.exports=function(e,t){if(null==e)throw new Error("Illegal argument "+e);var n=r.wordsToBytes(s(e,t));return t&&t.asBytes?n:t&&t.asString?a.bytesToString(n):r.bytesToHex(n)}},function(e,t){var n,r;n="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",r={rotl:function(e,t){return e<<t|e>>>32-t},rotr:function(e,t){return e<<32-t|e>>>t},endian:function(e){if(e.constructor==Number)return 16711935&r.rotl(e,8)|4278255360&r.rotl(e,24);for(var t=0;t<e.length;t++)e[t]=r.endian(e[t]);return e},randomBytes:function(e){for(var t=[];e>0;e--)t.push(Math.floor(256*Math.random()));return t},bytesToWords:function(e){for(var t=[],n=0,r=0;n<e.length;n++,r+=8)t[r>>>5]|=e[n]<<24-r%32;return t},wordsToBytes:function(e){for(var t=[],n=0;n<32*e.length;n+=8)t.push(e[n>>>5]>>>24-n%32&255);return t},bytesToHex:function(e){for(var t=[],n=0;n<e.length;n++)t.push((e[n]>>>4).toString(16)),t.push((15&e[n]).toString(16));return t.join("")},hexToBytes:function(e){for(var t=[],n=0;n<e.length;n+=2)t.push(parseInt(e.substr(n,2),16));return t},bytesToBase64:function(e){for(var t=[],r=0;r<e.length;r+=3)for(var i=e[r]<<16|e[r+1]<<8|e[r+2],o=0;o<4;o++)8*r+6*o<=8*e.length?t.push(n.charAt(i>>>6*(3-o)&63)):t.push("=");return t.join("")},base64ToBytes:function(e){e=e.replace(/[^A-Z0-9+\/]/gi,"");for(var t=[],r=0,i=0;r<e.length;i=++r%4)0!=i&&t.push((n.indexOf(e.charAt(r-1))&Math.pow(2,-2*i+8)-1)<<2*i|n.indexOf(e.charAt(r))>>>6-2*i);return t}},e.exports=r},function(e,t){function n(e){return!!e.constructor&&"function"==typeof e.constructor.isBuffer&&e.constructor.isBuffer(e)} /*! * Determine if an object is a Buffer * * @author Feross Aboukhadijeh <https://feross.org> * @license MIT */ -e.exports=function(e){return null!=e&&(n(e)||function(e){return"function"==typeof e.readFloatLE&&"function"==typeof e.slice&&n(e.slice(0,0))}(e)||!!e._isBuffer)}},function(e,t,n){n(9).module("dbt").factory("locationService",["$state",function(e){var t={};return t.parseState=function(e){return function(e){return{selected:{include:e.g_i||"",exclude:e.g_e||""},show_graph:!!e.g_v}}(e)},t.setState=function(t){var n=function(e){var t={g_v:1};return t.g_i=e.include,t.g_e=e.exclude,t}(t),r=e.current.name;e.go(r,n)},t.clearState=function(){var t=e.current.name;e.go(t,{g_i:null,g_e:null,g_v:null})},t}])},function(e,t,n){"use strict";const r=n(9),i=n(202);r.module("dbt").controller("OverviewCtrl",["$scope","$state","project",function(e,t,n){e.overview_md="(loading)",n.ready((function(n){let r=t.params.project_name?t.params.project_name:null;var o=n.docs["dbt.__overview__"],a=i.filter(n.docs,{name:"__overview__"});if(i.each(a,(function(e){"dbt"!=e.package_name&&(o=e)})),null!==r){o=n.docs[`${r}.__${r}__`]||o;let e=i.filter(n.docs,{name:`__${r}__`});i.each(e,e=>{e.package_name!==r&&(o=e)})}e.overview_md=o.block_contents}))}])},function(e,t,n){"use strict";n(9).module("dbt").controller("SourceListCtrl",["$scope","$state","project",function(e,t,n){e.source=t.params.source,e.model={},e.extra_table_fields=[],e.has_more_info=function(e){return(e.description||"").length},e.toggle_source_expanded=function(t){e.has_more_info(t)&&(t.expanded=!t.expanded)},n.ready((function(t){var n=_.filter(t.nodes,(function(t){return t.source_name==e.source}));if(0!=n.length){n.sort((e,t)=>e.name.localeCompare(t.name));var r=n[0];e.model={name:e.source,source_description:r.source_description,sources:n};var i=_.uniq(_.map(n,"metadata.owner")),o=_.uniq(_.map(n,"database")),a=_.uniq(_.map(n,"schema"));e.extra_table_fields=[{name:"Loader",value:r.loader},{name:1==i.length?"Owner":"Owners",value:i.join(", ")},{name:1==o.length?"Database":"Databases",value:o.join(", ")},{name:1==a.length?"Schema":"Schemas",value:a.join(", ")},{name:"Tables",value:n.length}]}}))}])},function(e,t,n){const r=n(9),i={main:n(475),overview:n(476),graph:n(477),source:n(205),source_list:n(478),model:n(479),source:n(205),snapshot:n(480),seed:n(481),test:n(482),analysis:n(483),macro:n(484),exposure:n(485),metric:n(486)};r.module("dbt").config(["$stateProvider","$urlRouterProvider",function(e,t){var n="g_v&g_i&g_e&g_p&g_n";t.otherwise("/overview"),e.state("dbt",{url:"/",abstract:!0,controller:"MainController",templateUrl:i.main}).state("dbt.overview",{url:"overview?"+n,controller:"OverviewCtrl",templateUrl:i.overview}).state("dbt.project_overview",{url:"overview/:project_name?"+n,controller:"OverviewCtrl",templateUrl:i.overview,params:{project_name:{type:"string"}}}).state("dbt.graph",{url:"graph",controller:"GraphCtrl",templateUrl:i.graph}).state("dbt.model",{url:"model/:unique_id?section&"+n,controller:"ModelCtrl",templateUrl:i.model,params:{unique_id:{type:"string"}}}).state("dbt.seed",{url:"seed/:unique_id?section&"+n,controller:"SeedCtrl",templateUrl:i.seed,params:{unique_id:{type:"string"}}}).state("dbt.snapshot",{url:"snapshot/:unique_id?section&"+n,controller:"SnapshotCtrl",templateUrl:i.snapshot,params:{unique_id:{type:"string"}}}).state("dbt.test",{url:"test/:unique_id?section&"+n,controller:"TestCtrl",templateUrl:i.test,params:{unique_id:{type:"string"}}}).state("dbt.analysis",{url:"analysis/:unique_id?section&"+n,controller:"AnalysisCtrl",templateUrl:i.analysis,params:{unique_id:{type:"string"}}}).state("dbt.source",{url:"source/:unique_id?section&"+n,controller:"SourceCtrl",templateUrl:i.source,params:{unique_id:{type:"string"}}}).state("dbt.source_list",{url:"source_list/:source?section&"+n,controller:"SourceListCtrl",templateUrl:i.source_list,params:{source:{type:"string"}}}).state("dbt.macro",{url:"macro/:unique_id?section",controller:"MacroCtrl",templateUrl:i.macro,params:{unique_id:{type:"string"}}}).state("dbt.exposure",{url:"exposure/:unique_id?section&"+n,controller:"ReportCtrl",templateUrl:i.exposure,params:{unique_id:{type:"string"}}}).state("dbt.metric",{url:"metric/:unique_id?section&"+n,controller:"ReportCtrl",templateUrl:i.metric,params:{unique_id:{type:"string"}}})}])},function(e,t){var n="/main/main.html";window.angular.module("ng").run(["$templateCache",function(e){e.put(n,'<style>\n.no-x-overflow {\n overflow-x: hidden;\n}\n\n.logo {\n width: 140px;\n height: 46px ;\n}\n</style>\n\n<div>\n <graph-launcher></graph-launcher>\n\n <div class="app app-row">\n <div class="app-menu app-column">\n <div class="app-overlay" data-toggle=".app-menu"></div>\n <div class="app-header app-navbar app-shadow app-pad">\n <div class="app-row app-middle">\n <div class="app-body">\n <div class="logo">\n <img style="width: 100px; height: 40px" class="logo" ng-src="{{ logo }}" />\n </div>\n </div>\n </div>\n </div>\n <div class="app-body">\n <div class="app-scroll app-pad app-flush-right no-x-overflow">\n <model-tree tree="tree"></model-tree>\n </div>\n </div>\n </div>\n <div class="app-content app-column">\n <div class="app-header app-navbar app-shadow">\n <div class="app-frame app-pad app-row app-middle">\n <input\n id="search"\n ng-model="search.query"\n ng-focus="onSearchFocus($event, true)"\n ng-keydown="onSearchKeypress($event)"\n type="text"\n class="form-control"\n placeholder="Search for models..." />\n <div class="app-body">\n </div>\n <div class="app-footer app-icn" ng-show="search.is_focused" ng-click="clearSearch()">\n <svg class="icn icn-md"><use xlink:href="#icn-close"></use></svg>\n </div>\n </div>\n </div>\n <div class=\'app-body\' ng-show=\'!search.is_focused\' ui-view></div>\n <div class="app-body" ng-show="search.is_focused">\n <docs-search query="search.query" results="search.results" on-select="clearSearch()"></docs-search>\n </div>\n </div>\n </div>\n</div>\n')}]),e.exports=n},function(e,t){var n="/overview/overview.html";window.angular.module("ng").run(["$templateCache",function(e){e.put(n,'<div class="app-details app-scroll app-pad">\n <app-scroll div class="app-frame app-pad">\n <div class="panel panel-default">\n <div class="panel-body">\n <p marked=\'overview_md\'></p>\n </div>\n </div>\n </div>\n</div>\n')}]),e.exports=n},function(e,t){var n="/graph/graph.html";window.angular.module("ng").run(["$templateCache",function(e){e.put(n,'<div ng-controller="GraphCtrl" id=\'graph-container\' style="width: 100%">\n <div class=\'row viz-container\' style="margin: 0">\n <div class=\'col-md-12\'>\n <div graph-viz\n viz-options="graph.options"\n viz-elements="graph.elements"\n viz-style="graph.style"\n viz-layout="graph.layout"\n viz-ready="graph.ready"\n viz-size="{height: \'800px\', width: \'100%\'}"></div>\n </div>\n </div>\n</div>\n')}]),e.exports=n},function(e,t){var n="/sources/source_list.html";window.angular.module("ng").run(["$templateCache",function(e){e.put(n,'<style>\n/* TODO */\n.section-target {\n top: -8em;\n}\n\n.noflex {\n flex: 0 0 160px !important;\n}\n\n.highlight {\n color: #24292e;\n background-color: white;\n}\n\n</style>\n\n<div class=\'app-scroll\'>\n <div class="app-links app-sticky">\n <div class="app-title">\n <div class="app-frame app-pad app-flush-bottom">\n <h1>\n <span class="break">{{ source }}</span>\n <small>source</small>\n </h1>\n </div>\n </div>\n <div class="app-frame app-pad-h">\n <ul class="nav nav-tabs">\n <li ui-sref-active=\'active\'><a ui-sref="dbt.source_list({\'#\': \'details\'})">Details</a></li>\n <li ui-sref-active=\'active\'><a ui-sref="dbt.source_list({\'#\': \'description\'})">Description</a></li>\n <li ui-sref-active=\'active\'><a ui-sref="dbt.source_list({\'#\': \'sources\'})">Sources</a></li>\n </ul>\n </div>\n </div>\n <div class="app-details">\n <div class="app-frame app-pad">\n <section class="section">\n <div class="section-target" id="details"></div>\n <table-details model="model" extras="extra_table_fields"/>\n </section>\n\n <section class="section">\n <div class="section-target" id="description"></div>\n <div class="section-content">\n <h6>Description</h6>\n <div class="panel">\n <div class="panel-body">\n <div ng-if="model.source_description" class="model-markdown" marked="model.source_description"></div>\n <div ng-if="!model.source_description">This {{ model.resource_type }} is not currently documented</div>\n </div>\n </div>\n </div>\n </section>\n\n\n <section class="section">\n <div class="section-target" id="sources"></div>\n <div class="section-content">\n <h6>Source Tables</h6>\n <div class="panel">\n <div class="panel-body">\n <div class="table-responsive" style="max-height: 800px; overflow-y: scroll;" ng-if="!_.isEmpty(model.sources)">\n <table class="table table-borderless table-hover">\n <thead>\n <tr>\n <th style="background-color: white; position: sticky; top: 0; z-index: 1;">Source</th>\n <th style="background-color: white; position: sticky; top: 0; z-index: 1;">Table</th>\n <th style="background-color: white; position: sticky; top: 0; z-index: 1;">Description</th>\n <th style="background-color: white; position: sticky; top: 0; z-index: 1;">Link</th>\n <th style="width: 1px; background-color: white; position: sticky; top: 0; z-index: 1;" class=\'text-center\'>More?</th>\n </tr>\n </thead>\n <tbody>\n <tr\n ng-repeat-start="source in model.sources track by source.name"\n ng-click="toggle_source_expanded(source)"\n class="column-row"\n ng-class="{\'column-row-selected\': source.expanded}"\n ng-style="{cursor: has_more_info(source) ? \'pointer\' : \'auto\'}">\n <td>\n <div>\n <span class=\'text-dark\'>{{ source.source_name }}</span>\n </div>\n </td>\n <td>\n <span class=\'text-dark\'>{{ source.name }}</p>\n </td>\n <td style="text-overflow: ellipsis; overflow-x: hidden; white-space: nowrap; max-width: 1px;">\n <span ng-show="!column.expanded">{{ source.description }}</span>\n </td>\n <td>\n <a ui-sref="dbt.source({unique_id: source.unique_id})">View docs</a>\n </td>\n <td class=\'text-center\'>\n <span class=\'text-light\' ng-show="has_more_info(source)">\n <span ng-if="source.expanded">\n <svg class="icn"><use xlink:href="#icn-up"></use></svg>\n </span>\n <span ng-if="!source.expanded">\n <svg class="icn"><use xlink:href="#icn-right"></use></svg>\n </span>\n </span>\n </td>\n </tr>\n <tr ng-repeat-end ng-show="source.expanded" style="background-color: white; padding: 10px">\n <td colspan="5" class="column-expanded">\n <div style="padding: 5px 20px">\n <div style="margin-bottom: 15px">\n <h5>Description</h5>\n <span marked="source.description"></span>\n </div>\n </div>\n </td>\n </tr>\n </tbody>\n </table>\n </div>\n </div>\n </div>\n </div>\n </section>\n </div>\n </div>\n</div>\n')}]),e.exports=n},function(e,t){var n="/docs/model.html";window.angular.module("ng").run(["$templateCache",function(e){e.put(n,'<style>\n/* TODO */\n.section-target {\n top: -8em;\n}\n\n.noflex {\n flex: 0 0 160px !important;\n}\n\n.highlight {\n color: #24292e;\n background-color: white;\n}\n\n</style>\n\n<div class=\'app-scroll\'>\n <div class="app-links app-sticky">\n <div class="app-title">\n <div class="app-frame app-pad app-flush-bottom">\n <h1 ng-if="model.docs.show === false">\n <small class=\'text-bold text-right\'>\n <i data-icon="eye"></i>\n This model is hidden\n </small>\n </h1>\n <h1>\n <span class="break">{{ model.name }}</span>\n <small>{{ model.config.materialized }}</small>\n </h1>\n </div>\n </div>\n <div class="app-frame app-pad-h">\n <ul class="nav nav-tabs">\n <li ui-sref-active=\'active\'><a ui-sref="dbt.model({\'#\': \'details\'})">Details</a></li>\n <li ui-sref-active=\'active\'><a ui-sref="dbt.model({\'#\': \'description\'})">Description</a></li>\n <li ui-sref-active=\'active\'><a ui-sref="dbt.model({\'#\': \'columns\'})">Columns</a></li>\n <li ui-sref-active=\'active\' ng-show = "referencesLength != 0"><a ui-sref="dbt.model({\'#\': \'referenced_by\'})">Referenced By</a></li>\n <li ui-sref-active=\'active\' ng-show = "parentsLength != 0"><a ui-sref="dbt.model({\'#\': \'depends_on\'})">Depends On</a></li>\n <li ui-sref-active=\'active\'><a ui-sref="dbt.model({\'#\': \'code\'})">SQL</a></li>\n </ul>\n </div>\n </div>\n <div class="app-details">\n <div class="app-frame app-pad">\n <section class="section">\n <div class="section-target" id="details"></div>\n <table-details model="model"></table-details>\n </section>\n\n <section class="section">\n <div class="section-target" id="description"></div>\n <div class="section-content">\n <h6>Description</h6>\n <div class="panel">\n <div class="panel-body">\n <div ng-if="model.description" class="model-markdown" marked="model.description"></div>\n <div ng-if="!model.description">This {{ model.resource_type }} is not currently documented</div>\n </div>\n </div>\n </div>\n </section>\n\n <section class="section">\n <div class="section-target" id="columns"></div>\n <div class="section-content">\n <h6>Columns</h6>\n <column-details model="model" />\n </div>\n </section>\n\n <section class="section" ng-show = "referencesLength != 0">\n <div class="section-target" id="referenced_by"></div>\n <div class="section-content">\n <h6>Referenced By</h6>\n <reference-list references="references" node="model" />\n </div>\n </section>\n\n <section class="section" ng-show = "parentsLength != 0">\n <div class="section-target" id="depends_on"></div>\n <div class="section-content">\n <h6>Depends On</h6>\n <reference-list references="parents" node="model" />\n </div>\n </section>\n\n <section class="section">\n <div class="section-target" id="code"></div>\n <div class="section-content">\n <code-block versions="versions" default="default_version"></code-block>\n </div>\n </section>\n </div>\n </div>\n</div>\n')}]),e.exports=n},function(e,t){var n="/docs/snapshot.html";window.angular.module("ng").run(["$templateCache",function(e){e.put(n,'<style>\n/* TODO */\n.section-target {\n top: -8em;\n}\n\n.noflex {\n flex: 0 0 160px !important;\n}\n\n.highlight {\n color: #24292e;\n background-color: white;\n}\n\n</style>\n\n<div class=\'app-scroll\'>\n <div class="app-links app-sticky">\n <div class="app-title">\n <div class="app-frame app-pad app-flush-bottom">\n <h1 ng-if="model.docs.show === false">\n <small class=\'text-bold text-right\'>\n <i data-icon="eye"></i>\n This {{ model.resource_type }} is hidden\n </small>\n </h1>\n <h1>\n <span class="break">{{ model.name }}</span>\n <small>{{ model.config.materialized }}</small>\n </h1>\n </div>\n </div>\n <div class="app-frame app-pad-h">\n <ul class="nav nav-tabs">\n <li ui-sref-active=\'active\'><a ui-sref="dbt.snapshot({\'#\': \'details\'})">Details</a></li>\n <li ui-sref-active=\'active\'><a ui-sref="dbt.snapshot({\'#\': \'description\'})">Description</a></li>\n <li ui-sref-active=\'active\'><a ui-sref="dbt.snapshot({\'#\': \'columns\'})">Columns</a></li>\n <li ui-sref-active=\'active\' ng-show = "referencesLength != 0"><a ui-sref="dbt.snapshot({\'#\': \'referenced_by\'})">Referenced By</a></li>\n <li ui-sref-active=\'active\' ng-show = "parentsLength != 0"><a ui-sref="dbt.snapshot({\'#\': \'depends_on\'})">Depends On</a></li>\n <li ui-sref-active=\'active\'><a ui-sref="dbt.snapshot({\'#\': \'code\'})">SQL</a></li>\n </ul>\n </div>\n </div>\n <div class="app-details">\n <div class="app-frame app-pad">\n <section class="section">\n <div class="section-target" id="details"></div>\n <table-details model="model" />\n </section>\n\n <section class="section">\n <div class="section-target" id="description"></div>\n <div class="section-content">\n <h6>Description</h6>\n <div class="panel">\n <div class="panel-body">\n <div ng-if="model.description" class="model-markdown" marked="model.description"></div>\n <div ng-if="!model.description">This {{ model.resource_type }} is not currently documented</div>\n </div>\n </div>\n </div>\n </section>\n\n <section class="section">\n <div class="section-target" id="columns"></div>\n <div class="section-content">\n <h6>Columns</h6>\n <column-details model="model" />\n </div>\n </section>\n\n <section class="section" ng-show = "referencesLength != 0">\n <div class="section-target" id="referenced_by"></div>\n <div class="section-content">\n <h6>Referenced By</h6>\n <reference-list references="references" node="model" />\n </div>\n </section>\n\n <section class="section" ng-show = "parentsLength != 0">\n <div class="section-target" id="depends_on"></div>\n <div class="section-content">\n <h6>Depends On</h6>\n <reference-list references="parents" node="model" />\n </div>\n </section>\n\n <section class="section">\n <div class="section-target" id="code"></div>\n <div class="section-content">\n <code-block versions="versions" default="default_version"></code-block>\n </div>\n </section>\n </div>\n </div>\n</div>\n')}]),e.exports=n},function(e,t){var n="/docs/seed.html";window.angular.module("ng").run(["$templateCache",function(e){e.put(n,'<style>\n/* TODO */\n.section-target {\n top: -8em;\n}\n\n.noflex {\n flex: 0 0 160px !important;\n}\n\n.highlight {\n color: #24292e;\n background-color: white;\n}\n\n</style>\n\n<div class=\'app-scroll\'>\n <div class="app-links app-sticky">\n <div class="app-title">\n <div class="app-frame app-pad app-flush-bottom">\n <h1 ng-if="model.docs.show === false">\n <small class=\'text-bold text-right\'>\n <i data-icon="eye"></i>\n This {{ model.resource_type }} is hidden\n </small>\n </h1>\n <h1>\n <span class="break">{{ model.name }}</span>\n <small>{{ model.config.materialized }}</small>\n </h1>\n </div>\n </div>\n <div class="app-frame app-pad-h">\n <ul class="nav nav-tabs">\n <li ui-sref-active=\'active\'><a ui-sref="dbt.seed({\'#\': \'details\'})">Details</a></li>\n <li ui-sref-active=\'active\'><a ui-sref="dbt.seed({\'#\': \'description\'})">Description</a></li>\n <li ui-sref-active=\'active\'><a ui-sref="dbt.seed({\'#\': \'columns\'})">Columns</a></li>\n <li ui-sref-active=\'active\' ng-show = "referencesLength != 0"><a ui-sref="dbt.seed({\'#\': \'referenced_by\'})">Referenced By</a></li>\n <li ui-sref-active=\'active\' ng-show = "parentsLength != 0"><a ui-sref="dbt.seed({\'#\': \'depends_on\'})">Depends On</a></li>\n <li ui-sref-active=\'active\'><a ui-sref="dbt.seed({\'#\': \'code\'})">SQL</a></li>\n </ul>\n </div>\n </div>\n <div class="app-details">\n <div class="app-frame app-pad">\n <section class="section">\n <div class="section-target" id="details"></div>\n <table-details model="model" />\n </section>\n\n <section class="section">\n <div class="section-target" id="description"></div>\n <div class="section-content">\n <h6>Description</h6>\n <div class="panel">\n <div class="panel-body">\n <div ng-if="model.description" class="model-markdown" marked="model.description"></div>\n <div ng-if="!model.description">This {{ model.resource_type }} is not currently documented</div>\n </div>\n </div>\n </div>\n </section>\n <section class="section">\n <div class="section-target" id="columns"></div>\n <div class="section-content">\n <h6>Columns</h6>\n <column-details model="model" />\n </div>\n </section>\n\n <section class="section" ng-show = "referencesLength != 0">\n <div class="section-target" id="referenced_by"></div>\n <div class="section-content">\n <h6>Referenced By</h6>\n <reference-list references="references" node="model" />\n </div>\n </section>\n\n <section class="section" ng-show = "parentsLength != 0">\n <div class="section-target" id="depends_on"></div>\n <div class="section-content">\n <h6>Depends On</h6>\n <reference-list references="parents" node="model" />\n </div>\n </section>\n\n <section class="section">\n <div class="section-target" id="code"></div>\n <div class="section-content">\n <code-block versions="versions" default="default_version"></code-block>\n </div>\n </section>\n </div>\n </div>\n</div>\n')}]),e.exports=n},function(e,t){var n="/docs/test.html";window.angular.module("ng").run(["$templateCache",function(e){e.put(n,'<style>\n/* TODO */\n.section-target {\n top: -8em;\n}\n\n.noflex {\n flex: 0 0 160px !important;\n}\n\n.highlight {\n color: #24292e;\n background-color: white;\n}\n\n</style>\n\n<div class=\'app-scroll\'>\n <div class="app-links app-sticky">\n <div class="app-title">\n <div class="app-frame app-pad app-flush-bottom">\n <h1>\n <span class="break">{{ model.name }}</span>\n <small>test</small>\n </h1>\n </div>\n </div>\n <div class="app-frame app-pad-h">\n <ul class="nav nav-tabs">\n <li ui-sref-active=\'active\'><a ui-sref="dbt.test({\'#\': \'description\'})">Description</a></li>\n <li ui-sref-active=\'active\' ng-show = "parentsLength != 0"><a ui-sref="dbt.test({\'#\': \'depends_on\'})">Depends On</a></li>\n <li ui-sref-active=\'active\'><a ui-sref="dbt.test({\'#\': \'code\'})">SQL</a></li>\n </ul>\n </div>\n </div>\n <div class="app-details">\n <div class="app-frame app-pad">\n <section class="section">\n <div class="section-target" id="description"></div>\n <div class="section-content">\n <h6>Description</h6>\n <div class="panel">\n <div class="panel-body">\n <div ng-if="model.description" class="model-markdown" marked="model.description"></div>\n <div ng-if="!model.description">This {{ model.resource_type }} is not currently documented</div>\n </div>\n </div>\n </div>\n </section>\n\n <section class="section" ng-show = "parentsLength != 0">\n <div class="section-target" id="depends_on"></div>\n <div class="section-content">\n <h6>Depends On</h6>\n <reference-list references="parents" node="model" />\n </div>\n </section>\n\n <section class="section">\n <div class="section-target" id="code"></div>\n <div class="section-content">\n <code-block versions="versions" default="default_version"></code-block>\n </div>\n </section>\n </div>\n </div>\n</div>\n')}]),e.exports=n},function(e,t){var n="/docs/analysis.html";window.angular.module("ng").run(["$templateCache",function(e){e.put(n,'<style>\n/* TODO */\n.section-target {\n top: -8em;\n}\n\n.noflex {\n flex: 0 0 160px !important;\n}\n\n.highlight {\n color: #24292e;\n background-color: white;\n}\n\n</style>\n\n<div class=\'app-scroll\'>\n <div class="app-links app-sticky">\n <div class="app-title">\n <div class="app-frame app-pad app-flush-bottom">\n <h1 ng-if="model.docs.show === false">\n <small class=\'text-bold text-right\'>\n <i data-icon="eye"></i>\n This {{ model.resource_type }} is hidden\n </small>\n </h1>\n <h1>\n <span class="break">{{ model.name }}</span>\n <small>Analysis</small>\n </h1>\n </div>\n </div>\n <div class="app-frame app-pad-h">\n <ul class="nav nav-tabs">\n <li ui-sref-active=\'active\'><a ui-sref="dbt.analysis({\'#\': \'description\'})">Description</a></li>\n <li ui-sref-active=\'active\' ng-show = "parentsLength != 0"><a ui-sref="dbt.analysis({\'#\': \'depends_on\'})">Depends On</a></li>\n <li ui-sref-active=\'active\'><a ui-sref="dbt.analysis({\'#\': \'sql\'})">SQL</a></li>\n </ul>\n </div>\n </div>\n <div class="app-details">\n <div class="app-frame app-pad">\n\n <section class="section">\n <div class="section-target" id="description"></div>\n <div class="section-content">\n <h6>Description</h6>\n <div class="panel">\n <div class="panel-body">\n <div ng-if="model.description" class="model-markdown" marked="model.description"></div>\n <div ng-if="!model.description">This {{ model.resource_type }} is not currently documented</div>\n </div>\n </div>\n </div>\n </section>\n\n <section class="section" ng-show = "parentsLength != 0">\n <div class="section-target" id="depends_on"></div>\n <div class="section-content">\n <h6>Depends On</h6>\n <reference-list references="parents" />\n </div>\n </section>\n\n <section class="section">\n <div class="section-target" id="sql"></div>\n <div class="section-content">\n <code-block versions="versions" default="default_version"></code-block>\n </div>\n </section>\n </div>\n </div>\n</div>\n')}]),e.exports=n},function(e,t){var n="/docs/macro.html";window.angular.module("ng").run(["$templateCache",function(e){e.put(n,'<style>\n/* TODO */\n.section-target {\n top: -8em;\n}\n\n.noflex {\n flex: 0 0 160px !important;\n}\n\n.highlight {\n color: #24292e;\n background-color: white;\n}\n\n</style>\n\n<div class=\'app-scroll\'>\n <div class="app-links app-sticky">\n <div class="app-title">\n <div class="app-frame app-pad app-flush-bottom">\n <h1>\n <span class="break">{{ macro.package_name }}.{{ macro.name }}</span>\n <small ng-if="macro.is_adapter_macro">adapter macro</small>\n <small ng-if="!macro.is_adapter_macro">macro</small>\n </h1>\n </div>\n </div>\n <div class="app-frame app-pad-h">\n <ul class="nav nav-tabs">\n <li ui-sref-active=\'active\'><a ui-sref="dbt.macro({\'#\': \'description\'})">Description</a></li>\n <li ui-sref-active=\'active\'><a ui-sref="dbt.macro({\'#\': \'arguments\'})">Arguments</a></li>\n <li ui-sref-active=\'active\' ng-show = "referencesLength != 0"><a ui-sref="dbt.macro({\'#\': \'referenced_by\'})">Referenced By</a></li>\n <li ui-sref-active=\'active\' ng-show = "parentsLength != 0"><a ui-sref="dbt.macro({\'#\': \'depends_on\'})">Depends On</a></li>\n <li ui-sref-active=\'active\'><a ui-sref="dbt.macro({\'#\': \'code\'})">Code</a></li>\n </ul>\n </div>\n </div>\n <div class="app-details">\n <div class="app-frame app-pad">\n <section class="section">\n <div class="section-target" id="description"></div>\n <div class="section-content">\n <h6>Description</h6>\n <div class="panel">\n <div class="panel-body">\n <div ng-if="macro.description" class="model-markdown" marked="macro.description"></div>\n <div ng-if="!macro.description">This {{ macro.resource_type }} is not currently documented</div>\n </div>\n </div>\n </div>\n </section>\n\n <section class="section">\n <div class="section-target" id="arguments"></div>\n <div class="section-content">\n <h6>Arguments</h6>\n <macro-arguments macro="macro"></macro-arguments>\n </div>\n </section>\n\n <section class="section" ng-show = "referencesLength != 0">\n <div class="section-target" id="referenced_by"></div>\n <div class="section-content">\n <h6>Referenced By</h6>\n <reference-list references="references" node="macro" />\n </div>\n </section>\n\n <section class="section" ng-show = "parentsLength != 0">\n <div class="section-target" id="depends_on"></div>\n <div class="section-content">\n <h6>Depends On</h6>\n <reference-list references="parents" node="macro" />\n </div>\n </section>\n\n <section class="section">\n <div class="section-target" id="code"></div>\n <div class="section-content">\n <code-block versions="versions" default="default_version"></code-block>\n </div>\n </section>\n </div>\n </div>\n</div>\n')}]),e.exports=n},function(e,t){var n="/docs/exposure.html";window.angular.module("ng").run(["$templateCache",function(e){e.put(n,'<style>\n/* TODO */\n.section-target {\n top: -8em;\n}\n\n.noflex {\n flex: 0 0 160px !important;\n}\n\n.highlight {\n color: #24292e;\n background-color: white;\n}\n\n</style>\n\n<div class=\'app-scroll\'>\n <div class="app-links app-sticky">\n <div class="app-title">\n <div class="app-frame app-pad app-flush-bottom">\n\n <h1>\n <span class="break">{{ exposure.name }}</span>\n <small>exposure</small>\n\n <div class=\'pull-right\' ng-show="exposure.url">\n <a class=\'btn text-white btn-primary btn-sm\' ng-href="{{ exposure.url }}" target="_blank">View this exposure</a>\n </div>\n\n <div class=\'clearfix\'></div>\n </h1>\n\n </div>\n </div>\n <div class="app-frame app-pad-h">\n <ul class="nav nav-tabs">\n <li ui-sref-active=\'active\'><a ui-sref="dbt.exposure({\'#\': \'details\'})">Details</a></li>\n <li ui-sref-active=\'active\'><a ui-sref="dbt.exposure({\'#\': \'description\'})">Description</a></li>\n <li ui-sref-active=\'active\' ng-show = "parentsLength != 0"><a ui-sref="dbt.exposure({\'#\': \'depends_on\'})">Depends On</a></li>\n </ul>\n </div>\n </div>\n <div class="app-details">\n <div class="app-frame app-pad">\n\n <section class="section">\n <div class="section-target" id="details"></div>\n <table-details model="exposure" extras="extra_table_fields" />\n </section>\n\n <section class="section">\n <div class="section-target" id="description"></div>\n <div class="section-content">\n <h6>Description</h6>\n <div class="panel">\n <div class="panel-body">\n <div ng-if="exposure.description" class="model-markdown" marked="exposure.description"></div>\n <div ng-if="!exposure.description">This {{ exposure.resource_type }} is not currently documented</div>\n </div>\n </div>\n </div>\n </section>\n\n <section class="section" ng-show = "parentsLength != 0">\n <div class="section-target" id="depends_on"></div>\n <div class="section-content">\n <h6>Depends On</h6>\n <reference-list references="parents" node="exposure" />\n </div>\n </section>\n\n </div>\n </div>\n</div>\n')}]),e.exports=n},function(e,t){var n="/docs/metric.html";window.angular.module("ng").run(["$templateCache",function(e){e.put(n,'<style>\n/* TODO */\n.section-target {\n top: -8em;\n}\n\n.noflex {\n flex: 0 0 160px !important;\n}\n\n.highlight {\n color: #24292e;\n background-color: white;\n}\n\n</style>\n\n<div class=\'app-scroll\'>\n <div class="app-links app-sticky">\n <div class="app-title">\n <div class="app-frame app-pad app-flush-bottom">\n\n <h1>\n <span class="break">{{ metric.name }}</span>\n <small>metric</small>\n\n <div class=\'clearfix\'></div>\n </h1>\n\n </div>\n </div>\n <div class="app-frame app-pad-h">\n <ul class="nav nav-tabs">\n <li ui-sref-active=\'active\'><a ui-sref="dbt.metric({\'#\': \'details\'})">Details</a></li>\n <li ui-sref-active=\'active\'><a ui-sref="dbt.metric({\'#\': \'description\'})">Description</a></li>\n <li ui-sref-active=\'active\' ng-show = "parentsLength != 0"><a ui-sref="dbt.metric({\'#\': \'depends_on\'})">Depends On</a></li>\n </ul>\n </div>\n </div>\n <div class="app-details">\n <div class="app-frame app-pad">\n\n <section class="section">\n <div class="section-target" id="details"></div>\n <table-details model="metric" extras="extra_table_fields" />\n </section>\n\n <section class="section">\n <div class="section-target" id="description"></div>\n <div class="section-content">\n <h6>Description</h6>\n <div class="panel">\n <div class="panel-body">\n <div ng-if="metric.description" class="model-markdown" marked="metric.description"></div>\n <div ng-if="!metric.description">This {{ metric.resource_type }} is not currently documented</div>\n </div>\n </div>\n </div>\n </section>\n\n <section class="section" ng-show = "parentsLength != 0">\n <div class="section-target" id="depends_on"></div>\n <div class="section-content">\n <h6>Depends On</h6>\n <reference-list references="parents" node="metric" />\n </div>\n </section>\n\n </div>\n </div>\n</div>\n')}]),e.exports=n}]); +e.exports=function(e){return null!=e&&(n(e)||function(e){return"function"==typeof e.readFloatLE&&"function"==typeof e.slice&&n(e.slice(0,0))}(e)||!!e._isBuffer)}},function(e,t,n){n(9).module("dbt").factory("locationService",["$state",function(e){var t={};return t.parseState=function(e){return function(e){return{selected:{include:e.g_i||"",exclude:e.g_e||""},show_graph:!!e.g_v}}(e)},t.setState=function(t){var n=function(e){var t={g_v:1};return t.g_i=e.include,t.g_e=e.exclude,t}(t),r=e.current.name;e.go(r,n)},t.clearState=function(){var t=e.current.name;e.go(t,{g_i:null,g_e:null,g_v:null})},t}])},function(e,t,n){"use strict";const r=n(9),i=n(202);r.module("dbt").controller("OverviewCtrl",["$scope","$state","project",function(e,t,n){e.overview_md="(loading)",n.ready((function(n){let r=t.params.project_name?t.params.project_name:null;var o=n.docs["dbt.__overview__"],a=i.filter(n.docs,{name:"__overview__"});if(i.each(a,(function(e){"dbt"!=e.package_name&&(o=e)})),null!==r){o=n.docs[`${r}.__${r}__`]||o;let e=i.filter(n.docs,{name:`__${r}__`});i.each(e,e=>{e.package_name!==r&&(o=e)})}e.overview_md=o.block_contents}))}])},function(e,t,n){"use strict";n(9).module("dbt").controller("SourceListCtrl",["$scope","$state","project",function(e,t,n){e.source=t.params.source,e.model={},e.extra_table_fields=[],e.has_more_info=function(e){return(e.description||"").length},e.toggle_source_expanded=function(t){e.has_more_info(t)&&(t.expanded=!t.expanded)},n.ready((function(t){var n=_.filter(t.nodes,(function(t){return t.source_name==e.source}));if(0!=n.length){n.sort((e,t)=>e.name.localeCompare(t.name));var r=n[0];e.model={name:e.source,source_description:r.source_description,sources:n};var i=_.uniq(_.map(n,"metadata.owner")),o=_.uniq(_.map(n,"database")),a=_.uniq(_.map(n,"schema"));e.extra_table_fields=[{name:"Loader",value:r.loader},{name:1==i.length?"Owner":"Owners",value:i.join(", ")},{name:1==o.length?"Database":"Databases",value:o.join(", ")},{name:1==a.length?"Schema":"Schemas",value:a.join(", ")},{name:"Tables",value:n.length}]}}))}])},function(e,t,n){const r=n(9),i={main:n(475),overview:n(476),graph:n(477),source:n(205),source_list:n(478),model:n(479),source:n(205),snapshot:n(480),seed:n(481),test:n(482),analysis:n(483),macro:n(484),exposure:n(485),metric:n(486)};r.module("dbt").config(["$stateProvider","$urlRouterProvider",function(e,t){var n="g_v&g_i&g_e&g_p&g_n";t.otherwise("/overview"),e.state("dbt",{url:"/",abstract:!0,controller:"MainController",templateUrl:i.main}).state("dbt.overview",{url:"overview?"+n,controller:"OverviewCtrl",templateUrl:i.overview}).state("dbt.project_overview",{url:"overview/:project_name?"+n,controller:"OverviewCtrl",templateUrl:i.overview,params:{project_name:{type:"string"}}}).state("dbt.graph",{url:"graph",controller:"GraphCtrl",templateUrl:i.graph}).state("dbt.model",{url:"model/:unique_id?section&"+n,controller:"ModelCtrl",templateUrl:i.model,params:{unique_id:{type:"string"}}}).state("dbt.seed",{url:"seed/:unique_id?section&"+n,controller:"SeedCtrl",templateUrl:i.seed,params:{unique_id:{type:"string"}}}).state("dbt.snapshot",{url:"snapshot/:unique_id?section&"+n,controller:"SnapshotCtrl",templateUrl:i.snapshot,params:{unique_id:{type:"string"}}}).state("dbt.test",{url:"test/:unique_id?section&"+n,controller:"TestCtrl",templateUrl:i.test,params:{unique_id:{type:"string"}}}).state("dbt.analysis",{url:"analysis/:unique_id?section&"+n,controller:"AnalysisCtrl",templateUrl:i.analysis,params:{unique_id:{type:"string"}}}).state("dbt.source",{url:"source/:unique_id?section&"+n,controller:"SourceCtrl",templateUrl:i.source,params:{unique_id:{type:"string"}}}).state("dbt.source_list",{url:"source_list/:source?section&"+n,controller:"SourceListCtrl",templateUrl:i.source_list,params:{source:{type:"string"}}}).state("dbt.macro",{url:"macro/:unique_id?section",controller:"MacroCtrl",templateUrl:i.macro,params:{unique_id:{type:"string"}}}).state("dbt.exposure",{url:"exposure/:unique_id?section&"+n,controller:"ExposureCtrl",templateUrl:i.exposure,params:{unique_id:{type:"string"}}}).state("dbt.metric",{url:"metric/:unique_id?section&"+n,controller:"MetricCtrl",templateUrl:i.metric,params:{unique_id:{type:"string"}}})}])},function(e,t){var n="/main/main.html";window.angular.module("ng").run(["$templateCache",function(e){e.put(n,'<style>\n.no-x-overflow {\n overflow-x: hidden;\n}\n\n.logo {\n width: 140px;\n height: 46px ;\n}\n</style>\n\n<div>\n <graph-launcher></graph-launcher>\n\n <div class="app app-row">\n <div class="app-menu app-column">\n <div class="app-overlay" data-toggle=".app-menu"></div>\n <div class="app-header app-navbar app-shadow app-pad">\n <div class="app-row app-middle">\n <div class="app-body">\n <div class="logo">\n <img style="width: 100px; height: 40px" class="logo" ng-src="{{ logo }}" />\n </div>\n </div>\n </div>\n </div>\n <div class="app-body">\n <div class="app-scroll app-pad app-flush-right no-x-overflow">\n <model-tree tree="tree"></model-tree>\n </div>\n </div>\n </div>\n <div class="app-content app-column">\n <div class="app-header app-navbar app-shadow">\n <div class="app-frame app-pad app-row app-middle">\n <input\n id="search"\n ng-model="search.query"\n ng-focus="onSearchFocus($event, true)"\n ng-keydown="onSearchKeypress($event)"\n type="text"\n class="form-control"\n placeholder="Search for models..." />\n <div class="app-body">\n </div>\n <div class="app-footer app-icn" ng-show="search.is_focused" ng-click="clearSearch()">\n <svg class="icn icn-md"><use xlink:href="#icn-close"></use></svg>\n </div>\n </div>\n </div>\n <div class=\'app-body\' ng-show=\'!search.is_focused\' ui-view></div>\n <div class="app-body" ng-show="search.is_focused">\n <docs-search query="search.query" results="search.results" on-select="clearSearch()"></docs-search>\n </div>\n </div>\n </div>\n</div>\n')}]),e.exports=n},function(e,t){var n="/overview/overview.html";window.angular.module("ng").run(["$templateCache",function(e){e.put(n,'<div class="app-details app-scroll app-pad">\n <app-scroll div class="app-frame app-pad">\n <div class="panel panel-default">\n <div class="panel-body">\n <p marked=\'overview_md\'></p>\n </div>\n </div>\n </div>\n</div>\n')}]),e.exports=n},function(e,t){var n="/graph/graph.html";window.angular.module("ng").run(["$templateCache",function(e){e.put(n,'<div ng-controller="GraphCtrl" id=\'graph-container\' style="width: 100%">\n <div class=\'row viz-container\' style="margin: 0">\n <div class=\'col-md-12\'>\n <div graph-viz\n viz-options="graph.options"\n viz-elements="graph.elements"\n viz-style="graph.style"\n viz-layout="graph.layout"\n viz-ready="graph.ready"\n viz-size="{height: \'800px\', width: \'100%\'}"></div>\n </div>\n </div>\n</div>\n')}]),e.exports=n},function(e,t){var n="/sources/source_list.html";window.angular.module("ng").run(["$templateCache",function(e){e.put(n,'<style>\n/* TODO */\n.section-target {\n top: -8em;\n}\n\n.noflex {\n flex: 0 0 160px !important;\n}\n\n.highlight {\n color: #24292e;\n background-color: white;\n}\n\n</style>\n\n<div class=\'app-scroll\'>\n <div class="app-links app-sticky">\n <div class="app-title">\n <div class="app-frame app-pad app-flush-bottom">\n <h1>\n <span class="break">{{ source }}</span>\n <small>source</small>\n </h1>\n </div>\n </div>\n <div class="app-frame app-pad-h">\n <ul class="nav nav-tabs">\n <li ui-sref-active=\'active\'><a ui-sref="dbt.source_list({\'#\': \'details\'})">Details</a></li>\n <li ui-sref-active=\'active\'><a ui-sref="dbt.source_list({\'#\': \'description\'})">Description</a></li>\n <li ui-sref-active=\'active\'><a ui-sref="dbt.source_list({\'#\': \'sources\'})">Sources</a></li>\n </ul>\n </div>\n </div>\n <div class="app-details">\n <div class="app-frame app-pad">\n <section class="section">\n <div class="section-target" id="details"></div>\n <table-details model="model" extras="extra_table_fields"/>\n </section>\n\n <section class="section">\n <div class="section-target" id="description"></div>\n <div class="section-content">\n <h6>Description</h6>\n <div class="panel">\n <div class="panel-body">\n <div ng-if="model.source_description" class="model-markdown" marked="model.source_description"></div>\n <div ng-if="!model.source_description">This {{ model.resource_type }} is not currently documented</div>\n </div>\n </div>\n </div>\n </section>\n\n\n <section class="section">\n <div class="section-target" id="sources"></div>\n <div class="section-content">\n <h6>Source Tables</h6>\n <div class="panel">\n <div class="panel-body">\n <div class="table-responsive" style="max-height: 800px; overflow-y: scroll;" ng-if="!_.isEmpty(model.sources)">\n <table class="table table-borderless table-hover">\n <thead>\n <tr>\n <th style="background-color: white; position: sticky; top: 0; z-index: 1;">Source</th>\n <th style="background-color: white; position: sticky; top: 0; z-index: 1;">Table</th>\n <th style="background-color: white; position: sticky; top: 0; z-index: 1;">Description</th>\n <th style="background-color: white; position: sticky; top: 0; z-index: 1;">Link</th>\n <th style="width: 1px; background-color: white; position: sticky; top: 0; z-index: 1;" class=\'text-center\'>More?</th>\n </tr>\n </thead>\n <tbody>\n <tr\n ng-repeat-start="source in model.sources track by source.name"\n ng-click="toggle_source_expanded(source)"\n class="column-row"\n ng-class="{\'column-row-selected\': source.expanded}"\n ng-style="{cursor: has_more_info(source) ? \'pointer\' : \'auto\'}">\n <td>\n <div>\n <span class=\'text-dark\'>{{ source.source_name }}</span>\n </div>\n </td>\n <td>\n <span class=\'text-dark\'>{{ source.name }}</p>\n </td>\n <td style="text-overflow: ellipsis; overflow-x: hidden; white-space: nowrap; max-width: 1px;">\n <span ng-show="!column.expanded">{{ source.description }}</span>\n </td>\n <td>\n <a ui-sref="dbt.source({unique_id: source.unique_id})">View docs</a>\n </td>\n <td class=\'text-center\'>\n <span class=\'text-light\' ng-show="has_more_info(source)">\n <span ng-if="source.expanded">\n <svg class="icn"><use xlink:href="#icn-up"></use></svg>\n </span>\n <span ng-if="!source.expanded">\n <svg class="icn"><use xlink:href="#icn-right"></use></svg>\n </span>\n </span>\n </td>\n </tr>\n <tr ng-repeat-end ng-show="source.expanded" style="background-color: white; padding: 10px">\n <td colspan="5" class="column-expanded">\n <div style="padding: 5px 20px">\n <div style="margin-bottom: 15px">\n <h5>Description</h5>\n <span marked="source.description"></span>\n </div>\n </div>\n </td>\n </tr>\n </tbody>\n </table>\n </div>\n </div>\n </div>\n </div>\n </section>\n </div>\n </div>\n</div>\n')}]),e.exports=n},function(e,t){var n="/docs/model.html";window.angular.module("ng").run(["$templateCache",function(e){e.put(n,'<style>\n/* TODO */\n.section-target {\n top: -8em;\n}\n\n.noflex {\n flex: 0 0 160px !important;\n}\n\n.highlight {\n color: #24292e;\n background-color: white;\n}\n\n</style>\n\n<div class=\'app-scroll\'>\n <div class="app-links app-sticky">\n <div class="app-title">\n <div class="app-frame app-pad app-flush-bottom">\n <h1 ng-if="model.docs.show === false">\n <small class=\'text-bold text-right\'>\n <i data-icon="eye"></i>\n This model is hidden\n </small>\n </h1>\n <h1>\n <span class="break">{{ model.name }}</span>\n <small>{{ model.config.materialized }}</small>\n </h1>\n </div>\n </div>\n <div class="app-frame app-pad-h">\n <ul class="nav nav-tabs">\n <li ui-sref-active=\'active\'><a ui-sref="dbt.model({\'#\': \'details\'})">Details</a></li>\n <li ui-sref-active=\'active\'><a ui-sref="dbt.model({\'#\': \'description\'})">Description</a></li>\n <li ui-sref-active=\'active\'><a ui-sref="dbt.model({\'#\': \'columns\'})">Columns</a></li>\n <li ui-sref-active=\'active\' ng-show = "referencesLength != 0"><a ui-sref="dbt.model({\'#\': \'referenced_by\'})">Referenced By</a></li>\n <li ui-sref-active=\'active\' ng-show = "parentsLength != 0"><a ui-sref="dbt.model({\'#\': \'depends_on\'})">Depends On</a></li>\n <li ui-sref-active=\'active\'><a ui-sref="dbt.model({\'#\': \'code\'})">SQL</a></li>\n </ul>\n </div>\n </div>\n <div class="app-details">\n <div class="app-frame app-pad">\n <section class="section">\n <div class="section-target" id="details"></div>\n <table-details model="model"></table-details>\n </section>\n\n <section class="section">\n <div class="section-target" id="description"></div>\n <div class="section-content">\n <h6>Description</h6>\n <div class="panel">\n <div class="panel-body">\n <div ng-if="model.description" class="model-markdown" marked="model.description"></div>\n <div ng-if="!model.description">This {{ model.resource_type }} is not currently documented</div>\n </div>\n </div>\n </div>\n </section>\n\n <section class="section">\n <div class="section-target" id="columns"></div>\n <div class="section-content">\n <h6>Columns</h6>\n <column-details model="model" />\n </div>\n </section>\n\n <section class="section" ng-show = "referencesLength != 0">\n <div class="section-target" id="referenced_by"></div>\n <div class="section-content">\n <h6>Referenced By</h6>\n <reference-list references="references" node="model" />\n </div>\n </section>\n\n <section class="section" ng-show = "parentsLength != 0">\n <div class="section-target" id="depends_on"></div>\n <div class="section-content">\n <h6>Depends On</h6>\n <reference-list references="parents" node="model" />\n </div>\n </section>\n\n <section class="section">\n <div class="section-target" id="code"></div>\n <div class="section-content">\n <code-block versions="versions" default="default_version"></code-block>\n </div>\n </section>\n </div>\n </div>\n</div>\n')}]),e.exports=n},function(e,t){var n="/docs/snapshot.html";window.angular.module("ng").run(["$templateCache",function(e){e.put(n,'<style>\n/* TODO */\n.section-target {\n top: -8em;\n}\n\n.noflex {\n flex: 0 0 160px !important;\n}\n\n.highlight {\n color: #24292e;\n background-color: white;\n}\n\n</style>\n\n<div class=\'app-scroll\'>\n <div class="app-links app-sticky">\n <div class="app-title">\n <div class="app-frame app-pad app-flush-bottom">\n <h1 ng-if="model.docs.show === false">\n <small class=\'text-bold text-right\'>\n <i data-icon="eye"></i>\n This {{ model.resource_type }} is hidden\n </small>\n </h1>\n <h1>\n <span class="break">{{ model.name }}</span>\n <small>{{ model.config.materialized }}</small>\n </h1>\n </div>\n </div>\n <div class="app-frame app-pad-h">\n <ul class="nav nav-tabs">\n <li ui-sref-active=\'active\'><a ui-sref="dbt.snapshot({\'#\': \'details\'})">Details</a></li>\n <li ui-sref-active=\'active\'><a ui-sref="dbt.snapshot({\'#\': \'description\'})">Description</a></li>\n <li ui-sref-active=\'active\'><a ui-sref="dbt.snapshot({\'#\': \'columns\'})">Columns</a></li>\n <li ui-sref-active=\'active\' ng-show = "referencesLength != 0"><a ui-sref="dbt.snapshot({\'#\': \'referenced_by\'})">Referenced By</a></li>\n <li ui-sref-active=\'active\' ng-show = "parentsLength != 0"><a ui-sref="dbt.snapshot({\'#\': \'depends_on\'})">Depends On</a></li>\n <li ui-sref-active=\'active\'><a ui-sref="dbt.snapshot({\'#\': \'code\'})">SQL</a></li>\n </ul>\n </div>\n </div>\n <div class="app-details">\n <div class="app-frame app-pad">\n <section class="section">\n <div class="section-target" id="details"></div>\n <table-details model="model" />\n </section>\n\n <section class="section">\n <div class="section-target" id="description"></div>\n <div class="section-content">\n <h6>Description</h6>\n <div class="panel">\n <div class="panel-body">\n <div ng-if="model.description" class="model-markdown" marked="model.description"></div>\n <div ng-if="!model.description">This {{ model.resource_type }} is not currently documented</div>\n </div>\n </div>\n </div>\n </section>\n\n <section class="section">\n <div class="section-target" id="columns"></div>\n <div class="section-content">\n <h6>Columns</h6>\n <column-details model="model" />\n </div>\n </section>\n\n <section class="section" ng-show = "referencesLength != 0">\n <div class="section-target" id="referenced_by"></div>\n <div class="section-content">\n <h6>Referenced By</h6>\n <reference-list references="references" node="model" />\n </div>\n </section>\n\n <section class="section" ng-show = "parentsLength != 0">\n <div class="section-target" id="depends_on"></div>\n <div class="section-content">\n <h6>Depends On</h6>\n <reference-list references="parents" node="model" />\n </div>\n </section>\n\n <section class="section">\n <div class="section-target" id="code"></div>\n <div class="section-content">\n <code-block versions="versions" default="default_version"></code-block>\n </div>\n </section>\n </div>\n </div>\n</div>\n')}]),e.exports=n},function(e,t){var n="/docs/seed.html";window.angular.module("ng").run(["$templateCache",function(e){e.put(n,'<style>\n/* TODO */\n.section-target {\n top: -8em;\n}\n\n.noflex {\n flex: 0 0 160px !important;\n}\n\n.highlight {\n color: #24292e;\n background-color: white;\n}\n\n</style>\n\n<div class=\'app-scroll\'>\n <div class="app-links app-sticky">\n <div class="app-title">\n <div class="app-frame app-pad app-flush-bottom">\n <h1 ng-if="model.docs.show === false">\n <small class=\'text-bold text-right\'>\n <i data-icon="eye"></i>\n This {{ model.resource_type }} is hidden\n </small>\n </h1>\n <h1>\n <span class="break">{{ model.name }}</span>\n <small>{{ model.config.materialized }}</small>\n </h1>\n </div>\n </div>\n <div class="app-frame app-pad-h">\n <ul class="nav nav-tabs">\n <li ui-sref-active=\'active\'><a ui-sref="dbt.seed({\'#\': \'details\'})">Details</a></li>\n <li ui-sref-active=\'active\'><a ui-sref="dbt.seed({\'#\': \'description\'})">Description</a></li>\n <li ui-sref-active=\'active\'><a ui-sref="dbt.seed({\'#\': \'columns\'})">Columns</a></li>\n <li ui-sref-active=\'active\' ng-show = "referencesLength != 0"><a ui-sref="dbt.seed({\'#\': \'referenced_by\'})">Referenced By</a></li>\n <li ui-sref-active=\'active\' ng-show = "parentsLength != 0"><a ui-sref="dbt.seed({\'#\': \'depends_on\'})">Depends On</a></li>\n <li ui-sref-active=\'active\'><a ui-sref="dbt.seed({\'#\': \'code\'})">SQL</a></li>\n </ul>\n </div>\n </div>\n <div class="app-details">\n <div class="app-frame app-pad">\n <section class="section">\n <div class="section-target" id="details"></div>\n <table-details model="model" />\n </section>\n\n <section class="section">\n <div class="section-target" id="description"></div>\n <div class="section-content">\n <h6>Description</h6>\n <div class="panel">\n <div class="panel-body">\n <div ng-if="model.description" class="model-markdown" marked="model.description"></div>\n <div ng-if="!model.description">This {{ model.resource_type }} is not currently documented</div>\n </div>\n </div>\n </div>\n </section>\n <section class="section">\n <div class="section-target" id="columns"></div>\n <div class="section-content">\n <h6>Columns</h6>\n <column-details model="model" />\n </div>\n </section>\n\n <section class="section" ng-show = "referencesLength != 0">\n <div class="section-target" id="referenced_by"></div>\n <div class="section-content">\n <h6>Referenced By</h6>\n <reference-list references="references" node="model" />\n </div>\n </section>\n\n <section class="section" ng-show = "parentsLength != 0">\n <div class="section-target" id="depends_on"></div>\n <div class="section-content">\n <h6>Depends On</h6>\n <reference-list references="parents" node="model" />\n </div>\n </section>\n\n <section class="section">\n <div class="section-target" id="code"></div>\n <div class="section-content">\n <code-block versions="versions" default="default_version"></code-block>\n </div>\n </section>\n </div>\n </div>\n</div>\n')}]),e.exports=n},function(e,t){var n="/docs/test.html";window.angular.module("ng").run(["$templateCache",function(e){e.put(n,'<style>\n/* TODO */\n.section-target {\n top: -8em;\n}\n\n.noflex {\n flex: 0 0 160px !important;\n}\n\n.highlight {\n color: #24292e;\n background-color: white;\n}\n\n</style>\n\n<div class=\'app-scroll\'>\n <div class="app-links app-sticky">\n <div class="app-title">\n <div class="app-frame app-pad app-flush-bottom">\n <h1>\n <span class="break">{{ model.name }}</span>\n <small>test</small>\n </h1>\n </div>\n </div>\n <div class="app-frame app-pad-h">\n <ul class="nav nav-tabs">\n <li ui-sref-active=\'active\'><a ui-sref="dbt.test({\'#\': \'description\'})">Description</a></li>\n <li ui-sref-active=\'active\' ng-show = "parentsLength != 0"><a ui-sref="dbt.test({\'#\': \'depends_on\'})">Depends On</a></li>\n <li ui-sref-active=\'active\'><a ui-sref="dbt.test({\'#\': \'code\'})">SQL</a></li>\n </ul>\n </div>\n </div>\n <div class="app-details">\n <div class="app-frame app-pad">\n <section class="section">\n <div class="section-target" id="description"></div>\n <div class="section-content">\n <h6>Description</h6>\n <div class="panel">\n <div class="panel-body">\n <div ng-if="model.description" class="model-markdown" marked="model.description"></div>\n <div ng-if="!model.description">This {{ model.resource_type }} is not currently documented</div>\n </div>\n </div>\n </div>\n </section>\n\n <section class="section" ng-show = "parentsLength != 0">\n <div class="section-target" id="depends_on"></div>\n <div class="section-content">\n <h6>Depends On</h6>\n <reference-list references="parents" node="model" />\n </div>\n </section>\n\n <section class="section">\n <div class="section-target" id="code"></div>\n <div class="section-content">\n <code-block versions="versions" default="default_version"></code-block>\n </div>\n </section>\n </div>\n </div>\n</div>\n')}]),e.exports=n},function(e,t){var n="/docs/analysis.html";window.angular.module("ng").run(["$templateCache",function(e){e.put(n,'<style>\n/* TODO */\n.section-target {\n top: -8em;\n}\n\n.noflex {\n flex: 0 0 160px !important;\n}\n\n.highlight {\n color: #24292e;\n background-color: white;\n}\n\n</style>\n\n<div class=\'app-scroll\'>\n <div class="app-links app-sticky">\n <div class="app-title">\n <div class="app-frame app-pad app-flush-bottom">\n <h1 ng-if="model.docs.show === false">\n <small class=\'text-bold text-right\'>\n <i data-icon="eye"></i>\n This {{ model.resource_type }} is hidden\n </small>\n </h1>\n <h1>\n <span class="break">{{ model.name }}</span>\n <small>Analysis</small>\n </h1>\n </div>\n </div>\n <div class="app-frame app-pad-h">\n <ul class="nav nav-tabs">\n <li ui-sref-active=\'active\'><a ui-sref="dbt.analysis({\'#\': \'description\'})">Description</a></li>\n <li ui-sref-active=\'active\' ng-show = "parentsLength != 0"><a ui-sref="dbt.analysis({\'#\': \'depends_on\'})">Depends On</a></li>\n <li ui-sref-active=\'active\'><a ui-sref="dbt.analysis({\'#\': \'sql\'})">SQL</a></li>\n </ul>\n </div>\n </div>\n <div class="app-details">\n <div class="app-frame app-pad">\n\n <section class="section">\n <div class="section-target" id="description"></div>\n <div class="section-content">\n <h6>Description</h6>\n <div class="panel">\n <div class="panel-body">\n <div ng-if="model.description" class="model-markdown" marked="model.description"></div>\n <div ng-if="!model.description">This {{ model.resource_type }} is not currently documented</div>\n </div>\n </div>\n </div>\n </section>\n\n <section class="section" ng-show = "parentsLength != 0">\n <div class="section-target" id="depends_on"></div>\n <div class="section-content">\n <h6>Depends On</h6>\n <reference-list references="parents" />\n </div>\n </section>\n\n <section class="section">\n <div class="section-target" id="sql"></div>\n <div class="section-content">\n <code-block versions="versions" default="default_version"></code-block>\n </div>\n </section>\n </div>\n </div>\n</div>\n')}]),e.exports=n},function(e,t){var n="/docs/macro.html";window.angular.module("ng").run(["$templateCache",function(e){e.put(n,'<style>\n/* TODO */\n.section-target {\n top: -8em;\n}\n\n.noflex {\n flex: 0 0 160px !important;\n}\n\n.highlight {\n color: #24292e;\n background-color: white;\n}\n\n</style>\n\n<div class=\'app-scroll\'>\n <div class="app-links app-sticky">\n <div class="app-title">\n <div class="app-frame app-pad app-flush-bottom">\n <h1>\n <span class="break">{{ macro.package_name }}.{{ macro.name }}</span>\n <small ng-if="macro.is_adapter_macro">adapter macro</small>\n <small ng-if="!macro.is_adapter_macro">macro</small>\n </h1>\n </div>\n </div>\n <div class="app-frame app-pad-h">\n <ul class="nav nav-tabs">\n <li ui-sref-active=\'active\'><a ui-sref="dbt.macro({\'#\': \'description\'})">Description</a></li>\n <li ui-sref-active=\'active\'><a ui-sref="dbt.macro({\'#\': \'arguments\'})">Arguments</a></li>\n <li ui-sref-active=\'active\' ng-show = "referencesLength != 0"><a ui-sref="dbt.macro({\'#\': \'referenced_by\'})">Referenced By</a></li>\n <li ui-sref-active=\'active\' ng-show = "parentsLength != 0"><a ui-sref="dbt.macro({\'#\': \'depends_on\'})">Depends On</a></li>\n <li ui-sref-active=\'active\'><a ui-sref="dbt.macro({\'#\': \'code\'})">Code</a></li>\n </ul>\n </div>\n </div>\n <div class="app-details">\n <div class="app-frame app-pad">\n <section class="section">\n <div class="section-target" id="description"></div>\n <div class="section-content">\n <h6>Description</h6>\n <div class="panel">\n <div class="panel-body">\n <div ng-if="macro.description" class="model-markdown" marked="macro.description"></div>\n <div ng-if="!macro.description">This {{ macro.resource_type }} is not currently documented</div>\n </div>\n </div>\n </div>\n </section>\n\n <section class="section">\n <div class="section-target" id="arguments"></div>\n <div class="section-content">\n <h6>Arguments</h6>\n <macro-arguments macro="macro"></macro-arguments>\n </div>\n </section>\n\n <section class="section" ng-show = "referencesLength != 0">\n <div class="section-target" id="referenced_by"></div>\n <div class="section-content">\n <h6>Referenced By</h6>\n <reference-list references="references" node="macro" />\n </div>\n </section>\n\n <section class="section" ng-show = "parentsLength != 0">\n <div class="section-target" id="depends_on"></div>\n <div class="section-content">\n <h6>Depends On</h6>\n <reference-list references="parents" node="macro" />\n </div>\n </section>\n\n <section class="section">\n <div class="section-target" id="code"></div>\n <div class="section-content">\n <code-block versions="versions" default="default_version"></code-block>\n </div>\n </section>\n </div>\n </div>\n</div>\n')}]),e.exports=n},function(e,t){var n="/docs/exposure.html";window.angular.module("ng").run(["$templateCache",function(e){e.put(n,'<style>\n/* TODO */\n.section-target {\n top: -8em;\n}\n\n.noflex {\n flex: 0 0 160px !important;\n}\n\n.highlight {\n color: #24292e;\n background-color: white;\n}\n\n</style>\n\n<div class=\'app-scroll\'>\n <div class="app-links app-sticky">\n <div class="app-title">\n <div class="app-frame app-pad app-flush-bottom">\n\n <h1>\n <span class="break">{{ exposure.name }}</span>\n <small>exposure</small>\n\n <div class=\'pull-right\' ng-show="exposure.url">\n <a class=\'btn text-white btn-primary btn-sm\' ng-href="{{ exposure.url }}" target="_blank">View this exposure</a>\n </div>\n\n <div class=\'clearfix\'></div>\n </h1>\n\n </div>\n </div>\n <div class="app-frame app-pad-h">\n <ul class="nav nav-tabs">\n <li ui-sref-active=\'active\'><a ui-sref="dbt.exposure({\'#\': \'details\'})">Details</a></li>\n <li ui-sref-active=\'active\'><a ui-sref="dbt.exposure({\'#\': \'description\'})">Description</a></li>\n <li ui-sref-active=\'active\' ng-show = "parentsLength != 0"><a ui-sref="dbt.exposure({\'#\': \'depends_on\'})">Depends On</a></li>\n </ul>\n </div>\n </div>\n <div class="app-details">\n <div class="app-frame app-pad">\n\n <section class="section">\n <div class="section-target" id="details"></div>\n <table-details model="exposure" extras="extra_table_fields" />\n </section>\n\n <section class="section">\n <div class="section-target" id="description"></div>\n <div class="section-content">\n <h6>Description</h6>\n <div class="panel">\n <div class="panel-body">\n <div ng-if="exposure.description" class="model-markdown" marked="exposure.description"></div>\n <div ng-if="!exposure.description">This {{ exposure.resource_type }} is not currently documented</div>\n </div>\n </div>\n </div>\n </section>\n\n <section class="section" ng-show = "parentsLength != 0">\n <div class="section-target" id="depends_on"></div>\n <div class="section-content">\n <h6>Depends On</h6>\n <reference-list references="parents" node="exposure" />\n </div>\n </section>\n\n </div>\n </div>\n</div>\n')}]),e.exports=n},function(e,t){var n="/docs/metric.html";window.angular.module("ng").run(["$templateCache",function(e){e.put(n,'<style>\n/* TODO */\n.section-target {\n top: -8em;\n}\n\n.noflex {\n flex: 0 0 160px !important;\n}\n\n.highlight {\n color: #24292e;\n background-color: white;\n}\n\n</style>\n\n<div class=\'app-scroll\'>\n <div class="app-links app-sticky">\n <div class="app-title">\n <div class="app-frame app-pad app-flush-bottom">\n\n <h1>\n <span class="break">{{ metric.name }}</span>\n <small>metric</small>\n\n <div class=\'clearfix\'></div>\n </h1>\n\n </div>\n </div>\n <div class="app-frame app-pad-h">\n <ul class="nav nav-tabs">\n <li ui-sref-active=\'active\'><a ui-sref="dbt.metric({\'#\': \'details\'})">Details</a></li>\n <li ui-sref-active=\'active\'><a ui-sref="dbt.metric({\'#\': \'description\'})">Description</a></li>\n <li ui-sref-active=\'active\' ng-show = "parentsLength != 0"><a ui-sref="dbt.metric({\'#\': \'depends_on\'})">Depends On</a></li>\n </ul>\n </div>\n </div>\n <div class="app-details">\n <div class="app-frame app-pad">\n\n <section class="section">\n <div class="section-target" id="details"></div>\n <table-details model="metric" extras="extra_table_fields" />\n </section>\n\n <section class="section">\n <div class="section-target" id="description"></div>\n <div class="section-content">\n <h6>Description</h6>\n <div class="panel">\n <div class="panel-body">\n <div ng-if="metric.description" class="model-markdown" marked="metric.description"></div>\n <div ng-if="!metric.description">This {{ metric.resource_type }} is not currently documented</div>\n </div>\n </div>\n </div>\n </section>\n\n <section class="section" ng-show = "parentsLength != 0">\n <div class="section-target" id="depends_on"></div>\n <div class="section-content">\n <h6>Depends On</h6>\n <reference-list references="parents" node="metric" />\n </div>\n </section>\n\n </div>\n </div>\n</div>\n')}]),e.exports=n}]); //# sourceMappingURL=main.js.map</script></body> </html> diff --git a/docs/manifest.json b/docs/manifest.json index 33d11ee..d657f40 100644 --- a/docs/manifest.json +++ b/docs/manifest.json @@ -1 +1 @@ -{"metadata": {"dbt_schema_version": "https://schemas.getdbt.com/dbt/manifest/v4.json", "dbt_version": "1.0.0", "generated_at": "2022-01-06T18:49:21.428104Z", "invocation_id": "8ad2e9d0-66fc-47f9-abe0-fe38c6948257", "env": {}, "project_id": "faebc42304447d4427374f806679ecb5", "user_id": "e607f749-4294-4b15-833b-0ae4a87d4d24", "send_anonymous_usage_stats": true, "adapter_type": "snowflake"}, "nodes": {"model.tiktok_ads.tiktok_ads__ad_adapter": {"raw_sql": "with hourly as (\n \n select *\n from {{ var('ad_report_hourly') }}\n\n), campaigns as (\n\n select *\n from {{ ref('int_tiktok_ads__most_recent_campaign') }}\n\n), advertiser as (\n\n select *\n from {{ var('advertiser') }}\n\n), ad_groups as (\n\n select *\n from {{ ref('int_tiktok_ads__most_recent_ad_group') }}\n\n), ads as (\n\n select *\n from {{ ref('int_tiktok_ads__most_recent_ad') }}\n\n), joined as (\n\n select \n cast(hourly.stat_time_hour as date) as date_day,\n advertiser.advertiser_id,\n advertiser.name as advertiser_name,\n campaigns.campaign_id,\n campaigns.campaign_name,\n ad_groups.ad_group_id,\n ad_groups.ad_group_name,\n ads.ad_id,\n ads.ad_name,\n ads.base_url,\n ads.url_host,\n ads.url_path,\n ads.utm_source,\n ads.utm_medium,\n ads.utm_campaign,\n ads.utm_content,\n ads.utm_term,\n sum(hourly.spend) as spend,\n sum(hourly.clicks) as clicks,\n sum(hourly.impressions) as impressions,\n sum(hourly.reach) as reach,\n sum(hourly.conversion) as conversion,\n sum(hourly.likes) as likes,\n sum(hourly.comments) as comments,\n sum(hourly.shares) as shares,\n sum(hourly.profile_visits) as profile_visits,\n sum(hourly.follows) as follows,\n sum(hourly.video_watched_2_s) as video_watched_2_s, \n sum(hourly.video_watched_6_s) as video_watched_6_s, \n sum(hourly.video_views_p_25) as video_views_p_25, \n sum(hourly.video_views_p_50) as video_views_p_50,\n sum(hourly.video_views_p_75) as video_views_p_75,\n sum(hourly.spend)/nullif(sum(hourly.clicks),0) as daily_cpc,\n (sum(hourly.spend)/nullif(sum(hourly.impressions),0))*1000 as daily_cpm,\n (sum(hourly.clicks)/nullif(sum(hourly.impressions),0))*100 as daily_ctr\n from hourly\n left join ads\n on hourly.ad_id = ads.ad_id\n left join ad_groups \n on ads.ad_group_id = ad_groups.ad_group_id\n left join campaigns\n on ads.campaign_id = campaigns.campaign_id\n left join advertiser\n on campaigns.advertiser_id = advertiser.advertiser_id\n {{ dbt_utils.group_by(17) }}\n \n\n\n)\n\nselect *\nfrom joined", "compiled": true, "resource_type": "model", "depends_on": {"macros": ["macro.dbt_utils.group_by"], "nodes": ["model.tiktok_ads_source.stg_tiktok_ads__ad_report_hourly", "model.tiktok_ads.int_tiktok_ads__most_recent_campaign", "model.tiktok_ads_source.stg_tiktok_ads__advertiser", "model.tiktok_ads.int_tiktok_ads__most_recent_ad_group", "model.tiktok_ads.int_tiktok_ads__most_recent_ad"]}, "config": {"enabled": true, "alias": null, "schema": "tiktok_ads", "database": null, "tags": [], "meta": {}, "materialized": "table", "persist_docs": {}, "quoting": {}, "column_types": {}, "full_refresh": null, "on_schema_change": "ignore", "post-hook": [], "pre-hook": []}, "database": "FIVETRAN_DBT_TESTING", "schema": "DBT_TIKTOK_ADS_tiktok_ads", "fqn": ["tiktok_ads", "tiktok_ads__ad_adapter"], "unique_id": "model.tiktok_ads.tiktok_ads__ad_adapter", "package_name": "tiktok_ads", "root_path": "/Users/renee.li/Documents/dbt/tiktok/develop/dbt_packages/tiktok_ads", "path": "tiktok_ads__ad_adapter.sql", "original_file_path": "models/tiktok_ads__ad_adapter.sql", "name": "tiktok_ads__ad_adapter", "alias": "tiktok_ads__ad_adapter", "checksum": {"name": "sha256", "checksum": "dc14a4bb785472ace34d4745dcac503005800ae51f1c1731dfdf4d486d663afa"}, "tags": [], "refs": [["stg_tiktok_ads__ad_report_hourly"], ["int_tiktok_ads__most_recent_campaign"], ["stg_tiktok_ads__advertiser"], ["int_tiktok_ads__most_recent_ad_group"], ["int_tiktok_ads__most_recent_ad"]], "sources": [], "description": "Each record in this table represents the daily performance of ads at the ad level and URL level.", "columns": {"date_day": {"name": "date_day", "description": "Day of record.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "ad_id": {"name": "ad_id", "description": "Ad ID.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "ad_name": {"name": "ad_name", "description": "Ad name.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "campaign_id": {"name": "campaign_id", "description": "Campaign ID.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "campaign_name": {"name": "campaign_name", "description": "Campaign name.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "advertiser_name": {"name": "advertiser_name", "description": "Advertiser name.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "advertiser_id": {"name": "advertiser_id", "description": "Advertiser ID.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "ad_group_id": {"name": "ad_group_id", "description": "Ad group ID.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "ad_group_name": {"name": "ad_group_name", "description": "Ad group name.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "base_url": {"name": "base_url", "description": "The base URL of the ad, extracted from the `landing page url`.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "url_host": {"name": "url_host", "description": "The URL host of the ad, extracted from the `landing page url`.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "url_path": {"name": "url_path", "description": "The URL path of the ad, extracted from the `landing page url`.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "utm_source": {"name": "utm_source", "description": "The utm_source parameter of the ad, extracted from the `landing page url`.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "utm_medium": {"name": "utm_medium", "description": "The utm_medium parameter of the ad, extracted from the `landing page url`.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "utm_campaign": {"name": "utm_campaign", "description": "The utm_campaign parameter of the ad, extracted from the `landing page url`.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "utm_content": {"name": "utm_content", "description": "The utm_content parameter of the ad, extracted from the `landing page url`.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "utm_term": {"name": "utm_term", "description": "The utm_term parameter of the ad, extracted from the `landing page url`.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "clicks": {"name": "clicks", "description": "The number of clicks that occurred on the day of the record.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "spend": {"name": "spend", "description": "The amount of spend that occurred on the day of the record.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "reach": {"name": "reach", "description": "The number of unique users who saw your ads at least once. This metric is estimated.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "conversion": {"name": "conversion", "description": "The number of times your ad achieved an outcome, based on the secondary goal you selected. As one campaign may have a number of different secondary goals, this statistic is not supported for campaigns. Please go to ad groups or ads to view. (The total count is calculated based on the time each ad impression occurred.)\n", "meta": {}, "data_type": null, "quote": null, "tags": []}, "likes": {"name": "likes", "description": "The number of likes your video creative received within 1 day of a user seeing a paid ad.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "comments": {"name": "comments", "description": "The number of comments your video creative received within 1 day of a user seeing a paid ad.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "shares": {"name": "shares", "description": "The number of shares that occurred on the day of the record.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "profile_visits": {"name": "profile_visits", "description": "The number of profile visits that occurred on the day of the record.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "follows": {"name": "follows", "description": "The number of follows that occurred on the day of the record.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "video_watched_2_s": {"name": "video_watched_2_s", "description": "The number of times your video played for at least 2 seconds, or completely played. Replays will not be counted.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "video_watched_6_s": {"name": "video_watched_6_s", "description": "The number of times your video played for at least 6 seconds, or completely played. Replays will not be counted.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "video_views_p_25": {"name": "video_views_p_25", "description": "The number of times your video was played at 25% of its length. Replays will not be counted.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "video_views_p_50": {"name": "video_views_p_50", "description": "The number of times your video was played at 50% of its length. Replays will not be counted.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "video_views_p_75": {"name": "video_views_p_75", "description": "The number of times your video was played at 75% of its length. Replays will not be counted.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "daily_cpc": {"name": "daily_cpc", "description": "The average amount of money you've spent on a click.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "daily_cpm": {"name": "daily_cpm", "description": "The average amount of money you've spent per 1,000 impressions.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "daily_ctr": {"name": "daily_ctr", "description": "The percentage of times people saw your ad and performed a click.", "meta": {}, "data_type": null, "quote": null, "tags": []}}, "meta": {}, "docs": {"show": true}, "patch_path": "tiktok_ads://models/tiktok_ads.yml", "compiled_path": "target/compiled/tiktok_ads/models/tiktok_ads__ad_adapter.sql", "build_path": null, "deferred": false, "unrendered_config": {"schema": "tiktok_ads", "materialized": "table"}, "created_at": 1641494963.10164, "compiled_sql": "with __dbt__cte__int_tiktok_ads__most_recent_campaign as (\nwith base as (\n\n select *\n from FIVETRAN_DBT_TESTING.DBT_TIKTOK_ADS_stg_tiktok_ads.stg_tiktok_ads__campaign_history\n\n), filtered as (\n\n select *\n from base\n where is_most_recent_record\n \n)\n\nselect *\nfrom filtered\n), __dbt__cte__int_tiktok_ads__most_recent_ad_group as (\nwith base as (\n\n select *\n from FIVETRAN_DBT_TESTING.DBT_TIKTOK_ADS_stg_tiktok_ads.stg_tiktok_ads__ad_group_history\n\n), filtered as (\n\n select *\n from base\n where is_most_recent_record\n \n)\n\nselect *\nfrom filtered\n), __dbt__cte__int_tiktok_ads__most_recent_ad as (\nwith base as (\n\n select *\n from FIVETRAN_DBT_TESTING.DBT_TIKTOK_ADS_stg_tiktok_ads.stg_tiktok_ads__ad_history\n\n), filtered as (\n\n select *\n from base\n where is_most_recent_record\n \n)\n\nselect *\nfrom filtered\n),hourly as (\n \n select *\n from FIVETRAN_DBT_TESTING.DBT_TIKTOK_ADS_stg_tiktok_ads.stg_tiktok_ads__ad_report_hourly\n\n), campaigns as (\n\n select *\n from __dbt__cte__int_tiktok_ads__most_recent_campaign\n\n), advertiser as (\n\n select *\n from FIVETRAN_DBT_TESTING.DBT_TIKTOK_ADS_stg_tiktok_ads.stg_tiktok_ads__advertiser\n\n), ad_groups as (\n\n select *\n from __dbt__cte__int_tiktok_ads__most_recent_ad_group\n\n), ads as (\n\n select *\n from __dbt__cte__int_tiktok_ads__most_recent_ad\n\n), joined as (\n\n select \n cast(hourly.stat_time_hour as date) as date_day,\n advertiser.advertiser_id,\n advertiser.name as advertiser_name,\n campaigns.campaign_id,\n campaigns.campaign_name,\n ad_groups.ad_group_id,\n ad_groups.ad_group_name,\n ads.ad_id,\n ads.ad_name,\n ads.base_url,\n ads.url_host,\n ads.url_path,\n ads.utm_source,\n ads.utm_medium,\n ads.utm_campaign,\n ads.utm_content,\n ads.utm_term,\n sum(hourly.spend) as spend,\n sum(hourly.clicks) as clicks,\n sum(hourly.impressions) as impressions,\n sum(hourly.reach) as reach,\n sum(hourly.conversion) as conversion,\n sum(hourly.likes) as likes,\n sum(hourly.comments) as comments,\n sum(hourly.shares) as shares,\n sum(hourly.profile_visits) as profile_visits,\n sum(hourly.follows) as follows,\n sum(hourly.video_watched_2_s) as video_watched_2_s, \n sum(hourly.video_watched_6_s) as video_watched_6_s, \n sum(hourly.video_views_p_25) as video_views_p_25, \n sum(hourly.video_views_p_50) as video_views_p_50,\n sum(hourly.video_views_p_75) as video_views_p_75,\n sum(hourly.spend)/nullif(sum(hourly.clicks),0) as daily_cpc,\n (sum(hourly.spend)/nullif(sum(hourly.impressions),0))*1000 as daily_cpm,\n (sum(hourly.clicks)/nullif(sum(hourly.impressions),0))*100 as daily_ctr\n from hourly\n left join ads\n on hourly.ad_id = ads.ad_id\n left join ad_groups \n on ads.ad_group_id = ad_groups.ad_group_id\n left join campaigns\n on ads.campaign_id = campaigns.campaign_id\n left join advertiser\n on campaigns.advertiser_id = advertiser.advertiser_id\n group by 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17\n \n\n\n)\n\nselect *\nfrom joined", "extra_ctes_injected": true, "extra_ctes": [{"id": "model.tiktok_ads.int_tiktok_ads__most_recent_campaign", "sql": " __dbt__cte__int_tiktok_ads__most_recent_campaign as (\nwith base as (\n\n select *\n from FIVETRAN_DBT_TESTING.DBT_TIKTOK_ADS_stg_tiktok_ads.stg_tiktok_ads__campaign_history\n\n), filtered as (\n\n select *\n from base\n where is_most_recent_record\n \n)\n\nselect *\nfrom filtered\n)"}, {"id": "model.tiktok_ads.int_tiktok_ads__most_recent_ad_group", "sql": " __dbt__cte__int_tiktok_ads__most_recent_ad_group as (\nwith base as (\n\n select *\n from FIVETRAN_DBT_TESTING.DBT_TIKTOK_ADS_stg_tiktok_ads.stg_tiktok_ads__ad_group_history\n\n), filtered as (\n\n select *\n from base\n where is_most_recent_record\n \n)\n\nselect *\nfrom filtered\n)"}, {"id": "model.tiktok_ads.int_tiktok_ads__most_recent_ad", "sql": " __dbt__cte__int_tiktok_ads__most_recent_ad as (\nwith base as (\n\n select *\n from FIVETRAN_DBT_TESTING.DBT_TIKTOK_ADS_stg_tiktok_ads.stg_tiktok_ads__ad_history\n\n), filtered as (\n\n select *\n from base\n where is_most_recent_record\n \n)\n\nselect *\nfrom filtered\n)"}], "relation_name": "FIVETRAN_DBT_TESTING.DBT_TIKTOK_ADS_tiktok_ads.tiktok_ads__ad_adapter"}, "model.tiktok_ads.tiktok_ads__ad_group_report": {"raw_sql": "with adapter as (\n\n select *\n from {{ ref('tiktok_ads__ad_adapter') }}\n\n), ad_groups as (\n\n select *\n from {{ ref('int_tiktok_ads__most_recent_ad_group') }}\n\n), aggregated as (\n\n select\n adapter.date_day,\n adapter.ad_group_id,\n adapter.advertiser_id,\n adapter.campaign_id,\n adapter.campaign_name,\n ad_groups.action_categories,\n ad_groups.gender, \n ad_groups.audience_type,\n ad_groups.budget,\n ad_groups.age, \n ad_groups.languages, \n ad_groups.interest_category,\n sum(adapter.impressions) as impressions,\n sum(adapter.clicks) as clicks,\n sum(adapter.spend) as spend,\n sum(adapter.reach) as reach,\n sum(adapter.conversion) as conversion,\n sum(adapter.likes) as likes,\n sum(adapter.comments) as comments,\n sum(adapter.shares) as shares,\n sum(adapter.profile_visits) as profile_visits,\n sum(adapter.follows) as follows,\n sum(adapter.video_watched_2_s) as video_watched_2_s,\n sum(adapter.video_watched_6_s) as video_watched_6_s,\n sum(adapter.video_views_p_25) as video_views_p_25,\n sum(adapter.video_views_p_50) as video_views_p_50, \n sum(adapter.video_views_p_75) as video_views_p_75,\n sum(adapter.spend)/nullif(sum(adapter.clicks),0) as daily_cpc,\n (sum(adapter.spend)/nullif(sum(adapter.impressions),0))*1000 as daily_cpm,\n (sum(adapter.clicks)/nullif(sum(adapter.impressions),0))*100 as daily_ctr\n\n from adapter\n left join ad_groups \n on adapter.ad_group_id = ad_groups.ad_group_id\n\n {{ dbt_utils.group_by(12) }}\n\n)\n\nselect *\nfrom aggregated", "compiled": true, "resource_type": "model", "depends_on": {"macros": ["macro.dbt_utils.group_by"], "nodes": ["model.tiktok_ads.tiktok_ads__ad_adapter", "model.tiktok_ads.int_tiktok_ads__most_recent_ad_group"]}, "config": {"enabled": true, "alias": null, "schema": "tiktok_ads", "database": null, "tags": [], "meta": {}, "materialized": "table", "persist_docs": {}, "quoting": {}, "column_types": {}, "full_refresh": null, "on_schema_change": "ignore", "post-hook": [], "pre-hook": []}, "database": "FIVETRAN_DBT_TESTING", "schema": "DBT_TIKTOK_ADS_tiktok_ads", "fqn": ["tiktok_ads", "tiktok_ads__ad_group_report"], "unique_id": "model.tiktok_ads.tiktok_ads__ad_group_report", "package_name": "tiktok_ads", "root_path": "/Users/renee.li/Documents/dbt/tiktok/develop/dbt_packages/tiktok_ads", "path": "tiktok_ads__ad_group_report.sql", "original_file_path": "models/tiktok_ads__ad_group_report.sql", "name": "tiktok_ads__ad_group_report", "alias": "tiktok_ads__ad_group_report", "checksum": {"name": "sha256", "checksum": "079e3ae186dae4c652c1a3a9d1abf967de4acba29ffe4f277631f7b5e917c6ac"}, "tags": [], "refs": [["tiktok_ads__ad_adapter"], ["int_tiktok_ads__most_recent_ad_group"]], "sources": [], "description": "Each record in this table represents the daily performance of ads at the ad group level.", "columns": {"date_day": {"name": "date_day", "description": "Day of record", "meta": {}, "data_type": null, "quote": null, "tags": []}, "ad_group_id": {"name": "ad_group_id", "description": "Ad group ID", "meta": {}, "data_type": null, "quote": null, "tags": []}, "campaign_id": {"name": "campaign_id", "description": "Campaign ID", "meta": {}, "data_type": null, "quote": null, "tags": []}, "campaign_name": {"name": "campaign_name", "description": "Campaign name", "meta": {}, "data_type": null, "quote": null, "tags": []}, "advertiser_id": {"name": "advertiser_id", "description": "Advertiser ID", "meta": {}, "data_type": null, "quote": null, "tags": []}, "impressions": {"name": "impressions", "description": "The number of impressions that occurred on the day of the record.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "clicks": {"name": "clicks", "description": "The number of clicks that occurred on the day of the record.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "spend": {"name": "spend", "description": "The amount of spend that occurred on the day of the record.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "reach": {"name": "reach", "description": "The number of unique users who saw your ads at least once. This metric is estimated.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "conversion": {"name": "conversion", "description": "The number of times your ad achieved an outcome, based on the secondary goal you selected. As one campaign may have a number of different secondary goals, this statistic is not supported for campaigns. Please go to ad groups or ads to view. (The total count is calculated based on the time each ad impression occurred.)\n", "meta": {}, "data_type": null, "quote": null, "tags": []}, "likes": {"name": "likes", "description": "The number of likes your video creative received within 1 day of a user seeing a paid ad.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "comments": {"name": "comments", "description": "The number of comments your video creative received within 1 day of a user seeing a paid ad.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "shares": {"name": "shares", "description": "The number of shares that occurred on the day of the record.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "profile_visits": {"name": "profile_visits", "description": "The number of profile visits that occurred on the day of the record.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "follows": {"name": "follows", "description": "The number of follows that occurred on the day of the record.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "video_watched_2_s": {"name": "video_watched_2_s", "description": "The number of times your video played for at least 2 seconds, or completely played. Replays will not be counted.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "video_watched_6_s": {"name": "video_watched_6_s", "description": "The number of times your video played for at least 6 seconds, or completely played. Replays will not be counted.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "video_views_p_25": {"name": "video_views_p_25", "description": "The number of times your video was played at 25% of its length. Replays will not be counted.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "video_views_p_50": {"name": "video_views_p_50", "description": "The number of times your video was played at 50% of its length. Replays will not be counted.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "video_views_p_75": {"name": "video_views_p_75", "description": "The number of times your video was played at 75% of its length. Replays will not be counted.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "daily_cpc": {"name": "daily_cpc", "description": "The average amount of money you've spent on a click.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "daily_cpm": {"name": "daily_cpm", "description": "The average amount of money you've spent per 1,000 impressions.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "daily_ctr": {"name": "daily_ctr", "description": "The percentage of times people saw your ad and performed a click.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "action_categories": {"name": "action_categories", "description": "IDs of the action categories (behaviors) that you want to target.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "gender": {"name": "gender", "description": "Gender that you want to target.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "audience_type": {"name": "audience_type", "description": "Audience Type", "meta": {}, "data_type": null, "quote": null, "tags": []}, "budget": {"name": "budget", "description": "Ad budget. Returns 0.0 when Campaign Budget Optimization (budget_optimize_switch) is on.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "age": {"name": "age", "description": "Age groups you want to target.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "languages": {"name": "languages", "description": "Codes of the languages that you want to target.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "interest_category": {"name": "interest_category", "description": "Interest classification. If the interest is specified, users that do not meet interest target will be excluded during delivery.", "meta": {}, "data_type": null, "quote": null, "tags": []}}, "meta": {}, "docs": {"show": true}, "patch_path": "tiktok_ads://models/tiktok_ads.yml", "compiled_path": "target/compiled/tiktok_ads/models/tiktok_ads__ad_group_report.sql", "build_path": null, "deferred": false, "unrendered_config": {"schema": "tiktok_ads", "materialized": "table"}, "created_at": 1641494963.112263, "compiled_sql": "with __dbt__cte__int_tiktok_ads__most_recent_ad_group as (\nwith base as (\n\n select *\n from FIVETRAN_DBT_TESTING.DBT_TIKTOK_ADS_stg_tiktok_ads.stg_tiktok_ads__ad_group_history\n\n), filtered as (\n\n select *\n from base\n where is_most_recent_record\n \n)\n\nselect *\nfrom filtered\n),adapter as (\n\n select *\n from FIVETRAN_DBT_TESTING.DBT_TIKTOK_ADS_tiktok_ads.tiktok_ads__ad_adapter\n\n), ad_groups as (\n\n select *\n from __dbt__cte__int_tiktok_ads__most_recent_ad_group\n\n), aggregated as (\n\n select\n adapter.date_day,\n adapter.ad_group_id,\n adapter.advertiser_id,\n adapter.campaign_id,\n adapter.campaign_name,\n ad_groups.action_categories,\n ad_groups.gender, \n ad_groups.audience_type,\n ad_groups.budget,\n ad_groups.age, \n ad_groups.languages, \n ad_groups.interest_category,\n sum(adapter.impressions) as impressions,\n sum(adapter.clicks) as clicks,\n sum(adapter.spend) as spend,\n sum(adapter.reach) as reach,\n sum(adapter.conversion) as conversion,\n sum(adapter.likes) as likes,\n sum(adapter.comments) as comments,\n sum(adapter.shares) as shares,\n sum(adapter.profile_visits) as profile_visits,\n sum(adapter.follows) as follows,\n sum(adapter.video_watched_2_s) as video_watched_2_s,\n sum(adapter.video_watched_6_s) as video_watched_6_s,\n sum(adapter.video_views_p_25) as video_views_p_25,\n sum(adapter.video_views_p_50) as video_views_p_50, \n sum(adapter.video_views_p_75) as video_views_p_75,\n sum(adapter.spend)/nullif(sum(adapter.clicks),0) as daily_cpc,\n (sum(adapter.spend)/nullif(sum(adapter.impressions),0))*1000 as daily_cpm,\n (sum(adapter.clicks)/nullif(sum(adapter.impressions),0))*100 as daily_ctr\n\n from adapter\n left join ad_groups \n on adapter.ad_group_id = ad_groups.ad_group_id\n\n group by 1,2,3,4,5,6,7,8,9,10,11,12\n\n)\n\nselect *\nfrom aggregated", "extra_ctes_injected": true, "extra_ctes": [{"id": "model.tiktok_ads.int_tiktok_ads__most_recent_ad_group", "sql": " __dbt__cte__int_tiktok_ads__most_recent_ad_group as (\nwith base as (\n\n select *\n from FIVETRAN_DBT_TESTING.DBT_TIKTOK_ADS_stg_tiktok_ads.stg_tiktok_ads__ad_group_history\n\n), filtered as (\n\n select *\n from base\n where is_most_recent_record\n \n)\n\nselect *\nfrom filtered\n)"}], "relation_name": "FIVETRAN_DBT_TESTING.DBT_TIKTOK_ADS_tiktok_ads.tiktok_ads__ad_group_report"}, "model.tiktok_ads.tiktok_ads__campaign_report": {"raw_sql": "with adapter as (\n\n select *\n from {{ ref('tiktok_ads__ad_adapter') }}\n \n), aggregated as (\n\n select\n adapter.date_day,\n adapter.campaign_id,\n adapter.campaign_name,\n adapter.advertiser_id,\n sum(adapter.impressions) as impressions,\n sum(adapter.clicks) as clicks,\n sum(adapter.spend) as spend,\n sum(adapter.reach) as reach,\n sum(adapter.conversion) as conversion,\n sum(adapter.likes) as likes,\n sum(adapter.comments) as comments,\n sum(adapter.shares) as shares,\n sum(adapter.profile_visits) as profile_visits,\n sum(adapter.follows) as follows,\n sum(adapter.video_watched_2_s) as video_watched_2_s,\n sum(adapter.video_watched_6_s) as video_watched_6_s,\n sum(adapter.video_views_p_25) as video_views_p_25,\n sum(adapter.video_views_p_50) as video_views_p_50, \n sum(adapter.video_views_p_75) as video_views_p_75,\n sum(adapter.spend)/nullif(sum(adapter.clicks),0) as daily_cpc,\n (sum(adapter.spend)/nullif(sum(adapter.impressions),0))*1000 as daily_cpm,\n (sum(adapter.clicks)/nullif(sum(adapter.impressions),0))*100 as daily_ctr\n\n from adapter\n\n {{ dbt_utils.group_by(4) }}\n\n)\n\nselect *\nfrom aggregated", "compiled": true, "resource_type": "model", "depends_on": {"macros": ["macro.dbt_utils.group_by"], "nodes": ["model.tiktok_ads.tiktok_ads__ad_adapter"]}, "config": {"enabled": true, "alias": null, "schema": "tiktok_ads", "database": null, "tags": [], "meta": {}, "materialized": "table", "persist_docs": {}, "quoting": {}, "column_types": {}, "full_refresh": null, "on_schema_change": "ignore", "post-hook": [], "pre-hook": []}, "database": "FIVETRAN_DBT_TESTING", "schema": "DBT_TIKTOK_ADS_tiktok_ads", "fqn": ["tiktok_ads", "tiktok_ads__campaign_report"], "unique_id": "model.tiktok_ads.tiktok_ads__campaign_report", "package_name": "tiktok_ads", "root_path": "/Users/renee.li/Documents/dbt/tiktok/develop/dbt_packages/tiktok_ads", "path": "tiktok_ads__campaign_report.sql", "original_file_path": "models/tiktok_ads__campaign_report.sql", "name": "tiktok_ads__campaign_report", "alias": "tiktok_ads__campaign_report", "checksum": {"name": "sha256", "checksum": "5aeba81d9aaebbd3a5b84e95392c08bf9bd975a27311e1c401c20aff626d1f99"}, "tags": [], "refs": [["tiktok_ads__ad_adapter"]], "sources": [], "description": "Each record in this table represents the daily performance at the campaign level.", "columns": {"date_day": {"name": "date_day", "description": "Day of record", "meta": {}, "data_type": null, "quote": null, "tags": []}, "campaign_id": {"name": "campaign_id", "description": "Campaign ID", "meta": {}, "data_type": null, "quote": null, "tags": []}, "campaign_name": {"name": "campaign_name", "description": "Campaign name", "meta": {}, "data_type": null, "quote": null, "tags": []}, "advertiser_id": {"name": "advertiser_id", "description": "Advertiser ID", "meta": {}, "data_type": null, "quote": null, "tags": []}, "impressions": {"name": "impressions", "description": "The number of impressions that occurred on the day of the record.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "clicks": {"name": "clicks", "description": "The number of clicks that occurred on the day of the record.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "spend": {"name": "spend", "description": "The amount of spend that occurred on the day of the record.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "reach": {"name": "reach", "description": "The number of unique users who saw your ads at least once. This metric is estimated.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "conversion": {"name": "conversion", "description": "The number of times your ad achieved an outcome, based on the secondary goal you selected. As one campaign may have a number of different secondary goals, this statistic is not supported for campaigns. Please go to ad groups or ads to view. (The total count is calculated based on the time each ad impression occurred.)\n", "meta": {}, "data_type": null, "quote": null, "tags": []}, "likes": {"name": "likes", "description": "The number of likes your video creative received within 1 day of a user seeing a paid ad.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "comments": {"name": "comments", "description": "The number of comments your video creative received within 1 day of a user seeing a paid ad.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "shares": {"name": "shares", "description": "The number of shares that occurred on the day of the record.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "profile_visits": {"name": "profile_visits", "description": "The number of profile visits that occurred on the day of the record.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "follows": {"name": "follows", "description": "The number of follows that occurred on the day of the record.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "video_watched_2_s": {"name": "video_watched_2_s", "description": "The number of times your video played for at least 2 seconds, or completely played. Replays will not be counted.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "video_watched_6_s": {"name": "video_watched_6_s", "description": "The number of times your video played for at least 6 seconds, or completely played. Replays will not be counted.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "video_views_p_25": {"name": "video_views_p_25", "description": "The number of times your video was played at 25% of its length. Replays will not be counted.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "video_views_p_50": {"name": "video_views_p_50", "description": "The number of times your video was played at 50% of its length. Replays will not be counted.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "video_views_p_75": {"name": "video_views_p_75", "description": "The number of times your video was played at 75% of its length. Replays will not be counted.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "daily_cpc": {"name": "daily_cpc", "description": "The average amount of money you've spent on a click.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "daily_cpm": {"name": "daily_cpm", "description": "The average amount of money you've spent per 1,000 impressions.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "daily_daily_ctr": {"name": "daily_daily_ctr", "description": "The percentage of times people saw your ad and performed a click.", "meta": {}, "data_type": null, "quote": null, "tags": []}}, "meta": {}, "docs": {"show": true}, "patch_path": "tiktok_ads://models/tiktok_ads.yml", "compiled_path": "target/compiled/tiktok_ads/models/tiktok_ads__campaign_report.sql", "build_path": null, "deferred": false, "unrendered_config": {"schema": "tiktok_ads", "materialized": "table"}, "created_at": 1641494963.119791, "compiled_sql": "with adapter as (\n\n select *\n from FIVETRAN_DBT_TESTING.DBT_TIKTOK_ADS_tiktok_ads.tiktok_ads__ad_adapter\n \n), aggregated as (\n\n select\n adapter.date_day,\n adapter.campaign_id,\n adapter.campaign_name,\n adapter.advertiser_id,\n sum(adapter.impressions) as impressions,\n sum(adapter.clicks) as clicks,\n sum(adapter.spend) as spend,\n sum(adapter.reach) as reach,\n sum(adapter.conversion) as conversion,\n sum(adapter.likes) as likes,\n sum(adapter.comments) as comments,\n sum(adapter.shares) as shares,\n sum(adapter.profile_visits) as profile_visits,\n sum(adapter.follows) as follows,\n sum(adapter.video_watched_2_s) as video_watched_2_s,\n sum(adapter.video_watched_6_s) as video_watched_6_s,\n sum(adapter.video_views_p_25) as video_views_p_25,\n sum(adapter.video_views_p_50) as video_views_p_50, \n sum(adapter.video_views_p_75) as video_views_p_75,\n sum(adapter.spend)/nullif(sum(adapter.clicks),0) as daily_cpc,\n (sum(adapter.spend)/nullif(sum(adapter.impressions),0))*1000 as daily_cpm,\n (sum(adapter.clicks)/nullif(sum(adapter.impressions),0))*100 as daily_ctr\n\n from adapter\n\n group by 1,2,3,4\n\n)\n\nselect *\nfrom aggregated", "extra_ctes_injected": true, "extra_ctes": [], "relation_name": "FIVETRAN_DBT_TESTING.DBT_TIKTOK_ADS_tiktok_ads.tiktok_ads__campaign_report"}, "model.tiktok_ads.int_tiktok_ads__most_recent_campaign": {"raw_sql": "with base as (\n\n select *\n from {{ var('campaign_history') }}\n\n), filtered as (\n\n select *\n from base\n where is_most_recent_record\n \n)\n\nselect *\nfrom filtered", "compiled": true, "resource_type": "model", "depends_on": {"macros": [], "nodes": ["model.tiktok_ads_source.stg_tiktok_ads__campaign_history"]}, "config": {"enabled": true, "alias": null, "schema": "tiktok_ads", "database": null, "tags": [], "meta": {}, "materialized": "ephemeral", "persist_docs": {}, "quoting": {}, "column_types": {}, "full_refresh": null, "on_schema_change": "ignore", "post-hook": [], "pre-hook": []}, "database": "FIVETRAN_DBT_TESTING", "schema": "DBT_TIKTOK_ADS_tiktok_ads", "fqn": ["tiktok_ads", "intermediate", "int_tiktok_ads__most_recent_campaign"], "unique_id": "model.tiktok_ads.int_tiktok_ads__most_recent_campaign", "package_name": "tiktok_ads", "root_path": "/Users/renee.li/Documents/dbt/tiktok/develop/dbt_packages/tiktok_ads", "path": "intermediate/int_tiktok_ads__most_recent_campaign.sql", "original_file_path": "models/intermediate/int_tiktok_ads__most_recent_campaign.sql", "name": "int_tiktok_ads__most_recent_campaign", "alias": "int_tiktok_ads__most_recent_campaign", "checksum": {"name": "sha256", "checksum": "6c395cfec3d0d6060d64883569154a087d790db7a438b72cea679e96e4fdd220"}, "tags": [], "refs": [["stg_tiktok_ads__campaign_history"]], "sources": [], "description": "Each record in this table represents the most recent data for each campaign.", "columns": {"campaign_id": {"name": "campaign_id", "description": "Campaign ID", "meta": {}, "data_type": null, "quote": null, "tags": []}, "updated_at": {"name": "updated_at", "description": "Time the record was updated.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "advertiser_id": {"name": "advertiser_id", "description": "Advertiser ID", "meta": {}, "data_type": null, "quote": null, "tags": []}, "campaign_name": {"name": "campaign_name", "description": "Campaign name", "meta": {}, "data_type": null, "quote": null, "tags": []}, "campaign_type": {"name": "campaign_type", "description": "Campaign Type, indicates the campaign is a regular campaign or iOS 14 campaign.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "split_test_variable": {"name": "split_test_variable", "description": "Split Test variables. Optional values; TARGETING, BIDDING_OPTIMIZATION , CREATIVE.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "_fivetran_synced": {"name": "_fivetran_synced", "description": "Timestamp of when Fivetran synced a record.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "is_most_recent_record": {"name": "is_most_recent_record", "description": "Whether record is the most recent one for this particular grain.", "meta": {}, "data_type": null, "quote": null, "tags": []}}, "meta": {}, "docs": {"show": true}, "patch_path": "tiktok_ads://models/intermediate/intermediate.yml", "compiled_path": "target/compiled/tiktok_ads/models/intermediate/int_tiktok_ads__most_recent_campaign.sql", "build_path": null, "deferred": false, "unrendered_config": {"schema": "tiktok_ads", "materialized": "ephemeral"}, "created_at": 1641494963.165007, "compiled_sql": "with base as (\n\n select *\n from FIVETRAN_DBT_TESTING.DBT_TIKTOK_ADS_stg_tiktok_ads.stg_tiktok_ads__campaign_history\n\n), filtered as (\n\n select *\n from base\n where is_most_recent_record\n \n)\n\nselect *\nfrom filtered", "extra_ctes_injected": true, "extra_ctes": [], "relation_name": null}, "model.tiktok_ads.int_tiktok_ads__most_recent_ad": {"raw_sql": "with base as (\n\n select *\n from {{ var('ad_history') }}\n\n), filtered as (\n\n select *\n from base\n where is_most_recent_record\n \n)\n\nselect *\nfrom filtered", "compiled": true, "resource_type": "model", "depends_on": {"macros": [], "nodes": ["model.tiktok_ads_source.stg_tiktok_ads__ad_history"]}, "config": {"enabled": true, "alias": null, "schema": "tiktok_ads", "database": null, "tags": [], "meta": {}, "materialized": "ephemeral", "persist_docs": {}, "quoting": {}, "column_types": {}, "full_refresh": null, "on_schema_change": "ignore", "post-hook": [], "pre-hook": []}, "database": "FIVETRAN_DBT_TESTING", "schema": "DBT_TIKTOK_ADS_tiktok_ads", "fqn": ["tiktok_ads", "intermediate", "int_tiktok_ads__most_recent_ad"], "unique_id": "model.tiktok_ads.int_tiktok_ads__most_recent_ad", "package_name": "tiktok_ads", "root_path": "/Users/renee.li/Documents/dbt/tiktok/develop/dbt_packages/tiktok_ads", "path": "intermediate/int_tiktok_ads__most_recent_ad.sql", "original_file_path": "models/intermediate/int_tiktok_ads__most_recent_ad.sql", "name": "int_tiktok_ads__most_recent_ad", "alias": "int_tiktok_ads__most_recent_ad", "checksum": {"name": "sha256", "checksum": "418d75ad47295f6fe67385f0c94e018602e4028dc4cf52a28e9f7006121ad7d7"}, "tags": [], "refs": [["stg_tiktok_ads__ad_history"]], "sources": [], "description": "Each record in this table represents the most recent data for each ad.", "columns": {"ad_id": {"name": "ad_id", "description": "Ad ID", "meta": {}, "data_type": null, "quote": null, "tags": []}, "updated_at": {"name": "updated_at", "description": "Time the record was updated.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "ad_group_id": {"name": "ad_group_id", "description": "Ad group ID", "meta": {}, "data_type": null, "quote": null, "tags": []}, "advertiser_id": {"name": "advertiser_id", "description": "Advertiser ID", "meta": {}, "data_type": null, "quote": null, "tags": []}, "base_url": {"name": "base_url", "description": "The base URL of the ad, extracted from the `landing page url`.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "campaign_id": {"name": "campaign_id", "description": "Campaign ID", "meta": {}, "data_type": null, "quote": null, "tags": []}, "ad_name": {"name": "ad_name", "description": "Ad Name.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "ad_text": {"name": "ad_text", "description": "The ad text.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "call_to_action": {"name": "call_to_action", "description": "Call to action values.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "click_tracking_url": {"name": "click_tracking_url", "description": "Click monitoring URL.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "impression_tracking_url": {"name": "impression_tracking_url", "description": "Display monitoring URL.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "landing_page_url": {"name": "landing_page_url", "description": "Landing page URL.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "url_host": {"name": "url_host", "description": "The URL host of the ad, extracted from the `landing_page_url`.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "url_path": {"name": "url_path", "description": "The URL path of the ad, extracted from the `landing_page_url`.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "utm_source": {"name": "utm_source", "description": "The utm_source parameter of the ad, extracted from the `landing_page_url`.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "utm_medium": {"name": "utm_medium", "description": "The utm_medium parameter of the ad, extracted from the `landing_page_url`.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "utm_campaign": {"name": "utm_campaign", "description": "The utm_campaign parameter of the ad, extracted from the `landing_page_url`.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "utm_content": {"name": "utm_content", "description": "The utm_content parameter of the ad, extracted from the `landing_page_url`.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "utm_term": {"name": "utm_term", "description": "The utm_term parameter of the ad, extracted from the `landing_page_url`.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "video_id": {"name": "video_id", "description": "The video ID.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "_fivetran_synced": {"name": "_fivetran_synced", "description": "Timestamp of when Fivetran synced a record.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "is_most_recent_record": {"name": "is_most_recent_record", "description": "Whether record is the most recent one for this particular grain.", "meta": {}, "data_type": null, "quote": null, "tags": []}}, "meta": {}, "docs": {"show": true}, "patch_path": "tiktok_ads://models/intermediate/intermediate.yml", "compiled_path": "target/compiled/tiktok_ads/models/intermediate/int_tiktok_ads__most_recent_ad.sql", "build_path": null, "deferred": false, "unrendered_config": {"schema": "tiktok_ads", "materialized": "ephemeral"}, "created_at": 1641494963.1619258, "compiled_sql": "with base as (\n\n select *\n from FIVETRAN_DBT_TESTING.DBT_TIKTOK_ADS_stg_tiktok_ads.stg_tiktok_ads__ad_history\n\n), filtered as (\n\n select *\n from base\n where is_most_recent_record\n \n)\n\nselect *\nfrom filtered", "extra_ctes_injected": true, "extra_ctes": [], "relation_name": null}, "model.tiktok_ads.int_tiktok_ads__most_recent_ad_group": {"raw_sql": "with base as (\n\n select *\n from {{ var('ad_group_history') }}\n\n), filtered as (\n\n select *\n from base\n where is_most_recent_record\n \n)\n\nselect *\nfrom filtered", "compiled": true, "resource_type": "model", "depends_on": {"macros": [], "nodes": ["model.tiktok_ads_source.stg_tiktok_ads__ad_group_history"]}, "config": {"enabled": true, "alias": null, "schema": "tiktok_ads", "database": null, "tags": [], "meta": {}, "materialized": "ephemeral", "persist_docs": {}, "quoting": {}, "column_types": {}, "full_refresh": null, "on_schema_change": "ignore", "post-hook": [], "pre-hook": []}, "database": "FIVETRAN_DBT_TESTING", "schema": "DBT_TIKTOK_ADS_tiktok_ads", "fqn": ["tiktok_ads", "intermediate", "int_tiktok_ads__most_recent_ad_group"], "unique_id": "model.tiktok_ads.int_tiktok_ads__most_recent_ad_group", "package_name": "tiktok_ads", "root_path": "/Users/renee.li/Documents/dbt/tiktok/develop/dbt_packages/tiktok_ads", "path": "intermediate/int_tiktok_ads__most_recent_ad_group.sql", "original_file_path": "models/intermediate/int_tiktok_ads__most_recent_ad_group.sql", "name": "int_tiktok_ads__most_recent_ad_group", "alias": "int_tiktok_ads__most_recent_ad_group", "checksum": {"name": "sha256", "checksum": "a1d9693e48ac9773013bd17c70506c937b917254481075d677d7e989e9665358"}, "tags": [], "refs": [["stg_tiktok_ads__ad_group_history"]], "sources": [], "description": "Each record in this table represents the most recent data for each ad group.", "columns": {"ad_group_id": {"name": "ad_group_id", "description": "Ad group ID", "meta": {}, "data_type": null, "quote": null, "tags": []}, "updated_at": {"name": "updated_at", "description": "Time the record was updated.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "advertiser_id": {"name": "advertiser_id", "description": "Advertiser ID", "meta": {}, "data_type": null, "quote": null, "tags": []}, "campaign_id": {"name": "campaign_id", "description": "The Ad group's campaign ID.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "action_days": {"name": "action_days", "description": "Action days", "meta": {}, "data_type": null, "quote": null, "tags": []}, "ad_group_name": {"name": "ad_group_name", "description": "Ad group name. Character limit is 512 and cannot contain emoji.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "age": {"name": "age", "description": "Age groups you want to target.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "audience_type": {"name": "audience_type", "description": "Audience Type", "meta": {}, "data_type": null, "quote": null, "tags": []}, "category": {"name": "category", "description": "Ad group category.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "display_name": {"name": "display_name", "description": "Display name of ad group.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "frequency": {"name": "frequency", "description": "frequency, together with frequency_schedule, controls how often people see your ad (only available for REACH ads). For example, frequency = 2 frequency_schedule = 3 means \"show ads no more than twice every 3 day\".\n", "meta": {}, "data_type": null, "quote": null, "tags": []}, "frequency_schedule": {"name": "frequency_schedule", "description": "frequency, together with frequency, controls how often people see your ad (only available for REACH ads).", "meta": {}, "data_type": null, "quote": null, "tags": []}, "gender": {"name": "gender", "description": "Gender that you want to target.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "landing_page_url": {"name": "landing_page_url", "description": "Landing page URL.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "video_download": {"name": "video_download", "description": "Whether the video is allowed to be downloaded.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "languages": {"name": "languages", "description": "Codes of the languages that you want to target.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "_fivetran_synced": {"name": "_fivetran_synced", "description": "Timestamp of when Fivetran synced a record.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "is_most_recent_record": {"name": "is_most_recent_record", "description": "Whether record is the most recent one for this particular grain.", "meta": {}, "data_type": null, "quote": null, "tags": []}}, "meta": {}, "docs": {"show": true}, "patch_path": "tiktok_ads://models/intermediate/intermediate.yml", "compiled_path": "target/compiled/tiktok_ads/models/intermediate/int_tiktok_ads__most_recent_ad_group.sql", "build_path": null, "deferred": false, "unrendered_config": {"schema": "tiktok_ads", "materialized": "ephemeral"}, "created_at": 1641494963.154113, "compiled_sql": "with base as (\n\n select *\n from FIVETRAN_DBT_TESTING.DBT_TIKTOK_ADS_stg_tiktok_ads.stg_tiktok_ads__ad_group_history\n\n), filtered as (\n\n select *\n from base\n where is_most_recent_record\n \n)\n\nselect *\nfrom filtered", "extra_ctes_injected": true, "extra_ctes": [], "relation_name": null}, "model.tiktok_ads_source.stg_tiktok_ads__campaign_report_hourly": {"raw_sql": "with base as (\n\n select *\n from {{ ref('stg_tiktok_ads__campaign_report_hourly_tmp') }}\n\n), \n\nfields as (\n\n select\n {{\n fivetran_utils.fill_staging_columns(\n source_columns=adapter.get_columns_in_relation(ref('stg_tiktok_ads__campaign_report_hourly_tmp')),\n staging_columns=get_campaign_report_hourly_columns()\n )\n }}\n\n from base\n\n), \n\nfinal as (\n\n select \n campaign_id, \n _fivetran_synced,\n stat_time_hour, \n cpc, \n cpm, \n ctr, \n impressions, \n clicks, \n spend, \n reach, \n conversion, \n cost_per_conversion, \n conversion_rate, \n likes, \n comments, \n shares, \n profile_visits,\n follows, \n video_play_actions, \n video_watched_2_s, \n video_watched_6_s, \n video_views_p_25, \n video_views_p_50,\n video_views_p_75, \n average_video_play, \n average_video_play_per_user\n from fields\n\n)\n\nselect * from final", "compiled": true, "resource_type": "model", "depends_on": {"macros": ["macro.tiktok_ads_source.get_campaign_report_hourly_columns", "macro.fivetran_utils.fill_staging_columns"], "nodes": ["model.tiktok_ads_source.stg_tiktok_ads__campaign_report_hourly_tmp", "model.tiktok_ads_source.stg_tiktok_ads__campaign_report_hourly_tmp"]}, "config": {"enabled": true, "alias": null, "schema": "stg_tiktok_ads", "database": null, "tags": [], "meta": {}, "materialized": "table", "persist_docs": {}, "quoting": {}, "column_types": {}, "full_refresh": null, "on_schema_change": "ignore", "post-hook": [], "pre-hook": []}, "database": "FIVETRAN_DBT_TESTING", "schema": "DBT_TIKTOK_ADS_stg_tiktok_ads", "fqn": ["tiktok_ads_source", "stg_tiktok_ads__campaign_report_hourly"], "unique_id": "model.tiktok_ads_source.stg_tiktok_ads__campaign_report_hourly", "package_name": "tiktok_ads_source", "root_path": "/Users/renee.li/Documents/dbt/tiktok/develop/dbt_packages/tiktok_ads_source", "path": "stg_tiktok_ads__campaign_report_hourly.sql", "original_file_path": "models/stg_tiktok_ads__campaign_report_hourly.sql", "name": "stg_tiktok_ads__campaign_report_hourly", "alias": "stg_tiktok_ads__campaign_report_hourly", "checksum": {"name": "sha256", "checksum": "9f3a04dc48c7f659a074560e3fc118607d68acbd2fa86480448e63bae7fb1f07"}, "tags": [], "refs": [["stg_tiktok_ads__campaign_report_hourly_tmp"], ["stg_tiktok_ads__campaign_report_hourly_tmp"]], "sources": [], "description": "Each record represent data for each campaign for each hour.", "columns": {"campaign_id": {"name": "campaign_id", "description": "Campaign id", "meta": {}, "data_type": null, "quote": null, "tags": []}, "stat_time_hour": {"name": "stat_time_hour", "description": "Hour of activity", "meta": {}, "data_type": null, "quote": null, "tags": []}, "cost_per_conversion": {"name": "cost_per_conversion", "description": "The average amount of money you've spent on a conversion. (The total count is calculated based on the time each ad impression occurred.)\n", "meta": {}, "data_type": null, "quote": null, "tags": []}, "cpc": {"name": "cpc", "description": "The average amount of money you've spent on a click.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "video_play_actions": {"name": "video_play_actions", "description": "The number of times your video starts to play. Replays will not be counted.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "conversion_rate": {"name": "conversion_rate", "description": "The percentage of results you received out of all the clicks of your ads. (The total count is calculated based on the time each ad impression occurred.)\n", "meta": {}, "data_type": null, "quote": null, "tags": []}, "video_views_p_75": {"name": "video_views_p_75", "description": "The number of times your video was played at 75% of its length. Replays will not be counted.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "video_views_p_50": {"name": "video_views_p_50", "description": "The number of times your video was played at 50% of its length. Replays will not be counted.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "impressions": {"name": "impressions", "description": "The number of times your ads were on screen.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "comments": {"name": "comments", "description": "The number of comments your video creative received within 1 day of a user seeing a paid ad.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "conversion": {"name": "conversion", "description": "The number of times your ad achieved an outcome, based on the secondary goal you selected. As one campaign may have a number of different secondary goals, this statistic is not supported for campaigns. Please go to ad groups or ads to view. (The total count is calculated based on the time each ad impression occurred.)\n", "meta": {}, "data_type": null, "quote": null, "tags": []}, "shares": {"name": "shares", "description": "The number of shares your video creative received within 1 day of a user seeing a paid ad.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "clicks": {"name": "clicks", "description": "The number of clicks on your ads.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "cost_per_1000_reached": {"name": "cost_per_1000_reached", "description": "The average cost to reach 1,000 unique users. This metric is estimated.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "video_views_p_25": {"name": "video_views_p_25", "description": "The number of times your video was played at 25% of its length. Replays will not be counted.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "reach": {"name": "reach", "description": "The number of unique users who saw your ads at least once. This metric is estimated.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "profile_visits_rate": {"name": "profile_visits_rate", "description": "The rate of profile visits per impression the paid ad drove during the campaign. This metric is only for Boosted TikToks.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "average_video_play": {"name": "average_video_play", "description": "The average time your video was played per single video view, including any time spent replaying the video.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "average_video_play_per_user": {"name": "average_video_play_per_user", "description": "The average time per user your video was played per single video view, including any time spent replaying the video.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "profile_visits": {"name": "profile_visits", "description": "The number of profile visits the ad drove during the campaign. This metric is only for Boosted TikToks.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "cpm": {"name": "cpm", "description": "The average amount of money you've spent per 1,000 impressions.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "ctr": {"name": "ctr", "description": "The percentage of times people saw your ad and performed a click.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "video_watched_2_s": {"name": "video_watched_2_s", "description": "The number of times your video played for at least 2 seconds. Replays will not be counted.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "follows": {"name": "follows", "description": "The number of new followers that were gained within 1 day of a user seeing a paid ad. This metric is only for Boosted TikToks.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "video_watched_6_s": {"name": "video_watched_6_s", "description": "The number of times your video played for at least 6 seconds, or completely played. Replays will not be counted.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "spend": {"name": "spend", "description": "The estimated total amount of money you've spent on your campaign, ad group or ad during its schedule.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "likes": {"name": "likes", "description": "The number of likes your video creative received within 1 day of a user seeing a paid ad.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "_fivetran_synced": {"name": "_fivetran_synced", "description": "Timestamp of when Fivetran synced a record.", "meta": {}, "data_type": null, "quote": null, "tags": []}}, "meta": {}, "docs": {"show": true}, "patch_path": "tiktok_ads_source://models/stg_tiktok_ads.yml", "compiled_path": "target/compiled/tiktok_ads_source/models/stg_tiktok_ads__campaign_report_hourly.sql", "build_path": null, "deferred": false, "unrendered_config": {"materialized": "table", "schema": "stg_tiktok_ads"}, "created_at": 1641494963.3704178, "compiled_sql": "with base as (\n\n select *\n from FIVETRAN_DBT_TESTING.DBT_TIKTOK_ADS_stg_tiktok_ads.stg_tiktok_ads__campaign_report_hourly_tmp\n\n), \n\nfields as (\n\n select\n \n \n \n _fivetran_synced\n \n as \n \n _fivetran_synced\n \n, \n \n \n average_video_play\n \n as \n \n average_video_play\n \n, \n \n \n average_video_play_per_user\n \n as \n \n average_video_play_per_user\n \n, \n \n \n campaign_id\n \n as \n \n campaign_id\n \n, \n \n \n clicks\n \n as \n \n clicks\n \n, \n \n \n comments\n \n as \n \n comments\n \n, \n \n \n conversion\n \n as \n \n conversion\n \n, \n \n \n conversion_rate\n \n as \n \n conversion_rate\n \n, \n \n \n cost_per_1000_reached\n \n as \n \n cost_per_1000_reached\n \n, \n \n \n cost_per_conversion\n \n as \n \n cost_per_conversion\n \n, \n \n \n cost_per_result\n \n as \n \n cost_per_result\n \n, \n \n \n cost_per_secondary_goal_result\n \n as \n \n cost_per_secondary_goal_result\n \n, \n \n \n cpc\n \n as \n \n cpc\n \n, \n \n \n cpm\n \n as \n \n cpm\n \n, \n \n \n ctr\n \n as \n \n ctr\n \n, \n \n \n follows\n \n as \n \n follows\n \n, \n \n \n impressions\n \n as \n \n impressions\n \n, \n \n \n likes\n \n as \n \n likes\n \n, \n \n \n profile_visits\n \n as \n \n profile_visits\n \n, \n \n \n profile_visits_rate\n \n as \n \n profile_visits_rate\n \n, \n \n \n reach\n \n as \n \n reach\n \n, \n \n \n real_time_conversion\n \n as \n \n real_time_conversion\n \n, \n \n \n real_time_conversion_rate\n \n as \n \n real_time_conversion_rate\n \n, \n \n \n real_time_cost_per_conversion\n \n as \n \n real_time_cost_per_conversion\n \n, \n \n \n real_time_cost_per_result\n \n as \n \n real_time_cost_per_result\n \n, \n \n \n real_time_result\n \n as \n \n real_time_result\n \n, \n \n \n real_time_result_rate\n \n as \n \n real_time_result_rate\n \n, \n \n \n result\n \n as \n \n result\n \n, \n \n \n result_rate\n \n as \n \n result_rate\n \n, \n \n \n secondary_goal_result\n \n as \n \n secondary_goal_result\n \n, \n \n \n secondary_goal_result_rate\n \n as \n \n secondary_goal_result_rate\n \n, \n \n \n shares\n \n as \n \n shares\n \n, \n \n \n spend\n \n as \n \n spend\n \n, \n \n \n stat_time_hour\n \n as \n \n stat_time_hour\n \n, \n \n \n video_play_actions\n \n as \n \n video_play_actions\n \n, \n \n \n video_views_p_100\n \n as \n \n video_views_p_100\n \n, \n \n \n video_views_p_25\n \n as \n \n video_views_p_25\n \n, \n \n \n video_views_p_50\n \n as \n \n video_views_p_50\n \n, \n \n \n video_views_p_75\n \n as \n \n video_views_p_75\n \n, \n \n \n video_watched_2_s\n \n as \n \n video_watched_2_s\n \n, \n \n \n video_watched_6_s\n \n as \n \n video_watched_6_s\n \n\n\n\n\n from base\n\n), \n\nfinal as (\n\n select \n campaign_id, \n _fivetran_synced,\n stat_time_hour, \n cpc, \n cpm, \n ctr, \n impressions, \n clicks, \n spend, \n reach, \n conversion, \n cost_per_conversion, \n conversion_rate, \n likes, \n comments, \n shares, \n profile_visits,\n follows, \n video_play_actions, \n video_watched_2_s, \n video_watched_6_s, \n video_views_p_25, \n video_views_p_50,\n video_views_p_75, \n average_video_play, \n average_video_play_per_user\n from fields\n\n)\n\nselect * from final", "extra_ctes_injected": true, "extra_ctes": [], "relation_name": "FIVETRAN_DBT_TESTING.DBT_TIKTOK_ADS_stg_tiktok_ads.stg_tiktok_ads__campaign_report_hourly"}, "model.tiktok_ads_source.stg_tiktok_ads__ad_group_report_hourly": {"raw_sql": "with base as (\n\n select *\n from {{ ref('stg_tiktok_ads__ad_group_report_hourly_tmp') }}\n\n), \n\nfields as (\n\n select\n {{\n fivetran_utils.fill_staging_columns(\n source_columns=adapter.get_columns_in_relation(ref('stg_tiktok_ads__ad_group_report_hourly_tmp')),\n staging_columns=get_ad_group_report_hourly_columns()\n )\n }}\n\n from base\n\n), \n\nfinal as (\n\n select \n adgroup_id as ad_group_id, \n _fivetran_synced,\n stat_time_hour, \n cpc, \n cpm, \n ctr, \n impressions, \n clicks, \n spend, \n reach, \n conversion, \n cost_per_conversion, \n conversion_rate, \n likes, \n comments, \n shares, \n profile_visits,\n follows, \n video_play_actions, \n video_watched_2_s, \n video_watched_6_s, \n video_views_p_25, \n video_views_p_50,\n video_views_p_75, \n average_video_play, \n average_video_play_per_user\n from fields\n\n) \n\nselect * from final", "compiled": true, "resource_type": "model", "depends_on": {"macros": ["macro.tiktok_ads_source.get_ad_group_report_hourly_columns", "macro.fivetran_utils.fill_staging_columns"], "nodes": ["model.tiktok_ads_source.stg_tiktok_ads__ad_group_report_hourly_tmp", "model.tiktok_ads_source.stg_tiktok_ads__ad_group_report_hourly_tmp"]}, "config": {"enabled": true, "alias": null, "schema": "stg_tiktok_ads", "database": null, "tags": [], "meta": {}, "materialized": "table", "persist_docs": {}, "quoting": {}, "column_types": {}, "full_refresh": null, "on_schema_change": "ignore", "post-hook": [], "pre-hook": []}, "database": "FIVETRAN_DBT_TESTING", "schema": "DBT_TIKTOK_ADS_stg_tiktok_ads", "fqn": ["tiktok_ads_source", "stg_tiktok_ads__ad_group_report_hourly"], "unique_id": "model.tiktok_ads_source.stg_tiktok_ads__ad_group_report_hourly", "package_name": "tiktok_ads_source", "root_path": "/Users/renee.li/Documents/dbt/tiktok/develop/dbt_packages/tiktok_ads_source", "path": "stg_tiktok_ads__ad_group_report_hourly.sql", "original_file_path": "models/stg_tiktok_ads__ad_group_report_hourly.sql", "name": "stg_tiktok_ads__ad_group_report_hourly", "alias": "stg_tiktok_ads__ad_group_report_hourly", "checksum": {"name": "sha256", "checksum": "c9c99be3105eaeff47940f04552da2b83c6c0e238f90e250030d80f4daa31483"}, "tags": [], "refs": [["stg_tiktok_ads__ad_group_report_hourly_tmp"], ["stg_tiktok_ads__ad_group_report_hourly_tmp"]], "sources": [], "description": "Each record represents data for each ad group for each hour.", "columns": {"ad_group_id": {"name": "ad_group_id", "description": "Ad group id", "meta": {}, "data_type": null, "quote": null, "tags": []}, "stat_time_hour": {"name": "stat_time_hour", "description": "Hour of activity", "meta": {}, "data_type": null, "quote": null, "tags": []}, "cost_per_conversion": {"name": "cost_per_conversion", "description": "The average amount of money you've spent on a conversion. (The total count is calculated based on the time each ad impression occurred.)\n", "meta": {}, "data_type": null, "quote": null, "tags": []}, "cpc": {"name": "cpc", "description": "The average amount of money you've spent on a click.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "video_play_actions": {"name": "video_play_actions", "description": "The number of times your video starts to play. Replays will not be counted.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "conversion_rate": {"name": "conversion_rate", "description": "The percentage of results you received out of all the clicks of your ads. (The total count is calculated based on the time each ad impression occurred.)\n", "meta": {}, "data_type": null, "quote": null, "tags": []}, "video_views_p_75": {"name": "video_views_p_75", "description": "The number of times your video was played at 75% of its length. Replays will not be counted.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "video_views_p_50": {"name": "video_views_p_50", "description": "The number of times your video was played at 50% of its length. Replays will not be counted.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "impressions": {"name": "impressions", "description": "The number of times your ads were on screen.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "comments": {"name": "comments", "description": "The number of comments your video creative received within 1 day of a user seeing a paid ad.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "conversion": {"name": "conversion", "description": "The number of times your ad achieved an outcome, based on the secondary goal you selected. As one campaign may have a number of different secondary goals, this statistic is not supported for campaigns. Please go to ad groups or ads to view. (The total count is calculated based on the time each ad impression occurred.)\n", "meta": {}, "data_type": null, "quote": null, "tags": []}, "shares": {"name": "shares", "description": "The number of shares your video creative received within 1 day of a user seeing a paid ad.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "clicks": {"name": "clicks", "description": "The number of clicks on your ads.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "cost_per_1000_reached": {"name": "cost_per_1000_reached", "description": "The average cost to reach 1,000 unique users. This metric is estimated.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "video_views_p_25": {"name": "video_views_p_25", "description": "The number of times your video was played at 25% of its length. Replays will not be counted.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "reach": {"name": "reach", "description": "The number of unique users who saw your ads at least once. This metric is estimated.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "profile_visits_rate": {"name": "profile_visits_rate", "description": "The rate of profile visits per impression the paid ad drove during the campaign. This metric is only for Boosted TikToks.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "average_video_play": {"name": "average_video_play", "description": "The average time your video was played per single video view, including any time spent replaying the video.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "average_video_play_per_user": {"name": "average_video_play_per_user", "description": "The average time per user your video was played per single video view, including any time spent replaying the video.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "profile_visits": {"name": "profile_visits", "description": "The number of profile visits the ad drove during the campaign. This metric is only for Boosted TikToks.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "cpm": {"name": "cpm", "description": "The average amount of money you've spent per 1,000 impressions.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "ctr": {"name": "ctr", "description": "The percentage of times people saw your ad and performed a click.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "video_watched_2_s": {"name": "video_watched_2_s", "description": "The number of times your video played for at least 2 seconds. Replays will not be counted.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "follows": {"name": "follows", "description": "The number of new followers that were gained within 1 day of a user seeing a paid ad. This metric is only for Boosted TikToks.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "video_watched_6_s": {"name": "video_watched_6_s", "description": "The number of times your video played for at least 6 seconds, or completely played. Replays will not be counted.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "spend": {"name": "spend", "description": "The estimated total amount of money you've spent on your campaign, ad group or ad during its schedule.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "likes": {"name": "likes", "description": "The number of likes your video creative received within 1 day of a user seeing a paid ad.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "_fivetran_synced": {"name": "_fivetran_synced", "description": "Timestamp of when Fivetran synced a record.", "meta": {}, "data_type": null, "quote": null, "tags": []}}, "meta": {}, "docs": {"show": true}, "patch_path": "tiktok_ads_source://models/stg_tiktok_ads.yml", "compiled_path": "target/compiled/tiktok_ads_source/models/stg_tiktok_ads__ad_group_report_hourly.sql", "build_path": null, "deferred": false, "unrendered_config": {"materialized": "table", "schema": "stg_tiktok_ads"}, "created_at": 1641494963.32393, "compiled_sql": "with base as (\n\n select *\n from FIVETRAN_DBT_TESTING.DBT_TIKTOK_ADS_stg_tiktok_ads.stg_tiktok_ads__ad_group_report_hourly_tmp\n\n), \n\nfields as (\n\n select\n \n \n \n _fivetran_synced\n \n as \n \n _fivetran_synced\n \n, \n \n \n adgroup_id\n \n as \n \n adgroup_id\n \n, \n \n \n average_video_play\n \n as \n \n average_video_play\n \n, \n \n \n average_video_play_per_user\n \n as \n \n average_video_play_per_user\n \n, \n \n \n clicks\n \n as \n \n clicks\n \n, \n \n \n comments\n \n as \n \n comments\n \n, \n \n \n conversion\n \n as \n \n conversion\n \n, \n \n \n conversion_rate\n \n as \n \n conversion_rate\n \n, \n \n \n cost_per_1000_reached\n \n as \n \n cost_per_1000_reached\n \n, \n \n \n cost_per_conversion\n \n as \n \n cost_per_conversion\n \n, \n \n \n cost_per_result\n \n as \n \n cost_per_result\n \n, \n \n \n cost_per_secondary_goal_result\n \n as \n \n cost_per_secondary_goal_result\n \n, \n \n \n cpc\n \n as \n \n cpc\n \n, \n \n \n cpm\n \n as \n \n cpm\n \n, \n \n \n ctr\n \n as \n \n ctr\n \n, \n \n \n follows\n \n as \n \n follows\n \n, \n \n \n impressions\n \n as \n \n impressions\n \n, \n \n \n likes\n \n as \n \n likes\n \n, \n \n \n profile_visits\n \n as \n \n profile_visits\n \n, \n \n \n profile_visits_rate\n \n as \n \n profile_visits_rate\n \n, \n \n \n reach\n \n as \n \n reach\n \n, \n \n \n real_time_conversion\n \n as \n \n real_time_conversion\n \n, \n \n \n real_time_conversion_rate\n \n as \n \n real_time_conversion_rate\n \n, \n \n \n real_time_cost_per_conversion\n \n as \n \n real_time_cost_per_conversion\n \n, \n \n \n real_time_cost_per_result\n \n as \n \n real_time_cost_per_result\n \n, \n \n \n real_time_result\n \n as \n \n real_time_result\n \n, \n \n \n real_time_result_rate\n \n as \n \n real_time_result_rate\n \n, \n \n \n result\n \n as \n \n result\n \n, \n \n \n result_rate\n \n as \n \n result_rate\n \n, \n \n \n secondary_goal_result\n \n as \n \n secondary_goal_result\n \n, \n \n \n secondary_goal_result_rate\n \n as \n \n secondary_goal_result_rate\n \n, \n \n \n shares\n \n as \n \n shares\n \n, \n \n \n spend\n \n as \n \n spend\n \n, \n \n \n stat_time_hour\n \n as \n \n stat_time_hour\n \n, \n \n \n video_play_actions\n \n as \n \n video_play_actions\n \n, \n \n \n video_views_p_100\n \n as \n \n video_views_p_100\n \n, \n \n \n video_views_p_25\n \n as \n \n video_views_p_25\n \n, \n \n \n video_views_p_50\n \n as \n \n video_views_p_50\n \n, \n \n \n video_views_p_75\n \n as \n \n video_views_p_75\n \n, \n \n \n video_watched_2_s\n \n as \n \n video_watched_2_s\n \n, \n \n \n video_watched_6_s\n \n as \n \n video_watched_6_s\n \n\n\n\n\n from base\n\n), \n\nfinal as (\n\n select \n adgroup_id as ad_group_id, \n _fivetran_synced,\n stat_time_hour, \n cpc, \n cpm, \n ctr, \n impressions, \n clicks, \n spend, \n reach, \n conversion, \n cost_per_conversion, \n conversion_rate, \n likes, \n comments, \n shares, \n profile_visits,\n follows, \n video_play_actions, \n video_watched_2_s, \n video_watched_6_s, \n video_views_p_25, \n video_views_p_50,\n video_views_p_75, \n average_video_play, \n average_video_play_per_user\n from fields\n\n) \n\nselect * from final", "extra_ctes_injected": true, "extra_ctes": [], "relation_name": "FIVETRAN_DBT_TESTING.DBT_TIKTOK_ADS_stg_tiktok_ads.stg_tiktok_ads__ad_group_report_hourly"}, "model.tiktok_ads_source.stg_tiktok_ads__ad_group_history": {"raw_sql": "with base as (\n\n select *\n from {{ ref('stg_tiktok_ads__ad_group_history_tmp') }}\n\n), \n\nfields as (\n\n select\n {{\n fivetran_utils.fill_staging_columns(\n source_columns=adapter.get_columns_in_relation(ref('stg_tiktok_ads__ad_group_history_tmp')),\n staging_columns=get_ad_group_history_columns()\n )\n }}\n\n from base\n\n), \n\nfinal as (\n\n select \n adgroup_id as ad_group_id,\n updated_at,\n advertiser_id,\n campaign_id,\n action_days,\n action_categories,\n adgroup_name as ad_group_name,\n age,\n audience_type,\n budget,\n category,\n display_name,\n interest_category_v_2 as interest_category,\n frequency,\n frequency_schedule,\n gender,\n languages, \n landing_page_url,\n _fivetran_synced\n from fields\n\n), \n\nmost_recent as (\n\n select \n *,\n row_number() over (partition by ad_group_id order by updated_at desc) = 1 as is_most_recent_record\n from final\n\n)\n\nselect * from most_recent", "compiled": true, "resource_type": "model", "depends_on": {"macros": ["macro.tiktok_ads_source.get_ad_group_history_columns", "macro.fivetran_utils.fill_staging_columns"], "nodes": ["model.tiktok_ads_source.stg_tiktok_ads__ad_group_history_tmp", "model.tiktok_ads_source.stg_tiktok_ads__ad_group_history_tmp"]}, "config": {"enabled": true, "alias": null, "schema": "stg_tiktok_ads", "database": null, "tags": [], "meta": {}, "materialized": "table", "persist_docs": {}, "quoting": {}, "column_types": {}, "full_refresh": null, "on_schema_change": "ignore", "post-hook": [], "pre-hook": []}, "database": "FIVETRAN_DBT_TESTING", "schema": "DBT_TIKTOK_ADS_stg_tiktok_ads", "fqn": ["tiktok_ads_source", "stg_tiktok_ads__ad_group_history"], "unique_id": "model.tiktok_ads_source.stg_tiktok_ads__ad_group_history", "package_name": "tiktok_ads_source", "root_path": "/Users/renee.li/Documents/dbt/tiktok/develop/dbt_packages/tiktok_ads_source", "path": "stg_tiktok_ads__ad_group_history.sql", "original_file_path": "models/stg_tiktok_ads__ad_group_history.sql", "name": "stg_tiktok_ads__ad_group_history", "alias": "stg_tiktok_ads__ad_group_history", "checksum": {"name": "sha256", "checksum": "fec58c41aa34a9db325a85b70bb4c4b3bccedced9975d51d1f4e857b8894ae50"}, "tags": [], "refs": [["stg_tiktok_ads__ad_group_history_tmp"], ["stg_tiktok_ads__ad_group_history_tmp"]], "sources": [], "description": "Each record represents data for each ad group.", "columns": {"ad_group_id": {"name": "ad_group_id", "description": "Ad group ID", "meta": {}, "data_type": null, "quote": null, "tags": []}, "updated_at": {"name": "updated_at", "description": "Time the record was updated.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "advertiser_id": {"name": "advertiser_id", "description": "Advertiser ID", "meta": {}, "data_type": null, "quote": null, "tags": []}, "action_categories": {"name": "action_categories", "description": "IDs of the action categories (behaviors) that you want to target.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "campaign_id": {"name": "campaign_id", "description": "The Ad group's campaign ID.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "action_days": {"name": "action_days", "description": "Action days", "meta": {}, "data_type": null, "quote": null, "tags": []}, "ad_group_name": {"name": "ad_group_name", "description": "Ad group name. Character limit is 512 and cannot contain emoji.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "age": {"name": "age", "description": "Age groups you want to target.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "audience_type": {"name": "audience_type", "description": "Audience Type", "meta": {}, "data_type": null, "quote": null, "tags": []}, "budget": {"name": "budget", "description": "Ad budget. Returns 0.0 when Campaign Budget Optimization (budget_optimize_switch) is on.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "category": {"name": "category", "description": "Ad group category.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "display_name": {"name": "display_name", "description": "Display name of ad group.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "interest_category": {"name": "interest_category", "description": "Interest classification. If the interest is specified, users that do not meet interest target will be excluded during delivery.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "frequency": {"name": "frequency", "description": "frequency, together with frequency_schedule, controls how often people see your ad (only available for REACH ads). For example, frequency = 2 frequency_schedule = 3 means \"show ads no more than twice every 3 day\".\n", "meta": {}, "data_type": null, "quote": null, "tags": []}, "frequency_schedule": {"name": "frequency_schedule", "description": "frequency, together with frequency, controls how often people see your ad (only available for REACH ads).", "meta": {}, "data_type": null, "quote": null, "tags": []}, "gender": {"name": "gender", "description": "Gender that you want to target.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "landing_page_url": {"name": "landing_page_url", "description": "Landing page URL.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "languages": {"name": "languages", "description": "Codes of the languages that you want to target.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "_fivetran_synced": {"name": "_fivetran_synced", "description": "Timestamp of when Fivetran synced a record.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "is_most_recent_record": {"name": "is_most_recent_record", "description": "Whether record is the most recent one for this particular grain.", "meta": {}, "data_type": null, "quote": null, "tags": []}}, "meta": {}, "docs": {"show": true}, "patch_path": "tiktok_ads_source://models/stg_tiktok_ads.yml", "compiled_path": "target/compiled/tiktok_ads_source/models/stg_tiktok_ads__ad_group_history.sql", "build_path": null, "deferred": false, "unrendered_config": {"materialized": "table", "schema": "stg_tiktok_ads"}, "created_at": 1641494963.295321, "compiled_sql": "with base as (\n\n select *\n from FIVETRAN_DBT_TESTING.DBT_TIKTOK_ADS_stg_tiktok_ads.stg_tiktok_ads__ad_group_history_tmp\n\n), \n\nfields as (\n\n select\n \n \n \n _fivetran_synced\n \n as \n \n _fivetran_synced\n \n, \n \n \n action_days\n \n as \n \n action_days\n \n, \n \n \n adgroup_id\n \n as \n \n adgroup_id\n \n, \n \n \n adgroup_name\n \n as \n \n adgroup_name\n \n, \n \n \n advertiser_id\n \n as \n \n advertiser_id\n \n, \n \n \n android_osv\n \n as \n \n android_osv\n \n, \n \n \n app_download_url\n \n as \n \n app_download_url\n \n, \n \n \n app_id\n \n as \n \n app_id\n \n, \n \n \n app_name\n \n as \n \n app_name\n \n, \n \n \n app_type\n \n as \n \n app_type\n \n, \n \n \n audience_type\n \n as \n \n audience_type\n \n, \n \n \n bid\n \n as \n \n bid\n \n, \n \n \n bid_type\n \n as \n \n bid_type\n \n, \n \n \n billing_event\n \n as \n \n billing_event\n \n, \n \n \n budget\n \n as \n \n budget\n \n, \n \n \n budget_mode\n \n as \n \n budget_mode\n \n, \n \n \n campaign_id\n \n as \n \n campaign_id\n \n, \n \n \n category\n \n as \n \n category\n \n, \n \n \n click_tracking_url\n \n as \n \n click_tracking_url\n \n, \n \n \n conversion_bid\n \n as \n \n conversion_bid\n \n, \n \n \n cpv_video_duration\n \n as \n \n cpv_video_duration\n \n, \n \n \n create_time\n \n as \n \n create_time\n \n, \n \n \n creative_material_mode\n \n as \n \n creative_material_mode\n \n, \n \n \n dayparting\n \n as \n \n dayparting\n \n, \n \n \n deep_bid_type\n \n as \n \n deep_bid_type\n \n, \n \n \n deep_cpabid\n \n as \n \n deep_cpabid\n \n, \n \n \n deep_external_action\n \n as \n \n deep_external_action\n \n, \n \n \n display_name\n \n as \n \n display_name\n \n, \n \n \n enable_inventory_filter\n \n as \n \n enable_inventory_filter\n \n, \n \n \n external_action\n \n as \n \n external_action\n \n, \n \n \n fallback_type\n \n as \n \n fallback_type\n \n, \n \n \n frequency\n \n as \n \n frequency\n \n, \n \n \n frequency_schedule\n \n as \n \n frequency_schedule\n \n, \n \n \n gender\n \n as \n \n gender\n \n, \n \n \n impression_tracking_url\n \n as \n \n impression_tracking_url\n \n, \n \n \n ios_osv\n \n as \n \n ios_osv\n \n, \n \n \n is_comment_disable\n \n as \n \n is_comment_disable\n \n, \n \n \n is_hfss\n \n as \n \n is_hfss\n \n, \n \n \n is_new_structure\n \n as \n \n is_new_structure\n \n, \n \n \n landing_page_url\n \n as \n \n landing_page_url\n \n, \n \n \n open_url\n \n as \n \n open_url\n \n, \n \n \n open_url_type\n \n as \n \n open_url_type\n \n, \n \n \n opt_status\n \n as \n \n opt_status\n \n, \n \n \n optimize_goal\n \n as \n \n optimize_goal\n \n, \n \n \n pacing\n \n as \n \n pacing\n \n, \n \n \n package\n \n as \n \n package\n \n, \n \n \n pixel_id\n \n as \n \n pixel_id\n \n, \n \n \n placement_type\n \n as \n \n placement_type\n \n, \n \n \n profile_image\n \n as \n \n profile_image\n \n, \n \n \n schedule_end_time\n \n as \n \n schedule_end_time\n \n, \n \n \n schedule_start_time\n \n as \n \n schedule_start_time\n \n, \n \n \n schedule_type\n \n as \n \n schedule_type\n \n, \n \n \n skip_learning_phase\n \n as \n \n skip_learning_phase\n \n, \n \n \n statistic_type\n \n as \n \n statistic_type\n \n, \n \n \n status\n \n as \n \n status\n \n, \n \n \n updated_at\n \n as \n \n updated_at\n \n, \n \n \n video_download\n \n as \n \n video_download\n \n, \n \n \n audience\n \n as \n \n audience\n \n, \n \n \n excluded_audience\n \n as \n \n excluded_audience\n \n, \n \n \n location\n \n as \n \n location\n \n, \n \n \n interest_category_v_2\n \n as \n \n interest_category_v_2\n \n, \n \n \n pangle_block_app_list_id\n \n as \n \n pangle_block_app_list_id\n \n, \n \n \n action_categories\n \n as \n \n action_categories\n \n, \n \n \n placement\n \n as \n \n placement\n \n, \n \n \n keywords\n \n as \n \n keywords\n \n, \n \n \n age\n \n as \n \n age\n \n, \n \n \n languages\n \n as \n \n languages\n \n\n\n\n\n from base\n\n), \n\nfinal as (\n\n select \n adgroup_id as ad_group_id,\n updated_at,\n advertiser_id,\n campaign_id,\n action_days,\n action_categories,\n adgroup_name as ad_group_name,\n age,\n audience_type,\n budget,\n category,\n display_name,\n interest_category_v_2 as interest_category,\n frequency,\n frequency_schedule,\n gender,\n languages, \n landing_page_url,\n _fivetran_synced\n from fields\n\n), \n\nmost_recent as (\n\n select \n *,\n row_number() over (partition by ad_group_id order by updated_at desc) = 1 as is_most_recent_record\n from final\n\n)\n\nselect * from most_recent", "extra_ctes_injected": true, "extra_ctes": [], "relation_name": "FIVETRAN_DBT_TESTING.DBT_TIKTOK_ADS_stg_tiktok_ads.stg_tiktok_ads__ad_group_history"}, "model.tiktok_ads_source.stg_tiktok_ads__ad_report_hourly": {"raw_sql": "with base as (\n\n select *\n from {{ ref('stg_tiktok_ads__ad_report_hourly_tmp') }}\n\n), \n\nfields as (\n\n select\n {{\n fivetran_utils.fill_staging_columns(\n source_columns=adapter.get_columns_in_relation(ref('stg_tiktok_ads__ad_report_hourly_tmp')),\n staging_columns=get_ad_report_hourly_columns()\n )\n }}\n\n from base\n\n), \n\nfinal as (\n\n select \n ad_id, \n _fivetran_synced,\n stat_time_hour, \n cpc, \n cpm, \n ctr, \n impressions, \n clicks, \n spend, \n reach, \n conversion, \n cost_per_conversion, \n conversion_rate, \n likes, \n comments, \n shares, \n profile_visits,\n follows, \n video_play_actions, \n video_watched_2_s, \n video_watched_6_s, \n video_views_p_25, \n video_views_p_50,\n video_views_p_75, \n average_video_play, \n average_video_play_per_user\n from fields\n\n)\n\nselect * from final", "compiled": true, "resource_type": "model", "depends_on": {"macros": ["macro.tiktok_ads_source.get_ad_report_hourly_columns", "macro.fivetran_utils.fill_staging_columns"], "nodes": ["model.tiktok_ads_source.stg_tiktok_ads__ad_report_hourly_tmp", "model.tiktok_ads_source.stg_tiktok_ads__ad_report_hourly_tmp"]}, "config": {"enabled": true, "alias": null, "schema": "stg_tiktok_ads", "database": null, "tags": [], "meta": {}, "materialized": "table", "persist_docs": {}, "quoting": {}, "column_types": {}, "full_refresh": null, "on_schema_change": "ignore", "post-hook": [], "pre-hook": []}, "database": "FIVETRAN_DBT_TESTING", "schema": "DBT_TIKTOK_ADS_stg_tiktok_ads", "fqn": ["tiktok_ads_source", "stg_tiktok_ads__ad_report_hourly"], "unique_id": "model.tiktok_ads_source.stg_tiktok_ads__ad_report_hourly", "package_name": "tiktok_ads_source", "root_path": "/Users/renee.li/Documents/dbt/tiktok/develop/dbt_packages/tiktok_ads_source", "path": "stg_tiktok_ads__ad_report_hourly.sql", "original_file_path": "models/stg_tiktok_ads__ad_report_hourly.sql", "name": "stg_tiktok_ads__ad_report_hourly", "alias": "stg_tiktok_ads__ad_report_hourly", "checksum": {"name": "sha256", "checksum": "82f448fb9abd66a79b6a316fe415293e9071e3e69f9efc3263f17aa94e597a8e"}, "tags": [], "refs": [["stg_tiktok_ads__ad_report_hourly_tmp"], ["stg_tiktok_ads__ad_report_hourly_tmp"]], "sources": [], "description": "Each record represents data for each ad for each hour.", "columns": {"ad_id": {"name": "ad_id", "description": "Ad id", "meta": {}, "data_type": null, "quote": null, "tags": []}, "stat_time_hour": {"name": "stat_time_hour", "description": "Hour of activity", "meta": {}, "data_type": null, "quote": null, "tags": []}, "cost_per_conversion": {"name": "cost_per_conversion", "description": "The average amount of money you've spent on a conversion. (The total count is calculated based on the time each ad impression occurred.)\n", "meta": {}, "data_type": null, "quote": null, "tags": []}, "cpc": {"name": "cpc", "description": "The average amount of money you've spent on a click.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "video_play_actions": {"name": "video_play_actions", "description": "The number of times your video starts to play. Replays will not be counted.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "conversion_rate": {"name": "conversion_rate", "description": "The percentage of results you received out of all the clicks of your ads. (The total count is calculated based on the time each ad impression occurred.)\n", "meta": {}, "data_type": null, "quote": null, "tags": []}, "video_views_p_75": {"name": "video_views_p_75", "description": "The number of times your video was played at 75% of its length. Replays will not be counted.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "video_views_p_50": {"name": "video_views_p_50", "description": "The number of times your video was played at 50% of its length. Replays will not be counted.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "impressions": {"name": "impressions", "description": "The number of times your ads were on screen.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "comments": {"name": "comments", "description": "The number of comments your video creative received within 1 day of a user seeing a paid ad.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "conversion": {"name": "conversion", "description": "The number of times your ad achieved an outcome, based on the secondary goal you selected. As one campaign may have a number of different secondary goals, this statistic is not supported for campaigns. Please go to ad groups or ads to view. (The total count is calculated based on the time each ad impression occurred.)\n", "meta": {}, "data_type": null, "quote": null, "tags": []}, "shares": {"name": "shares", "description": "The number of shares your video creative received within 1 day of a user seeing a paid ad.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "clicks": {"name": "clicks", "description": "The number of clicks on your ads.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "cost_per_1000_reached": {"name": "cost_per_1000_reached", "description": "The average cost to reach 1,000 unique users. This metric is estimated.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "video_views_p_25": {"name": "video_views_p_25", "description": "The number of times your video was played at 25% of its length. Replays will not be counted.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "reach": {"name": "reach", "description": "The number of unique users who saw your ads at least once. This metric is estimated.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "profile_visits_rate": {"name": "profile_visits_rate", "description": "The rate of profile visits per impression the paid ad drove during the campaign. This metric is only for Boosted TikToks.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "average_video_play": {"name": "average_video_play", "description": "The average time your video was played per single video view, including any time spent replaying the video.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "average_video_play_per_user": {"name": "average_video_play_per_user", "description": "The average time per user your video was played per single video view, including any time spent replaying the video.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "profile_visits": {"name": "profile_visits", "description": "The number of profile visits the ad drove during the campaign. This metric is only for Boosted TikToks.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "cpm": {"name": "cpm", "description": "The average amount of money you've spent per 1,000 impressions.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "ctr": {"name": "ctr", "description": "The percentage of times people saw your ad and performed a click.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "video_watched_2_s": {"name": "video_watched_2_s", "description": "The number of times your video played for at least 2 seconds. Replays will not be counted.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "follows": {"name": "follows", "description": "The number of new followers that were gained within 1 day of a user seeing a paid ad. This metric is only for Boosted TikToks.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "video_watched_6_s": {"name": "video_watched_6_s", "description": "The number of times your video played for at least 6 seconds, or completely played. Replays will not be counted.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "spend": {"name": "spend", "description": "The estimated total amount of money you've spent on your campaign, ad group or ad during its schedule.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "likes": {"name": "likes", "description": "The number of likes your video creative received within 1 day of a user seeing a paid ad.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "_fivetran_synced": {"name": "_fivetran_synced", "description": "Timestamp of when Fivetran synced a record.", "meta": {}, "data_type": null, "quote": null, "tags": []}}, "meta": {}, "docs": {"show": true}, "patch_path": "tiktok_ads_source://models/stg_tiktok_ads.yml", "compiled_path": "target/compiled/tiktok_ads_source/models/stg_tiktok_ads__ad_report_hourly.sql", "build_path": null, "deferred": false, "unrendered_config": {"materialized": "table", "schema": "stg_tiktok_ads"}, "created_at": 1641494963.3143392, "compiled_sql": "with base as (\n\n select *\n from FIVETRAN_DBT_TESTING.DBT_TIKTOK_ADS_stg_tiktok_ads.stg_tiktok_ads__ad_report_hourly_tmp\n\n), \n\nfields as (\n\n select\n \n \n \n _fivetran_synced\n \n as \n \n _fivetran_synced\n \n, \n \n \n ad_id\n \n as \n \n ad_id\n \n, \n \n \n average_video_play\n \n as \n \n average_video_play\n \n, \n \n \n average_video_play_per_user\n \n as \n \n average_video_play_per_user\n \n, \n \n \n clicks\n \n as \n \n clicks\n \n, \n \n \n comments\n \n as \n \n comments\n \n, \n \n \n conversion\n \n as \n \n conversion\n \n, \n \n \n conversion_rate\n \n as \n \n conversion_rate\n \n, \n \n \n cost_per_1000_reached\n \n as \n \n cost_per_1000_reached\n \n, \n \n \n cost_per_conversion\n \n as \n \n cost_per_conversion\n \n, \n \n \n cost_per_result\n \n as \n \n cost_per_result\n \n, \n \n \n cost_per_secondary_goal_result\n \n as \n \n cost_per_secondary_goal_result\n \n, \n \n \n cpc\n \n as \n \n cpc\n \n, \n \n \n cpm\n \n as \n \n cpm\n \n, \n \n \n ctr\n \n as \n \n ctr\n \n, \n \n \n follows\n \n as \n \n follows\n \n, \n \n \n impressions\n \n as \n \n impressions\n \n, \n \n \n likes\n \n as \n \n likes\n \n, \n \n \n profile_visits\n \n as \n \n profile_visits\n \n, \n \n \n profile_visits_rate\n \n as \n \n profile_visits_rate\n \n, \n \n \n reach\n \n as \n \n reach\n \n, \n \n \n real_time_conversion\n \n as \n \n real_time_conversion\n \n, \n \n \n real_time_conversion_rate\n \n as \n \n real_time_conversion_rate\n \n, \n \n \n real_time_cost_per_conversion\n \n as \n \n real_time_cost_per_conversion\n \n, \n \n \n real_time_cost_per_result\n \n as \n \n real_time_cost_per_result\n \n, \n \n \n real_time_result\n \n as \n \n real_time_result\n \n, \n \n \n real_time_result_rate\n \n as \n \n real_time_result_rate\n \n, \n \n \n result\n \n as \n \n result\n \n, \n \n \n result_rate\n \n as \n \n result_rate\n \n, \n \n \n secondary_goal_result\n \n as \n \n secondary_goal_result\n \n, \n \n \n secondary_goal_result_rate\n \n as \n \n secondary_goal_result_rate\n \n, \n \n \n shares\n \n as \n \n shares\n \n, \n \n \n spend\n \n as \n \n spend\n \n, \n \n \n stat_time_hour\n \n as \n \n stat_time_hour\n \n, \n \n \n video_play_actions\n \n as \n \n video_play_actions\n \n, \n \n \n video_views_p_100\n \n as \n \n video_views_p_100\n \n, \n \n \n video_views_p_25\n \n as \n \n video_views_p_25\n \n, \n \n \n video_views_p_50\n \n as \n \n video_views_p_50\n \n, \n \n \n video_views_p_75\n \n as \n \n video_views_p_75\n \n, \n \n \n video_watched_2_s\n \n as \n \n video_watched_2_s\n \n, \n \n \n video_watched_6_s\n \n as \n \n video_watched_6_s\n \n\n\n\n\n from base\n\n), \n\nfinal as (\n\n select \n ad_id, \n _fivetran_synced,\n stat_time_hour, \n cpc, \n cpm, \n ctr, \n impressions, \n clicks, \n spend, \n reach, \n conversion, \n cost_per_conversion, \n conversion_rate, \n likes, \n comments, \n shares, \n profile_visits,\n follows, \n video_play_actions, \n video_watched_2_s, \n video_watched_6_s, \n video_views_p_25, \n video_views_p_50,\n video_views_p_75, \n average_video_play, \n average_video_play_per_user\n from fields\n\n)\n\nselect * from final", "extra_ctes_injected": true, "extra_ctes": [], "relation_name": "FIVETRAN_DBT_TESTING.DBT_TIKTOK_ADS_stg_tiktok_ads.stg_tiktok_ads__ad_report_hourly"}, "model.tiktok_ads_source.stg_tiktok_ads__advertiser": {"raw_sql": "with base as (\n\n select *\n from {{ ref('stg_tiktok_ads__advertiser_tmp') }}\n\n), \n\nfields as (\n\n select\n {{\n fivetran_utils.fill_staging_columns(\n source_columns=adapter.get_columns_in_relation(ref('stg_tiktok_ads__advertiser_tmp')),\n staging_columns=get_advertiser_columns()\n )\n }}\n\n from base\n\n), \n\nfinal as (\n\n select \n id as advertiser_id, \n address, \n balance, \n company, \n contacter, \n country, \n currency, \n description, \n email, \n industry, \n language,\n name, \n phone_number, \n telephone, \n timezone,\n _fivetran_synced\n from fields\n\n)\n\nselect * from final", "compiled": true, "resource_type": "model", "depends_on": {"macros": ["macro.tiktok_ads_source.get_advertiser_columns", "macro.fivetran_utils.fill_staging_columns"], "nodes": ["model.tiktok_ads_source.stg_tiktok_ads__advertiser_tmp", "model.tiktok_ads_source.stg_tiktok_ads__advertiser_tmp"]}, "config": {"enabled": true, "alias": null, "schema": "stg_tiktok_ads", "database": null, "tags": [], "meta": {}, "materialized": "table", "persist_docs": {}, "quoting": {}, "column_types": {}, "full_refresh": null, "on_schema_change": "ignore", "post-hook": [], "pre-hook": []}, "database": "FIVETRAN_DBT_TESTING", "schema": "DBT_TIKTOK_ADS_stg_tiktok_ads", "fqn": ["tiktok_ads_source", "stg_tiktok_ads__advertiser"], "unique_id": "model.tiktok_ads_source.stg_tiktok_ads__advertiser", "package_name": "tiktok_ads_source", "root_path": "/Users/renee.li/Documents/dbt/tiktok/develop/dbt_packages/tiktok_ads_source", "path": "stg_tiktok_ads__advertiser.sql", "original_file_path": "models/stg_tiktok_ads__advertiser.sql", "name": "stg_tiktok_ads__advertiser", "alias": "stg_tiktok_ads__advertiser", "checksum": {"name": "sha256", "checksum": "d08aa841b6e9c3caafbeda3d434b2f2a28cfe7125af96ec7cdcbf5e058b77bba"}, "tags": [], "refs": [["stg_tiktok_ads__advertiser_tmp"], ["stg_tiktok_ads__advertiser_tmp"]], "sources": [], "description": "Each record represents data for each advertiser.", "columns": {"advertiser_id": {"name": "advertiser_id", "description": "Advertiser ID", "meta": {}, "data_type": null, "quote": null, "tags": []}, "address": {"name": "address", "description": "Advertiser address information", "meta": {}, "data_type": null, "quote": null, "tags": []}, "balance": {"name": "balance", "description": "Account available balance", "meta": {}, "data_type": null, "quote": null, "tags": []}, "company": {"name": "company", "description": "Advertiser's company name", "meta": {}, "data_type": null, "quote": null, "tags": []}, "contacter": {"name": "contacter", "description": "Contact Person", "meta": {}, "data_type": null, "quote": null, "tags": []}, "country": {"name": "country", "description": "The advertiser's country", "meta": {}, "data_type": null, "quote": null, "tags": []}, "create_time": {"name": "create_time", "description": "Advertiser's create time", "meta": {}, "data_type": null, "quote": null, "tags": []}, "currency": {"name": "currency", "description": "Type of currency used by advertisers", "meta": {}, "data_type": null, "quote": null, "tags": []}, "description": {"name": "description", "description": "Brand description, i.e. promotional content", "meta": {}, "data_type": null, "quote": null, "tags": []}, "email": {"name": "email", "description": "Advertiser contact email, desensitised data", "meta": {}, "data_type": null, "quote": null, "tags": []}, "industry": {"name": "industry", "description": "Advertiser industry category", "meta": {}, "data_type": null, "quote": null, "tags": []}, "language": {"name": "language", "description": "Language used by advertisers", "meta": {}, "data_type": null, "quote": null, "tags": []}, "license_no": {"name": "license_no", "description": "License number", "meta": {}, "data_type": null, "quote": null, "tags": []}, "license_url": {"name": "license_url", "description": "License preview address, the link is valid for an hour by default.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "name": {"name": "name", "description": "Advertiser name", "meta": {}, "data_type": null, "quote": null, "tags": []}, "phone_number": {"name": "phone_number", "description": "Contact mobile number, desensitised data", "meta": {}, "data_type": null, "quote": null, "tags": []}, "telephone": {"name": "telephone", "description": "Fixed phone number, desensitised data", "meta": {}, "data_type": null, "quote": null, "tags": []}, "timezone": {"name": "timezone", "description": "Ad account time zone including GMT offset", "meta": {}, "data_type": null, "quote": null, "tags": []}, "_fivetran_synced": {"name": "_fivetran_synced", "description": "Timestamp of when Fivetran synced a record.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "is_most_recent_record": {"name": "is_most_recent_record", "description": "Whether record is the most recent one for this particular grain.", "meta": {}, "data_type": null, "quote": null, "tags": []}}, "meta": {}, "docs": {"show": true}, "patch_path": "tiktok_ads_source://models/stg_tiktok_ads.yml", "compiled_path": "target/compiled/tiktok_ads_source/models/stg_tiktok_ads__advertiser.sql", "build_path": null, "deferred": false, "unrendered_config": {"materialized": "table", "schema": "stg_tiktok_ads"}, "created_at": 1641494963.288278, "compiled_sql": "with base as (\n\n select *\n from FIVETRAN_DBT_TESTING.DBT_TIKTOK_ADS_stg_tiktok_ads.stg_tiktok_ads__advertiser_tmp\n\n), \n\nfields as (\n\n select\n \n \n \n _fivetran_synced\n \n as \n \n _fivetran_synced\n \n, \n \n \n address\n \n as \n \n address\n \n, \n \n \n balance\n \n as \n \n balance\n \n, \n \n \n company\n \n as \n \n company\n \n, \n \n \n contacter\n \n as \n \n contacter\n \n, \n \n \n country\n \n as \n \n country\n \n, \n \n \n create_time\n \n as \n \n create_time\n \n, \n \n \n currency\n \n as \n \n currency\n \n, \n \n \n description\n \n as \n \n description\n \n, \n \n \n email\n \n as \n \n email\n \n, \n \n \n id\n \n as \n \n id\n \n, \n \n \n industry\n \n as \n \n industry\n \n, \n \n \n language\n \n as \n \n language\n \n, \n \n \n license_no\n \n as \n \n license_no\n \n, \n \n \n license_url\n \n as \n \n license_url\n \n, \n \n \n name\n \n as \n \n name\n \n, \n \n \n phone_number\n \n as \n \n phone_number\n \n, \n \n \n promotion_area\n \n as \n \n promotion_area\n \n, \n \n \n reason\n \n as \n \n reason\n \n, \n \n \n role\n \n as \n \n role\n \n, \n \n \n status\n \n as \n \n status\n \n, \n \n \n telephone\n \n as \n \n telephone\n \n, \n \n \n timezone\n \n as \n \n timezone\n \n\n\n\n\n from base\n\n), \n\nfinal as (\n\n select \n id as advertiser_id, \n address, \n balance, \n company, \n contacter, \n country, \n currency, \n description, \n email, \n industry, \n language,\n name, \n phone_number, \n telephone, \n timezone,\n _fivetran_synced\n from fields\n\n)\n\nselect * from final", "extra_ctes_injected": true, "extra_ctes": [], "relation_name": "FIVETRAN_DBT_TESTING.DBT_TIKTOK_ADS_stg_tiktok_ads.stg_tiktok_ads__advertiser"}, "model.tiktok_ads_source.stg_tiktok_ads__ad_history": {"raw_sql": "with base as (\n\n select *\n from {{ ref('stg_tiktok_ads__ad_history_tmp') }}\n\n), \n\nfields as (\n\n select\n {{\n fivetran_utils.fill_staging_columns(\n source_columns=adapter.get_columns_in_relation(ref('stg_tiktok_ads__ad_history_tmp')),\n staging_columns=get_ad_history_columns()\n )\n }}\n\n from base\n\n), \n\nfinal as (\n\n select \n ad_id,\n updated_at,\n adgroup_id as ad_group_id,\n advertiser_id,\n campaign_id,\n ad_name,\n ad_text,\n call_to_action,\n click_tracking_url,\n impression_tracking_url,\n {{ dbt_utils.split_part('landing_page_url', \"'?'\", 1) }} as base_url,\n {{ dbt_utils.get_url_host('landing_page_url') }} as url_host,\n '/' || {{ dbt_utils.get_url_path('landing_page_url') }} as url_path,\n {{ dbt_utils.get_url_parameter('landing_page_url', 'utm_source') }} as utm_source,\n {{ dbt_utils.get_url_parameter('landing_page_url', 'utm_medium') }} as utm_medium,\n {{ dbt_utils.get_url_parameter('landing_page_url', 'utm_campaign') }} as utm_campaign,\n {{ dbt_utils.get_url_parameter('landing_page_url', 'utm_content') }} as utm_content,\n {{ dbt_utils.get_url_parameter('landing_page_url', 'utm_term') }} as utm_term,\n landing_page_url,\n video_id,\n _fivetran_synced\n from fields\n\n), \n\nmost_recent as (\n\n select \n *,\n row_number() over (partition by ad_id order by updated_at desc) = 1 as is_most_recent_record\n from final\n\n)\n\nselect * from most_recent", "compiled": true, "resource_type": "model", "depends_on": {"macros": ["macro.tiktok_ads_source.get_ad_history_columns", "macro.fivetran_utils.fill_staging_columns", "macro.dbt_utils.split_part", "macro.dbt_utils.get_url_host", "macro.dbt_utils.get_url_path", "macro.dbt_utils.get_url_parameter"], "nodes": ["model.tiktok_ads_source.stg_tiktok_ads__ad_history_tmp", "model.tiktok_ads_source.stg_tiktok_ads__ad_history_tmp"]}, "config": {"enabled": true, "alias": null, "schema": "stg_tiktok_ads", "database": null, "tags": [], "meta": {}, "materialized": "table", "persist_docs": {}, "quoting": {}, "column_types": {}, "full_refresh": null, "on_schema_change": "ignore", "post-hook": [], "pre-hook": []}, "database": "FIVETRAN_DBT_TESTING", "schema": "DBT_TIKTOK_ADS_stg_tiktok_ads", "fqn": ["tiktok_ads_source", "stg_tiktok_ads__ad_history"], "unique_id": "model.tiktok_ads_source.stg_tiktok_ads__ad_history", "package_name": "tiktok_ads_source", "root_path": "/Users/renee.li/Documents/dbt/tiktok/develop/dbt_packages/tiktok_ads_source", "path": "stg_tiktok_ads__ad_history.sql", "original_file_path": "models/stg_tiktok_ads__ad_history.sql", "name": "stg_tiktok_ads__ad_history", "alias": "stg_tiktok_ads__ad_history", "checksum": {"name": "sha256", "checksum": "36dbbea796f81ff945ef25646a72206fa1dad9457d517f898636cca44c3b670b"}, "tags": [], "refs": [["stg_tiktok_ads__ad_history_tmp"], ["stg_tiktok_ads__ad_history_tmp"]], "sources": [], "description": "Each record represents data for each ad.", "columns": {"ad_id": {"name": "ad_id", "description": "Ad ID", "meta": {}, "data_type": null, "quote": null, "tags": []}, "updated_at": {"name": "updated_at", "description": "Time the record was updated.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "ad_group_id": {"name": "ad_group_id", "description": "Ad group ID", "meta": {}, "data_type": null, "quote": null, "tags": []}, "advertiser_id": {"name": "advertiser_id", "description": "Advertiser ID", "meta": {}, "data_type": null, "quote": null, "tags": []}, "base_url": {"name": "base_url", "description": "The base URL of the ad, extracted from the `landing page url`.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "campaign_id": {"name": "campaign_id", "description": "Campaign ID", "meta": {}, "data_type": null, "quote": null, "tags": []}, "ad_name": {"name": "ad_name", "description": "Ad Name.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "ad_text": {"name": "ad_text", "description": "The ad text.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "call_to_action": {"name": "call_to_action", "description": "Call to action values.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "click_tracking_url": {"name": "click_tracking_url", "description": "Click monitoring URL.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "impression_tracking_url": {"name": "impression_tracking_url", "description": "Display monitoring URL.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "landing_page_url": {"name": "landing_page_url", "description": "Landing page URL.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "url_host": {"name": "url_host", "description": "The URL host of the ad, extracted from the `landing_page_url`.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "url_path": {"name": "url_path", "description": "The URL path of the ad, extracted from the `landing_page_url`.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "utm_source": {"name": "utm_source", "description": "The utm_source parameter of the ad, extracted from the `landing_page_url`.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "utm_medium": {"name": "utm_medium", "description": "The utm_medium parameter of the ad, extracted from the `landing_page_url`.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "utm_campaign": {"name": "utm_campaign", "description": "The utm_campaign parameter of the ad, extracted from the `landing_page_url`.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "utm_content": {"name": "utm_content", "description": "The utm_content parameter of the ad, extracted from the `landing_page_url`.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "utm_term": {"name": "utm_term", "description": "The utm_term parameter of the ad, extracted from the `landing_page_url`.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "video_id": {"name": "video_id", "description": "The video ID.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "_fivetran_synced": {"name": "_fivetran_synced", "description": "Timestamp of when Fivetran synced a record.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "is_most_recent_record": {"name": "is_most_recent_record", "description": "Whether record is the most recent one for this particular grain.", "meta": {}, "data_type": null, "quote": null, "tags": []}}, "meta": {}, "docs": {"show": true}, "patch_path": "tiktok_ads_source://models/stg_tiktok_ads.yml", "compiled_path": "target/compiled/tiktok_ads_source/models/stg_tiktok_ads__ad_history.sql", "build_path": null, "deferred": false, "unrendered_config": {"materialized": "table", "schema": "stg_tiktok_ads"}, "created_at": 1641494963.3025, "compiled_sql": "with base as (\n\n select *\n from FIVETRAN_DBT_TESTING.DBT_TIKTOK_ADS_stg_tiktok_ads.stg_tiktok_ads__ad_history_tmp\n\n), \n\nfields as (\n\n select\n \n \n \n _fivetran_synced\n \n as \n \n _fivetran_synced\n \n, \n \n \n ad_id\n \n as \n \n ad_id\n \n, \n \n \n ad_name\n \n as \n \n ad_name\n \n, \n \n \n ad_text\n \n as \n \n ad_text\n \n, \n \n \n adgroup_id\n \n as \n \n adgroup_id\n \n, \n \n \n advertiser_id\n \n as \n \n advertiser_id\n \n, \n \n \n app_name\n \n as \n \n app_name\n \n, \n \n \n call_to_action\n \n as \n \n call_to_action\n \n, \n \n \n campaign_id\n \n as \n \n campaign_id\n \n, \n \n \n click_tracking_url\n \n as \n \n click_tracking_url\n \n, \n \n \n create_time\n \n as \n \n create_time\n \n, \n \n \n display_name\n \n as \n \n display_name\n \n, \n \n \n impression_tracking_url\n \n as \n \n impression_tracking_url\n \n, \n \n \n is_aco\n \n as \n \n is_aco\n \n, \n \n \n is_creative_authorized\n \n as \n \n is_creative_authorized\n \n, \n \n \n is_new_structure\n \n as \n \n is_new_structure\n \n, \n \n \n landing_page_url\n \n as \n \n landing_page_url\n \n, \n \n \n open_url\n \n as \n \n open_url\n \n, \n \n \n opt_status\n \n as \n \n opt_status\n \n, \n \n \n playable_url\n \n as \n \n playable_url\n \n, \n \n \n profile_image\n \n as \n \n profile_image\n \n, \n \n \n status\n \n as \n \n status\n \n, \n \n \n updated_at\n \n as \n \n updated_at\n \n, \n \n \n video_id\n \n as \n \n video_id\n \n, \n \n \n image_ids\n \n as \n \n image_ids\n \n\n\n\n\n from base\n\n), \n\nfinal as (\n\n select \n ad_id,\n updated_at,\n adgroup_id as ad_group_id,\n advertiser_id,\n campaign_id,\n ad_name,\n ad_text,\n call_to_action,\n click_tracking_url,\n impression_tracking_url,\n \n\n split_part(\n landing_page_url,\n '?',\n 1\n )\n\n as base_url,\n \n try_cast(\n\n split_part(\n \n\n split_part(\n \n\n replace(\n \n\n replace(\n \n\n replace(\n landing_page_url,\n 'android-app://',\n ''\n )\n \n\n,\n 'http://',\n ''\n )\n \n\n,\n 'https://',\n ''\n )\n \n\n,\n '/',\n 1\n )\n\n,\n '?',\n 1\n )\n\n as \n varchar\n)\n as url_host,\n '/' || \n try_cast(\n\n split_part(\n \n\n case when \n \n length(\n \n\n replace(\n \n\n replace(\n landing_page_url,\n 'http://',\n ''\n )\n \n\n,\n 'https://',\n ''\n )\n \n\n\n )-coalesce(\n nullif(\n\n position(\n '/' in \n\n replace(\n \n\n replace(\n landing_page_url,\n 'http://',\n ''\n )\n \n\n,\n 'https://',\n ''\n )\n \n\n\n ), 0),\n \n\n position(\n '?' in \n\n replace(\n \n\n replace(\n landing_page_url,\n 'http://',\n ''\n )\n \n\n,\n 'https://',\n ''\n )\n \n\n\n ) - 1\n ) = 0 \n then ''\n else \n right(\n \n\n replace(\n \n\n replace(\n landing_page_url,\n 'http://',\n ''\n )\n \n\n,\n 'https://',\n ''\n )\n \n\n,\n \n \n length(\n \n\n replace(\n \n\n replace(\n landing_page_url,\n 'http://',\n ''\n )\n \n\n,\n 'https://',\n ''\n )\n \n\n\n )-coalesce(\n nullif(\n\n position(\n '/' in \n\n replace(\n \n\n replace(\n landing_page_url,\n 'http://',\n ''\n )\n \n\n,\n 'https://',\n ''\n )\n \n\n\n ), 0),\n \n\n position(\n '?' in \n\n replace(\n \n\n replace(\n landing_page_url,\n 'http://',\n ''\n )\n \n\n,\n 'https://',\n ''\n )\n \n\n\n ) - 1\n )\n )\n end,\n '?',\n 1\n )\n\n as \n varchar\n)\n as url_path,\n nullif(\n\n split_part(\n \n\n split_part(\n landing_page_url,\n 'utm_source=',\n 2\n )\n\n,\n '&',\n 1\n )\n\n,'') as utm_source,\n nullif(\n\n split_part(\n \n\n split_part(\n landing_page_url,\n 'utm_medium=',\n 2\n )\n\n,\n '&',\n 1\n )\n\n,'') as utm_medium,\n nullif(\n\n split_part(\n \n\n split_part(\n landing_page_url,\n 'utm_campaign=',\n 2\n )\n\n,\n '&',\n 1\n )\n\n,'') as utm_campaign,\n nullif(\n\n split_part(\n \n\n split_part(\n landing_page_url,\n 'utm_content=',\n 2\n )\n\n,\n '&',\n 1\n )\n\n,'') as utm_content,\n nullif(\n\n split_part(\n \n\n split_part(\n landing_page_url,\n 'utm_term=',\n 2\n )\n\n,\n '&',\n 1\n )\n\n,'') as utm_term,\n landing_page_url,\n video_id,\n _fivetran_synced\n from fields\n\n), \n\nmost_recent as (\n\n select \n *,\n row_number() over (partition by ad_id order by updated_at desc) = 1 as is_most_recent_record\n from final\n\n)\n\nselect * from most_recent", "extra_ctes_injected": true, "extra_ctes": [], "relation_name": "FIVETRAN_DBT_TESTING.DBT_TIKTOK_ADS_stg_tiktok_ads.stg_tiktok_ads__ad_history"}, "model.tiktok_ads_source.stg_tiktok_ads__campaign_history": {"raw_sql": "with base as (\n\n select *\n from {{ ref('stg_tiktok_ads__campaign_history_tmp') }}\n\n), \n\nfields as (\n\n select\n {{\n fivetran_utils.fill_staging_columns(\n source_columns=adapter.get_columns_in_relation(ref('stg_tiktok_ads__campaign_history_tmp')),\n staging_columns=get_campaign_history_columns()\n )\n }}\n \n from base\n\n), \n\nfinal as (\n\n select \n campaign_id, \n updated_at, \n advertiser_id, \n campaign_name, \n campaign_type, \n split_test_variable,\n _fivetran_synced\n\n from fields\n\n), \n\nmost_recent as (\n\n select \n *,\n row_number() over (partition by campaign_id order by updated_at desc) = 1 as is_most_recent_record\n from final\n\n)\n\nselect * from most_recent", "compiled": true, "resource_type": "model", "depends_on": {"macros": ["macro.tiktok_ads_source.get_campaign_history_columns", "macro.fivetran_utils.fill_staging_columns"], "nodes": ["model.tiktok_ads_source.stg_tiktok_ads__campaign_history_tmp", "model.tiktok_ads_source.stg_tiktok_ads__campaign_history_tmp"]}, "config": {"enabled": true, "alias": null, "schema": "stg_tiktok_ads", "database": null, "tags": [], "meta": {}, "materialized": "table", "persist_docs": {}, "quoting": {}, "column_types": {}, "full_refresh": null, "on_schema_change": "ignore", "post-hook": [], "pre-hook": []}, "database": "FIVETRAN_DBT_TESTING", "schema": "DBT_TIKTOK_ADS_stg_tiktok_ads", "fqn": ["tiktok_ads_source", "stg_tiktok_ads__campaign_history"], "unique_id": "model.tiktok_ads_source.stg_tiktok_ads__campaign_history", "package_name": "tiktok_ads_source", "root_path": "/Users/renee.li/Documents/dbt/tiktok/develop/dbt_packages/tiktok_ads_source", "path": "stg_tiktok_ads__campaign_history.sql", "original_file_path": "models/stg_tiktok_ads__campaign_history.sql", "name": "stg_tiktok_ads__campaign_history", "alias": "stg_tiktok_ads__campaign_history", "checksum": {"name": "sha256", "checksum": "2685bb5e20197c818e6ff099ebc82f5ec5e30add421f8f6e4406985ffd05252e"}, "tags": [], "refs": [["stg_tiktok_ads__campaign_history_tmp"], ["stg_tiktok_ads__campaign_history_tmp"]], "sources": [], "description": "Each record represents data for each campaign.", "columns": {"campaign_id": {"name": "campaign_id", "description": "Campaign ID", "meta": {}, "data_type": null, "quote": null, "tags": []}, "updated_at": {"name": "updated_at", "description": "Time the record was updated.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "advertiser_id": {"name": "advertiser_id", "description": "Advertiser ID", "meta": {}, "data_type": null, "quote": null, "tags": []}, "campaign_name": {"name": "campaign_name", "description": "Campaign name", "meta": {}, "data_type": null, "quote": null, "tags": []}, "campaign_type": {"name": "campaign_type", "description": "Campaign Type, indicates the campaign is a regular campaign or iOS 14 campaign.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "split_test_variable": {"name": "split_test_variable", "description": "Split Test variables. Optional values; TARGETING, BIDDING_OPTIMIZATION , CREATIVE.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "_fivetran_synced": {"name": "_fivetran_synced", "description": "Timestamp of when Fivetran synced a record.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "is_most_recent_record": {"name": "is_most_recent_record", "description": "Whether record is the most recent one for this particular grain.", "meta": {}, "data_type": null, "quote": null, "tags": []}}, "meta": {}, "docs": {"show": true}, "patch_path": "tiktok_ads_source://models/stg_tiktok_ads.yml", "compiled_path": "target/compiled/tiktok_ads_source/models/stg_tiktok_ads__campaign_history.sql", "build_path": null, "deferred": false, "unrendered_config": {"materialized": "table", "schema": "stg_tiktok_ads"}, "created_at": 1641494963.305564, "compiled_sql": "with base as (\n\n select *\n from FIVETRAN_DBT_TESTING.DBT_TIKTOK_ADS_stg_tiktok_ads.stg_tiktok_ads__campaign_history_tmp\n\n), \n\nfields as (\n\n select\n \n \n \n _fivetran_synced\n \n as \n \n _fivetran_synced\n \n, \n \n \n advertiser_id\n \n as \n \n advertiser_id\n \n, \n \n \n budget\n \n as \n \n budget\n \n, \n \n \n budget_mode\n \n as \n \n budget_mode\n \n, \n \n \n campaign_id\n \n as \n \n campaign_id\n \n, \n \n \n campaign_name\n \n as \n \n campaign_name\n \n, \n \n \n campaign_type\n \n as \n \n campaign_type\n \n, \n \n \n create_time\n \n as \n \n create_time\n \n, \n \n \n is_new_structure\n \n as \n \n is_new_structure\n \n, \n \n \n objective_type\n \n as \n \n objective_type\n \n, \n \n \n opt_status\n \n as \n \n opt_status\n \n, \n \n \n split_test_variable\n \n as \n \n split_test_variable\n \n, \n \n \n updated_at\n \n as \n \n updated_at\n \n\n\n\n \n from base\n\n), \n\nfinal as (\n\n select \n campaign_id, \n updated_at, \n advertiser_id, \n campaign_name, \n campaign_type, \n split_test_variable,\n _fivetran_synced\n\n from fields\n\n), \n\nmost_recent as (\n\n select \n *,\n row_number() over (partition by campaign_id order by updated_at desc) = 1 as is_most_recent_record\n from final\n\n)\n\nselect * from most_recent", "extra_ctes_injected": true, "extra_ctes": [], "relation_name": "FIVETRAN_DBT_TESTING.DBT_TIKTOK_ADS_stg_tiktok_ads.stg_tiktok_ads__campaign_history"}, "model.tiktok_ads_source.stg_tiktok_ads__ad_report_hourly_tmp": {"raw_sql": "select *\nfrom {{ var('ad_report_hourly') }}", "compiled": true, "resource_type": "model", "depends_on": {"macros": [], "nodes": ["source.tiktok_ads_source.tiktok_ads.ad_report_hourly"]}, "config": {"enabled": true, "alias": null, "schema": "stg_tiktok_ads", "database": null, "tags": [], "meta": {}, "materialized": "view", "persist_docs": {}, "quoting": {}, "column_types": {}, "full_refresh": null, "on_schema_change": "ignore", "post-hook": [], "pre-hook": []}, "database": "FIVETRAN_DBT_TESTING", "schema": "DBT_TIKTOK_ADS_stg_tiktok_ads", "fqn": ["tiktok_ads_source", "tmp", "stg_tiktok_ads__ad_report_hourly_tmp"], "unique_id": "model.tiktok_ads_source.stg_tiktok_ads__ad_report_hourly_tmp", "package_name": "tiktok_ads_source", "root_path": "/Users/renee.li/Documents/dbt/tiktok/develop/dbt_packages/tiktok_ads_source", "path": "tmp/stg_tiktok_ads__ad_report_hourly_tmp.sql", "original_file_path": "models/tmp/stg_tiktok_ads__ad_report_hourly_tmp.sql", "name": "stg_tiktok_ads__ad_report_hourly_tmp", "alias": "stg_tiktok_ads__ad_report_hourly_tmp", "checksum": {"name": "sha256", "checksum": "a487182a6ea56715aff4fb53a16e8e185223097096f8b06c53beeaf354bffb3f"}, "tags": [], "refs": [], "sources": [["tiktok_ads", "ad_report_hourly"]], "description": "", "columns": {}, "meta": {}, "docs": {"show": true}, "patch_path": null, "compiled_path": "target/compiled/tiktok_ads_source/models/tmp/stg_tiktok_ads__ad_report_hourly_tmp.sql", "build_path": null, "deferred": false, "unrendered_config": {"materialized": "view", "schema": "stg_tiktok_ads"}, "created_at": 1641494963.043583, "compiled_sql": "select *\nfrom MB_TIKTOK_ADS.TIKTOK_ADS.ad_report_hourly", "extra_ctes_injected": true, "extra_ctes": [], "relation_name": "FIVETRAN_DBT_TESTING.DBT_TIKTOK_ADS_stg_tiktok_ads.stg_tiktok_ads__ad_report_hourly_tmp"}, "model.tiktok_ads_source.stg_tiktok_ads__ad_history_tmp": {"raw_sql": "select *\nfrom {{ var('ad_history') }}", "compiled": true, "resource_type": "model", "depends_on": {"macros": [], "nodes": ["source.tiktok_ads_source.tiktok_ads.ad_history"]}, "config": {"enabled": true, "alias": null, "schema": "stg_tiktok_ads", "database": null, "tags": [], "meta": {}, "materialized": "view", "persist_docs": {}, "quoting": {}, "column_types": {}, "full_refresh": null, "on_schema_change": "ignore", "post-hook": [], "pre-hook": []}, "database": "FIVETRAN_DBT_TESTING", "schema": "DBT_TIKTOK_ADS_stg_tiktok_ads", "fqn": ["tiktok_ads_source", "tmp", "stg_tiktok_ads__ad_history_tmp"], "unique_id": "model.tiktok_ads_source.stg_tiktok_ads__ad_history_tmp", "package_name": "tiktok_ads_source", "root_path": "/Users/renee.li/Documents/dbt/tiktok/develop/dbt_packages/tiktok_ads_source", "path": "tmp/stg_tiktok_ads__ad_history_tmp.sql", "original_file_path": "models/tmp/stg_tiktok_ads__ad_history_tmp.sql", "name": "stg_tiktok_ads__ad_history_tmp", "alias": "stg_tiktok_ads__ad_history_tmp", "checksum": {"name": "sha256", "checksum": "a57ca2d986b3dbad7d2bbd8b0a0dd7c992c25bc5cda65daee19e3541f40b6890"}, "tags": [], "refs": [], "sources": [["tiktok_ads", "ad_history"]], "description": "", "columns": {}, "meta": {}, "docs": {"show": true}, "patch_path": null, "compiled_path": "target/compiled/tiktok_ads_source/models/tmp/stg_tiktok_ads__ad_history_tmp.sql", "build_path": null, "deferred": false, "unrendered_config": {"materialized": "view", "schema": "stg_tiktok_ads"}, "created_at": 1641494963.0503821, "compiled_sql": "select *\nfrom MB_TIKTOK_ADS.TIKTOK_ADS.ad_history", "extra_ctes_injected": true, "extra_ctes": [], "relation_name": "FIVETRAN_DBT_TESTING.DBT_TIKTOK_ADS_stg_tiktok_ads.stg_tiktok_ads__ad_history_tmp"}, "model.tiktok_ads_source.stg_tiktok_ads__ad_group_history_tmp": {"raw_sql": "select *\nfrom {{ var('ad_group_history') }}", "compiled": true, "resource_type": "model", "depends_on": {"macros": [], "nodes": ["source.tiktok_ads_source.tiktok_ads.adgroup_history"]}, "config": {"enabled": true, "alias": null, "schema": "stg_tiktok_ads", "database": null, "tags": [], "meta": {}, "materialized": "view", "persist_docs": {}, "quoting": {}, "column_types": {}, "full_refresh": null, "on_schema_change": "ignore", "post-hook": [], "pre-hook": []}, "database": "FIVETRAN_DBT_TESTING", "schema": "DBT_TIKTOK_ADS_stg_tiktok_ads", "fqn": ["tiktok_ads_source", "tmp", "stg_tiktok_ads__ad_group_history_tmp"], "unique_id": "model.tiktok_ads_source.stg_tiktok_ads__ad_group_history_tmp", "package_name": "tiktok_ads_source", "root_path": "/Users/renee.li/Documents/dbt/tiktok/develop/dbt_packages/tiktok_ads_source", "path": "tmp/stg_tiktok_ads__ad_group_history_tmp.sql", "original_file_path": "models/tmp/stg_tiktok_ads__ad_group_history_tmp.sql", "name": "stg_tiktok_ads__ad_group_history_tmp", "alias": "stg_tiktok_ads__ad_group_history_tmp", "checksum": {"name": "sha256", "checksum": "b3d1b8772b0465ed063cfa1f77cb9384475c21fa4ac9f970065e3da5c327ad1a"}, "tags": [], "refs": [], "sources": [["tiktok_ads", "adgroup_history"]], "description": "", "columns": {}, "meta": {}, "docs": {"show": true}, "patch_path": null, "compiled_path": "target/compiled/tiktok_ads_source/models/tmp/stg_tiktok_ads__ad_group_history_tmp.sql", "build_path": null, "deferred": false, "unrendered_config": {"materialized": "view", "schema": "stg_tiktok_ads"}, "created_at": 1641494963.055097, "compiled_sql": "select *\nfrom MB_TIKTOK_ADS.TIKTOK_ADS.adgroup_history", "extra_ctes_injected": true, "extra_ctes": [], "relation_name": "FIVETRAN_DBT_TESTING.DBT_TIKTOK_ADS_stg_tiktok_ads.stg_tiktok_ads__ad_group_history_tmp"}, "model.tiktok_ads_source.stg_tiktok_ads__campaign_report_hourly_tmp": {"raw_sql": "select *\nfrom {{ var('campaign_report_hourly') }}", "compiled": true, "resource_type": "model", "depends_on": {"macros": [], "nodes": ["source.tiktok_ads_source.tiktok_ads.campaign_report_hourly"]}, "config": {"enabled": true, "alias": null, "schema": "stg_tiktok_ads", "database": null, "tags": [], "meta": {}, "materialized": "view", "persist_docs": {}, "quoting": {}, "column_types": {}, "full_refresh": null, "on_schema_change": "ignore", "post-hook": [], "pre-hook": []}, "database": "FIVETRAN_DBT_TESTING", "schema": "DBT_TIKTOK_ADS_stg_tiktok_ads", "fqn": ["tiktok_ads_source", "tmp", "stg_tiktok_ads__campaign_report_hourly_tmp"], "unique_id": "model.tiktok_ads_source.stg_tiktok_ads__campaign_report_hourly_tmp", "package_name": "tiktok_ads_source", "root_path": "/Users/renee.li/Documents/dbt/tiktok/develop/dbt_packages/tiktok_ads_source", "path": "tmp/stg_tiktok_ads__campaign_report_hourly_tmp.sql", "original_file_path": "models/tmp/stg_tiktok_ads__campaign_report_hourly_tmp.sql", "name": "stg_tiktok_ads__campaign_report_hourly_tmp", "alias": "stg_tiktok_ads__campaign_report_hourly_tmp", "checksum": {"name": "sha256", "checksum": "198e8d143514167295dfe352776c5050850cb7bc60e46b122a6a0a0da08a14ce"}, "tags": [], "refs": [], "sources": [["tiktok_ads", "campaign_report_hourly"]], "description": "", "columns": {}, "meta": {}, "docs": {"show": true}, "patch_path": null, "compiled_path": "target/compiled/tiktok_ads_source/models/tmp/stg_tiktok_ads__campaign_report_hourly_tmp.sql", "build_path": null, "deferred": false, "unrendered_config": {"materialized": "view", "schema": "stg_tiktok_ads"}, "created_at": 1641494963.059669, "compiled_sql": "select *\nfrom MB_TIKTOK_ADS.TIKTOK_ADS.campaign_report_hourly", "extra_ctes_injected": true, "extra_ctes": [], "relation_name": "FIVETRAN_DBT_TESTING.DBT_TIKTOK_ADS_stg_tiktok_ads.stg_tiktok_ads__campaign_report_hourly_tmp"}, "model.tiktok_ads_source.stg_tiktok_ads__ad_group_report_hourly_tmp": {"raw_sql": "select *\nfrom {{ var('ad_group_hourly') }}", "compiled": true, "resource_type": "model", "depends_on": {"macros": [], "nodes": ["source.tiktok_ads_source.tiktok_ads.adgroup_report_hourly"]}, "config": {"enabled": true, "alias": null, "schema": "stg_tiktok_ads", "database": null, "tags": [], "meta": {}, "materialized": "view", "persist_docs": {}, "quoting": {}, "column_types": {}, "full_refresh": null, "on_schema_change": "ignore", "post-hook": [], "pre-hook": []}, "database": "FIVETRAN_DBT_TESTING", "schema": "DBT_TIKTOK_ADS_stg_tiktok_ads", "fqn": ["tiktok_ads_source", "tmp", "stg_tiktok_ads__ad_group_report_hourly_tmp"], "unique_id": "model.tiktok_ads_source.stg_tiktok_ads__ad_group_report_hourly_tmp", "package_name": "tiktok_ads_source", "root_path": "/Users/renee.li/Documents/dbt/tiktok/develop/dbt_packages/tiktok_ads_source", "path": "tmp/stg_tiktok_ads__ad_group_report_hourly_tmp.sql", "original_file_path": "models/tmp/stg_tiktok_ads__ad_group_report_hourly_tmp.sql", "name": "stg_tiktok_ads__ad_group_report_hourly_tmp", "alias": "stg_tiktok_ads__ad_group_report_hourly_tmp", "checksum": {"name": "sha256", "checksum": "187c3f6f290dd9846646843a108714a51fff1700c838c4c7e58852db64a1edfd"}, "tags": [], "refs": [], "sources": [["tiktok_ads", "adgroup_report_hourly"]], "description": "", "columns": {}, "meta": {}, "docs": {"show": true}, "patch_path": null, "compiled_path": "target/compiled/tiktok_ads_source/models/tmp/stg_tiktok_ads__ad_group_report_hourly_tmp.sql", "build_path": null, "deferred": false, "unrendered_config": {"materialized": "view", "schema": "stg_tiktok_ads"}, "created_at": 1641494963.064565, "compiled_sql": "select *\nfrom MB_TIKTOK_ADS.TIKTOK_ADS.adgroup_report_hourly", "extra_ctes_injected": true, "extra_ctes": [], "relation_name": "FIVETRAN_DBT_TESTING.DBT_TIKTOK_ADS_stg_tiktok_ads.stg_tiktok_ads__ad_group_report_hourly_tmp"}, "model.tiktok_ads_source.stg_tiktok_ads__campaign_history_tmp": {"raw_sql": "select *\nfrom {{ var('campaign_history') }}", "compiled": true, "resource_type": "model", "depends_on": {"macros": [], "nodes": ["source.tiktok_ads_source.tiktok_ads.campaign_history"]}, "config": {"enabled": true, "alias": null, "schema": "stg_tiktok_ads", "database": null, "tags": [], "meta": {}, "materialized": "view", "persist_docs": {}, "quoting": {}, "column_types": {}, "full_refresh": null, "on_schema_change": "ignore", "post-hook": [], "pre-hook": []}, "database": "FIVETRAN_DBT_TESTING", "schema": "DBT_TIKTOK_ADS_stg_tiktok_ads", "fqn": ["tiktok_ads_source", "tmp", "stg_tiktok_ads__campaign_history_tmp"], "unique_id": "model.tiktok_ads_source.stg_tiktok_ads__campaign_history_tmp", "package_name": "tiktok_ads_source", "root_path": "/Users/renee.li/Documents/dbt/tiktok/develop/dbt_packages/tiktok_ads_source", "path": "tmp/stg_tiktok_ads__campaign_history_tmp.sql", "original_file_path": "models/tmp/stg_tiktok_ads__campaign_history_tmp.sql", "name": "stg_tiktok_ads__campaign_history_tmp", "alias": "stg_tiktok_ads__campaign_history_tmp", "checksum": {"name": "sha256", "checksum": "d695c134485444137d663f41732085a5cfa81de49f3ec2676e9f8e58f1c62c02"}, "tags": [], "refs": [], "sources": [["tiktok_ads", "campaign_history"]], "description": "", "columns": {}, "meta": {}, "docs": {"show": true}, "patch_path": null, "compiled_path": "target/compiled/tiktok_ads_source/models/tmp/stg_tiktok_ads__campaign_history_tmp.sql", "build_path": null, "deferred": false, "unrendered_config": {"materialized": "view", "schema": "stg_tiktok_ads"}, "created_at": 1641494963.0696409, "compiled_sql": "select *\nfrom MB_TIKTOK_ADS.TIKTOK_ADS.campaign_history", "extra_ctes_injected": true, "extra_ctes": [], "relation_name": "FIVETRAN_DBT_TESTING.DBT_TIKTOK_ADS_stg_tiktok_ads.stg_tiktok_ads__campaign_history_tmp"}, "model.tiktok_ads_source.stg_tiktok_ads__advertiser_tmp": {"raw_sql": "select *\nfrom {{ var('advertiser') }}", "compiled": true, "resource_type": "model", "depends_on": {"macros": [], "nodes": ["source.tiktok_ads_source.tiktok_ads.advertiser"]}, "config": {"enabled": true, "alias": null, "schema": "stg_tiktok_ads", "database": null, "tags": [], "meta": {}, "materialized": "view", "persist_docs": {}, "quoting": {}, "column_types": {}, "full_refresh": null, "on_schema_change": "ignore", "post-hook": [], "pre-hook": []}, "database": "FIVETRAN_DBT_TESTING", "schema": "DBT_TIKTOK_ADS_stg_tiktok_ads", "fqn": ["tiktok_ads_source", "tmp", "stg_tiktok_ads__advertiser_tmp"], "unique_id": "model.tiktok_ads_source.stg_tiktok_ads__advertiser_tmp", "package_name": "tiktok_ads_source", "root_path": "/Users/renee.li/Documents/dbt/tiktok/develop/dbt_packages/tiktok_ads_source", "path": "tmp/stg_tiktok_ads__advertiser_tmp.sql", "original_file_path": "models/tmp/stg_tiktok_ads__advertiser_tmp.sql", "name": "stg_tiktok_ads__advertiser_tmp", "alias": "stg_tiktok_ads__advertiser_tmp", "checksum": {"name": "sha256", "checksum": "2806a63477df7962ac6a4476e3e514a47ae56470e95f490e88b58696a99c2fcf"}, "tags": [], "refs": [], "sources": [["tiktok_ads", "advertiser"]], "description": "", "columns": {}, "meta": {}, "docs": {"show": true}, "patch_path": null, "compiled_path": "target/compiled/tiktok_ads_source/models/tmp/stg_tiktok_ads__advertiser_tmp.sql", "build_path": null, "deferred": false, "unrendered_config": {"materialized": "view", "schema": "stg_tiktok_ads"}, "created_at": 1641494963.074822, "compiled_sql": "select *\nfrom MB_TIKTOK_ADS.TIKTOK_ADS.advertiser", "extra_ctes_injected": true, "extra_ctes": [], "relation_name": "FIVETRAN_DBT_TESTING.DBT_TIKTOK_ADS_stg_tiktok_ads.stg_tiktok_ads__advertiser_tmp"}, "test.tiktok_ads.dbt_utils_unique_combination_of_columns_tiktok_ads__ad_adapter_ad_id__date_day.c70f86f560": {"raw_sql": "{{ dbt_utils.test_unique_combination_of_columns(**_dbt_generic_test_kwargs) }}{{ config(alias=\"dbt_utils_unique_combination_o_9db65ce81760c299942d65ab5e7e6d4e\") }}", "test_metadata": {"name": "unique_combination_of_columns", "kwargs": {"combination_of_columns": ["ad_id", "date_day"], "model": "{{ get_where_subquery(ref('tiktok_ads__ad_adapter')) }}"}, "namespace": "dbt_utils"}, "compiled": true, "resource_type": "test", "depends_on": {"macros": ["macro.dbt_utils.test_unique_combination_of_columns", "macro.dbt.get_where_subquery"], "nodes": ["model.tiktok_ads.tiktok_ads__ad_adapter"]}, "config": {"enabled": true, "alias": "dbt_utils_unique_combination_o_9db65ce81760c299942d65ab5e7e6d4e", "schema": "dbt_test__audit", "database": null, "tags": [], "meta": {}, "materialized": "test", "severity": "ERROR", "store_failures": null, "where": null, "limit": null, "fail_calc": "count(*)", "warn_if": "!= 0", "error_if": "!= 0"}, "database": "FIVETRAN_DBT_TESTING", "schema": "DBT_TIKTOK_ADS_dbt_test__audit", "fqn": ["tiktok_ads", "dbt_utils_unique_combination_of_columns_tiktok_ads__ad_adapter_ad_id__date_day"], "unique_id": "test.tiktok_ads.dbt_utils_unique_combination_of_columns_tiktok_ads__ad_adapter_ad_id__date_day.c70f86f560", "package_name": "tiktok_ads", "root_path": "/Users/renee.li/Documents/dbt/tiktok/develop/dbt_packages/tiktok_ads", "path": "dbt_utils_unique_combination_o_9db65ce81760c299942d65ab5e7e6d4e.sql", "original_file_path": "models/tiktok_ads.yml", "name": "dbt_utils_unique_combination_of_columns_tiktok_ads__ad_adapter_ad_id__date_day", "alias": "dbt_utils_unique_combination_o_9db65ce81760c299942d65ab5e7e6d4e", "checksum": {"name": "none", "checksum": ""}, "tags": [], "refs": [["tiktok_ads__ad_adapter"]], "sources": [], "description": "", "columns": {}, "meta": {}, "docs": {"show": true}, "patch_path": null, "compiled_path": "target/compiled/tiktok_ads/models/tiktok_ads.yml/dbt_utils_unique_combination_o_9db65ce81760c299942d65ab5e7e6d4e.sql", "build_path": null, "deferred": false, "unrendered_config": {"alias": "dbt_utils_unique_combination_o_9db65ce81760c299942d65ab5e7e6d4e"}, "created_at": 1641494963.127171, "compiled_sql": "\n\n\n\n\n\nwith validation_errors as (\n\n select\n ad_id, date_day\n from FIVETRAN_DBT_TESTING.DBT_TIKTOK_ADS_tiktok_ads.tiktok_ads__ad_adapter\n group by ad_id, date_day\n having count(*) > 1\n\n)\n\nselect *\nfrom validation_errors\n\n\n", "extra_ctes_injected": true, "extra_ctes": [], "relation_name": null, "column_name": null, "file_key_name": "models.tiktok_ads__ad_adapter"}, "test.tiktok_ads.dbt_utils_unique_combination_of_columns_tiktok_ads__ad_group_report_ad_group_id__date_day.2eb4c2ff6d": {"raw_sql": "{{ dbt_utils.test_unique_combination_of_columns(**_dbt_generic_test_kwargs) }}{{ config(alias=\"dbt_utils_unique_combination_o_72fdc194de3164f205583879773e492a\") }}", "test_metadata": {"name": "unique_combination_of_columns", "kwargs": {"combination_of_columns": ["ad_group_id", "date_day"], "model": "{{ get_where_subquery(ref('tiktok_ads__ad_group_report')) }}"}, "namespace": "dbt_utils"}, "compiled": true, "resource_type": "test", "depends_on": {"macros": ["macro.dbt_utils.test_unique_combination_of_columns", "macro.dbt.get_where_subquery"], "nodes": ["model.tiktok_ads.tiktok_ads__ad_group_report"]}, "config": {"enabled": true, "alias": "dbt_utils_unique_combination_o_72fdc194de3164f205583879773e492a", "schema": "dbt_test__audit", "database": null, "tags": [], "meta": {}, "materialized": "test", "severity": "ERROR", "store_failures": null, "where": null, "limit": null, "fail_calc": "count(*)", "warn_if": "!= 0", "error_if": "!= 0"}, "database": "FIVETRAN_DBT_TESTING", "schema": "DBT_TIKTOK_ADS_dbt_test__audit", "fqn": ["tiktok_ads", "dbt_utils_unique_combination_of_columns_tiktok_ads__ad_group_report_ad_group_id__date_day"], "unique_id": "test.tiktok_ads.dbt_utils_unique_combination_of_columns_tiktok_ads__ad_group_report_ad_group_id__date_day.2eb4c2ff6d", "package_name": "tiktok_ads", "root_path": "/Users/renee.li/Documents/dbt/tiktok/develop/dbt_packages/tiktok_ads", "path": "dbt_utils_unique_combination_o_72fdc194de3164f205583879773e492a.sql", "original_file_path": "models/tiktok_ads.yml", "name": "dbt_utils_unique_combination_of_columns_tiktok_ads__ad_group_report_ad_group_id__date_day", "alias": "dbt_utils_unique_combination_o_72fdc194de3164f205583879773e492a", "checksum": {"name": "none", "checksum": ""}, "tags": [], "refs": [["tiktok_ads__ad_group_report"]], "sources": [], "description": "", "columns": {}, "meta": {}, "docs": {"show": true}, "patch_path": null, "compiled_path": "target/compiled/tiktok_ads/models/tiktok_ads.yml/dbt_utils_unique_combination_o_72fdc194de3164f205583879773e492a.sql", "build_path": null, "deferred": false, "unrendered_config": {"alias": "dbt_utils_unique_combination_o_72fdc194de3164f205583879773e492a"}, "created_at": 1641494963.139424, "compiled_sql": "\n\n\n\n\n\nwith validation_errors as (\n\n select\n ad_group_id, date_day\n from FIVETRAN_DBT_TESTING.DBT_TIKTOK_ADS_tiktok_ads.tiktok_ads__ad_group_report\n group by ad_group_id, date_day\n having count(*) > 1\n\n)\n\nselect *\nfrom validation_errors\n\n\n", "extra_ctes_injected": true, "extra_ctes": [], "relation_name": null, "column_name": null, "file_key_name": "models.tiktok_ads__ad_group_report"}, "test.tiktok_ads.dbt_utils_unique_combination_of_columns_tiktok_ads__campaign_report_campaign_id__date_day.cc5f756c69": {"raw_sql": "{{ dbt_utils.test_unique_combination_of_columns(**_dbt_generic_test_kwargs) }}{{ config(alias=\"dbt_utils_unique_combination_o_48804305b042fff8fc9179671c157c13\") }}", "test_metadata": {"name": "unique_combination_of_columns", "kwargs": {"combination_of_columns": ["campaign_id", "date_day"], "model": "{{ get_where_subquery(ref('tiktok_ads__campaign_report')) }}"}, "namespace": "dbt_utils"}, "compiled": true, "resource_type": "test", "depends_on": {"macros": ["macro.dbt_utils.test_unique_combination_of_columns", "macro.dbt.get_where_subquery"], "nodes": ["model.tiktok_ads.tiktok_ads__campaign_report"]}, "config": {"enabled": true, "alias": "dbt_utils_unique_combination_o_48804305b042fff8fc9179671c157c13", "schema": "dbt_test__audit", "database": null, "tags": [], "meta": {}, "materialized": "test", "severity": "ERROR", "store_failures": null, "where": null, "limit": null, "fail_calc": "count(*)", "warn_if": "!= 0", "error_if": "!= 0"}, "database": "FIVETRAN_DBT_TESTING", "schema": "DBT_TIKTOK_ADS_dbt_test__audit", "fqn": ["tiktok_ads", "dbt_utils_unique_combination_of_columns_tiktok_ads__campaign_report_campaign_id__date_day"], "unique_id": "test.tiktok_ads.dbt_utils_unique_combination_of_columns_tiktok_ads__campaign_report_campaign_id__date_day.cc5f756c69", "package_name": "tiktok_ads", "root_path": "/Users/renee.li/Documents/dbt/tiktok/develop/dbt_packages/tiktok_ads", "path": "dbt_utils_unique_combination_o_48804305b042fff8fc9179671c157c13.sql", "original_file_path": "models/tiktok_ads.yml", "name": "dbt_utils_unique_combination_of_columns_tiktok_ads__campaign_report_campaign_id__date_day", "alias": "dbt_utils_unique_combination_o_48804305b042fff8fc9179671c157c13", "checksum": {"name": "none", "checksum": ""}, "tags": [], "refs": [["tiktok_ads__campaign_report"]], "sources": [], "description": "", "columns": {}, "meta": {}, "docs": {"show": true}, "patch_path": null, "compiled_path": "target/compiled/tiktok_ads/models/tiktok_ads.yml/dbt_utils_unique_combination_o_48804305b042fff8fc9179671c157c13.sql", "build_path": null, "deferred": false, "unrendered_config": {"alias": "dbt_utils_unique_combination_o_48804305b042fff8fc9179671c157c13"}, "created_at": 1641494963.143913, "compiled_sql": "\n\n\n\n\n\nwith validation_errors as (\n\n select\n campaign_id, date_day\n from FIVETRAN_DBT_TESTING.DBT_TIKTOK_ADS_tiktok_ads.tiktok_ads__campaign_report\n group by campaign_id, date_day\n having count(*) > 1\n\n)\n\nselect *\nfrom validation_errors\n\n\n", "extra_ctes_injected": true, "extra_ctes": [], "relation_name": null, "column_name": null, "file_key_name": "models.tiktok_ads__campaign_report"}, "test.tiktok_ads.not_null_int_tiktok_ads__most_recent_ad_group_ad_group_id.fcb8c561bc": {"raw_sql": "{{ test_not_null(**_dbt_generic_test_kwargs) }}", "test_metadata": {"name": "not_null", "kwargs": {"column_name": "ad_group_id", "model": "{{ get_where_subquery(ref('int_tiktok_ads__most_recent_ad_group')) }}"}, "namespace": null}, "compiled": true, "resource_type": "test", "depends_on": {"macros": ["macro.dbt.test_not_null", "macro.dbt.get_where_subquery"], "nodes": ["model.tiktok_ads.int_tiktok_ads__most_recent_ad_group"]}, "config": {"enabled": true, "alias": null, "schema": "dbt_test__audit", "database": null, "tags": [], "meta": {}, "materialized": "test", "severity": "ERROR", "store_failures": null, "where": null, "limit": null, "fail_calc": "count(*)", "warn_if": "!= 0", "error_if": "!= 0"}, "database": "FIVETRAN_DBT_TESTING", "schema": "DBT_TIKTOK_ADS_dbt_test__audit", "fqn": ["tiktok_ads", "intermediate", "not_null_int_tiktok_ads__most_recent_ad_group_ad_group_id"], "unique_id": "test.tiktok_ads.not_null_int_tiktok_ads__most_recent_ad_group_ad_group_id.fcb8c561bc", "package_name": "tiktok_ads", "root_path": "/Users/renee.li/Documents/dbt/tiktok/develop/dbt_packages/tiktok_ads", "path": "not_null_int_tiktok_ads__most_recent_ad_group_ad_group_id.sql", "original_file_path": "models/intermediate/intermediate.yml", "name": "not_null_int_tiktok_ads__most_recent_ad_group_ad_group_id", "alias": "not_null_int_tiktok_ads__most_recent_ad_group_ad_group_id", "checksum": {"name": "none", "checksum": ""}, "tags": [], "refs": [["int_tiktok_ads__most_recent_ad_group"]], "sources": [], "description": "", "columns": {}, "meta": {}, "docs": {"show": true}, "patch_path": null, "compiled_path": "target/compiled/tiktok_ads/models/intermediate/intermediate.yml/not_null_int_tiktok_ads__most_recent_ad_group_ad_group_id.sql", "build_path": null, "deferred": false, "unrendered_config": {}, "created_at": 1641494963.16583, "compiled_sql": "\n \n \n\nwith __dbt__cte__int_tiktok_ads__most_recent_ad_group as (\nwith base as (\n\n select *\n from FIVETRAN_DBT_TESTING.DBT_TIKTOK_ADS_stg_tiktok_ads.stg_tiktok_ads__ad_group_history\n\n), filtered as (\n\n select *\n from base\n where is_most_recent_record\n \n)\n\nselect *\nfrom filtered\n)select *\nfrom __dbt__cte__int_tiktok_ads__most_recent_ad_group\nwhere ad_group_id is null\n\n\n", "extra_ctes_injected": true, "extra_ctes": [{"id": "model.tiktok_ads.int_tiktok_ads__most_recent_ad_group", "sql": " __dbt__cte__int_tiktok_ads__most_recent_ad_group as (\nwith base as (\n\n select *\n from FIVETRAN_DBT_TESTING.DBT_TIKTOK_ADS_stg_tiktok_ads.stg_tiktok_ads__ad_group_history\n\n), filtered as (\n\n select *\n from base\n where is_most_recent_record\n \n)\n\nselect *\nfrom filtered\n)"}], "relation_name": null, "column_name": "ad_group_id", "file_key_name": "models.int_tiktok_ads__most_recent_ad_group"}, "test.tiktok_ads.dbt_utils_unique_combination_of_columns_int_tiktok_ads__most_recent_ad_group_ad_group_id__updated_at.e2e9914076": {"raw_sql": "{{ dbt_utils.test_unique_combination_of_columns(**_dbt_generic_test_kwargs) }}{{ config(alias=\"dbt_utils_unique_combination_o_7aae7967f01788b5ccce56d37f64c75b\") }}", "test_metadata": {"name": "unique_combination_of_columns", "kwargs": {"combination_of_columns": ["ad_group_id", "updated_at"], "model": "{{ get_where_subquery(ref('int_tiktok_ads__most_recent_ad_group')) }}"}, "namespace": "dbt_utils"}, "compiled": true, "resource_type": "test", "depends_on": {"macros": ["macro.dbt_utils.test_unique_combination_of_columns", "macro.dbt.get_where_subquery"], "nodes": ["model.tiktok_ads.int_tiktok_ads__most_recent_ad_group"]}, "config": {"enabled": true, "alias": "dbt_utils_unique_combination_o_7aae7967f01788b5ccce56d37f64c75b", "schema": "dbt_test__audit", "database": null, "tags": [], "meta": {}, "materialized": "test", "severity": "ERROR", "store_failures": null, "where": null, "limit": null, "fail_calc": "count(*)", "warn_if": "!= 0", "error_if": "!= 0"}, "database": "FIVETRAN_DBT_TESTING", "schema": "DBT_TIKTOK_ADS_dbt_test__audit", "fqn": ["tiktok_ads", "intermediate", "dbt_utils_unique_combination_of_columns_int_tiktok_ads__most_recent_ad_group_ad_group_id__updated_at"], "unique_id": "test.tiktok_ads.dbt_utils_unique_combination_of_columns_int_tiktok_ads__most_recent_ad_group_ad_group_id__updated_at.e2e9914076", "package_name": "tiktok_ads", "root_path": "/Users/renee.li/Documents/dbt/tiktok/develop/dbt_packages/tiktok_ads", "path": "dbt_utils_unique_combination_o_7aae7967f01788b5ccce56d37f64c75b.sql", "original_file_path": "models/intermediate/intermediate.yml", "name": "dbt_utils_unique_combination_of_columns_int_tiktok_ads__most_recent_ad_group_ad_group_id__updated_at", "alias": "dbt_utils_unique_combination_o_7aae7967f01788b5ccce56d37f64c75b", "checksum": {"name": "none", "checksum": ""}, "tags": [], "refs": [["int_tiktok_ads__most_recent_ad_group"]], "sources": [], "description": "", "columns": {}, "meta": {}, "docs": {"show": true}, "patch_path": null, "compiled_path": "target/compiled/tiktok_ads/models/intermediate/intermediate.yml/dbt_utils_unique_combination_o_7aae7967f01788b5ccce56d37f64c75b.sql", "build_path": null, "deferred": false, "unrendered_config": {"alias": "dbt_utils_unique_combination_o_7aae7967f01788b5ccce56d37f64c75b"}, "created_at": 1641494963.167509, "compiled_sql": "\n\n\n\n\n\nwith __dbt__cte__int_tiktok_ads__most_recent_ad_group as (\nwith base as (\n\n select *\n from FIVETRAN_DBT_TESTING.DBT_TIKTOK_ADS_stg_tiktok_ads.stg_tiktok_ads__ad_group_history\n\n), filtered as (\n\n select *\n from base\n where is_most_recent_record\n \n)\n\nselect *\nfrom filtered\n),validation_errors as (\n\n select\n ad_group_id, updated_at\n from __dbt__cte__int_tiktok_ads__most_recent_ad_group\n group by ad_group_id, updated_at\n having count(*) > 1\n\n)\n\nselect *\nfrom validation_errors\n\n\n", "extra_ctes_injected": true, "extra_ctes": [{"id": "model.tiktok_ads.int_tiktok_ads__most_recent_ad_group", "sql": " __dbt__cte__int_tiktok_ads__most_recent_ad_group as (\nwith base as (\n\n select *\n from FIVETRAN_DBT_TESTING.DBT_TIKTOK_ADS_stg_tiktok_ads.stg_tiktok_ads__ad_group_history\n\n), filtered as (\n\n select *\n from base\n where is_most_recent_record\n \n)\n\nselect *\nfrom filtered\n)"}], "relation_name": null, "column_name": null, "file_key_name": "models.int_tiktok_ads__most_recent_ad_group"}, "test.tiktok_ads.not_null_int_tiktok_ads__most_recent_ad_ad_id.14e9c145ca": {"raw_sql": "{{ test_not_null(**_dbt_generic_test_kwargs) }}", "test_metadata": {"name": "not_null", "kwargs": {"column_name": "ad_id", "model": "{{ get_where_subquery(ref('int_tiktok_ads__most_recent_ad')) }}"}, "namespace": null}, "compiled": true, "resource_type": "test", "depends_on": {"macros": ["macro.dbt.test_not_null", "macro.dbt.get_where_subquery"], "nodes": ["model.tiktok_ads.int_tiktok_ads__most_recent_ad"]}, "config": {"enabled": true, "alias": null, "schema": "dbt_test__audit", "database": null, "tags": [], "meta": {}, "materialized": "test", "severity": "ERROR", "store_failures": null, "where": null, "limit": null, "fail_calc": "count(*)", "warn_if": "!= 0", "error_if": "!= 0"}, "database": "FIVETRAN_DBT_TESTING", "schema": "DBT_TIKTOK_ADS_dbt_test__audit", "fqn": ["tiktok_ads", "intermediate", "not_null_int_tiktok_ads__most_recent_ad_ad_id"], "unique_id": "test.tiktok_ads.not_null_int_tiktok_ads__most_recent_ad_ad_id.14e9c145ca", "package_name": "tiktok_ads", "root_path": "/Users/renee.li/Documents/dbt/tiktok/develop/dbt_packages/tiktok_ads", "path": "not_null_int_tiktok_ads__most_recent_ad_ad_id.sql", "original_file_path": "models/intermediate/intermediate.yml", "name": "not_null_int_tiktok_ads__most_recent_ad_ad_id", "alias": "not_null_int_tiktok_ads__most_recent_ad_ad_id", "checksum": {"name": "none", "checksum": ""}, "tags": [], "refs": [["int_tiktok_ads__most_recent_ad"]], "sources": [], "description": "", "columns": {}, "meta": {}, "docs": {"show": true}, "patch_path": null, "compiled_path": "target/compiled/tiktok_ads/models/intermediate/intermediate.yml/not_null_int_tiktok_ads__most_recent_ad_ad_id.sql", "build_path": null, "deferred": false, "unrendered_config": {}, "created_at": 1641494963.172527, "compiled_sql": "\n \n \n\nwith __dbt__cte__int_tiktok_ads__most_recent_ad as (\nwith base as (\n\n select *\n from FIVETRAN_DBT_TESTING.DBT_TIKTOK_ADS_stg_tiktok_ads.stg_tiktok_ads__ad_history\n\n), filtered as (\n\n select *\n from base\n where is_most_recent_record\n \n)\n\nselect *\nfrom filtered\n)select *\nfrom __dbt__cte__int_tiktok_ads__most_recent_ad\nwhere ad_id is null\n\n\n", "extra_ctes_injected": true, "extra_ctes": [{"id": "model.tiktok_ads.int_tiktok_ads__most_recent_ad", "sql": " __dbt__cte__int_tiktok_ads__most_recent_ad as (\nwith base as (\n\n select *\n from FIVETRAN_DBT_TESTING.DBT_TIKTOK_ADS_stg_tiktok_ads.stg_tiktok_ads__ad_history\n\n), filtered as (\n\n select *\n from base\n where is_most_recent_record\n \n)\n\nselect *\nfrom filtered\n)"}], "relation_name": null, "column_name": "ad_id", "file_key_name": "models.int_tiktok_ads__most_recent_ad"}, "test.tiktok_ads.dbt_utils_unique_combination_of_columns_int_tiktok_ads__most_recent_ad_ad_id__updated_at.f58d824f65": {"raw_sql": "{{ dbt_utils.test_unique_combination_of_columns(**_dbt_generic_test_kwargs) }}{{ config(alias=\"dbt_utils_unique_combination_o_82db7b1c335645aabf3916a22992c42a\") }}", "test_metadata": {"name": "unique_combination_of_columns", "kwargs": {"combination_of_columns": ["ad_id", "updated_at"], "model": "{{ get_where_subquery(ref('int_tiktok_ads__most_recent_ad')) }}"}, "namespace": "dbt_utils"}, "compiled": true, "resource_type": "test", "depends_on": {"macros": ["macro.dbt_utils.test_unique_combination_of_columns", "macro.dbt.get_where_subquery"], "nodes": ["model.tiktok_ads.int_tiktok_ads__most_recent_ad"]}, "config": {"enabled": true, "alias": "dbt_utils_unique_combination_o_82db7b1c335645aabf3916a22992c42a", "schema": "dbt_test__audit", "database": null, "tags": [], "meta": {}, "materialized": "test", "severity": "ERROR", "store_failures": null, "where": null, "limit": null, "fail_calc": "count(*)", "warn_if": "!= 0", "error_if": "!= 0"}, "database": "FIVETRAN_DBT_TESTING", "schema": "DBT_TIKTOK_ADS_dbt_test__audit", "fqn": ["tiktok_ads", "intermediate", "dbt_utils_unique_combination_of_columns_int_tiktok_ads__most_recent_ad_ad_id__updated_at"], "unique_id": "test.tiktok_ads.dbt_utils_unique_combination_of_columns_int_tiktok_ads__most_recent_ad_ad_id__updated_at.f58d824f65", "package_name": "tiktok_ads", "root_path": "/Users/renee.li/Documents/dbt/tiktok/develop/dbt_packages/tiktok_ads", "path": "dbt_utils_unique_combination_o_82db7b1c335645aabf3916a22992c42a.sql", "original_file_path": "models/intermediate/intermediate.yml", "name": "dbt_utils_unique_combination_of_columns_int_tiktok_ads__most_recent_ad_ad_id__updated_at", "alias": "dbt_utils_unique_combination_o_82db7b1c335645aabf3916a22992c42a", "checksum": {"name": "none", "checksum": ""}, "tags": [], "refs": [["int_tiktok_ads__most_recent_ad"]], "sources": [], "description": "", "columns": {}, "meta": {}, "docs": {"show": true}, "patch_path": null, "compiled_path": "target/compiled/tiktok_ads/models/intermediate/intermediate.yml/dbt_utils_unique_combination_o_82db7b1c335645aabf3916a22992c42a.sql", "build_path": null, "deferred": false, "unrendered_config": {"alias": "dbt_utils_unique_combination_o_82db7b1c335645aabf3916a22992c42a"}, "created_at": 1641494963.1743948, "compiled_sql": "\n\n\n\n\n\nwith __dbt__cte__int_tiktok_ads__most_recent_ad as (\nwith base as (\n\n select *\n from FIVETRAN_DBT_TESTING.DBT_TIKTOK_ADS_stg_tiktok_ads.stg_tiktok_ads__ad_history\n\n), filtered as (\n\n select *\n from base\n where is_most_recent_record\n \n)\n\nselect *\nfrom filtered\n),validation_errors as (\n\n select\n ad_id, updated_at\n from __dbt__cte__int_tiktok_ads__most_recent_ad\n group by ad_id, updated_at\n having count(*) > 1\n\n)\n\nselect *\nfrom validation_errors\n\n\n", "extra_ctes_injected": true, "extra_ctes": [{"id": "model.tiktok_ads.int_tiktok_ads__most_recent_ad", "sql": " __dbt__cte__int_tiktok_ads__most_recent_ad as (\nwith base as (\n\n select *\n from FIVETRAN_DBT_TESTING.DBT_TIKTOK_ADS_stg_tiktok_ads.stg_tiktok_ads__ad_history\n\n), filtered as (\n\n select *\n from base\n where is_most_recent_record\n \n)\n\nselect *\nfrom filtered\n)"}], "relation_name": null, "column_name": null, "file_key_name": "models.int_tiktok_ads__most_recent_ad"}, "test.tiktok_ads.not_null_int_tiktok_ads__most_recent_campaign_campaign_id.8cefa8981c": {"raw_sql": "{{ test_not_null(**_dbt_generic_test_kwargs) }}", "test_metadata": {"name": "not_null", "kwargs": {"column_name": "campaign_id", "model": "{{ get_where_subquery(ref('int_tiktok_ads__most_recent_campaign')) }}"}, "namespace": null}, "compiled": true, "resource_type": "test", "depends_on": {"macros": ["macro.dbt.test_not_null", "macro.dbt.get_where_subquery"], "nodes": ["model.tiktok_ads.int_tiktok_ads__most_recent_campaign"]}, "config": {"enabled": true, "alias": null, "schema": "dbt_test__audit", "database": null, "tags": [], "meta": {}, "materialized": "test", "severity": "ERROR", "store_failures": null, "where": null, "limit": null, "fail_calc": "count(*)", "warn_if": "!= 0", "error_if": "!= 0"}, "database": "FIVETRAN_DBT_TESTING", "schema": "DBT_TIKTOK_ADS_dbt_test__audit", "fqn": ["tiktok_ads", "intermediate", "not_null_int_tiktok_ads__most_recent_campaign_campaign_id"], "unique_id": "test.tiktok_ads.not_null_int_tiktok_ads__most_recent_campaign_campaign_id.8cefa8981c", "package_name": "tiktok_ads", "root_path": "/Users/renee.li/Documents/dbt/tiktok/develop/dbt_packages/tiktok_ads", "path": "not_null_int_tiktok_ads__most_recent_campaign_campaign_id.sql", "original_file_path": "models/intermediate/intermediate.yml", "name": "not_null_int_tiktok_ads__most_recent_campaign_campaign_id", "alias": "not_null_int_tiktok_ads__most_recent_campaign_campaign_id", "checksum": {"name": "none", "checksum": ""}, "tags": [], "refs": [["int_tiktok_ads__most_recent_campaign"]], "sources": [], "description": "", "columns": {}, "meta": {}, "docs": {"show": true}, "patch_path": null, "compiled_path": "target/compiled/tiktok_ads/models/intermediate/intermediate.yml/not_null_int_tiktok_ads__most_recent_campaign_campaign_id.sql", "build_path": null, "deferred": false, "unrendered_config": {}, "created_at": 1641494963.1786911, "compiled_sql": "\n \n \n\nwith __dbt__cte__int_tiktok_ads__most_recent_campaign as (\nwith base as (\n\n select *\n from FIVETRAN_DBT_TESTING.DBT_TIKTOK_ADS_stg_tiktok_ads.stg_tiktok_ads__campaign_history\n\n), filtered as (\n\n select *\n from base\n where is_most_recent_record\n \n)\n\nselect *\nfrom filtered\n)select *\nfrom __dbt__cte__int_tiktok_ads__most_recent_campaign\nwhere campaign_id is null\n\n\n", "extra_ctes_injected": true, "extra_ctes": [{"id": "model.tiktok_ads.int_tiktok_ads__most_recent_campaign", "sql": " __dbt__cte__int_tiktok_ads__most_recent_campaign as (\nwith base as (\n\n select *\n from FIVETRAN_DBT_TESTING.DBT_TIKTOK_ADS_stg_tiktok_ads.stg_tiktok_ads__campaign_history\n\n), filtered as (\n\n select *\n from base\n where is_most_recent_record\n \n)\n\nselect *\nfrom filtered\n)"}], "relation_name": null, "column_name": "campaign_id", "file_key_name": "models.int_tiktok_ads__most_recent_campaign"}, "test.tiktok_ads.dbt_utils_unique_combination_of_columns_int_tiktok_ads__most_recent_campaign_campaign_id__updated_at.39077adf71": {"raw_sql": "{{ dbt_utils.test_unique_combination_of_columns(**_dbt_generic_test_kwargs) }}{{ config(alias=\"dbt_utils_unique_combination_o_8456719f1ebbe11b109db2e39e0239ce\") }}", "test_metadata": {"name": "unique_combination_of_columns", "kwargs": {"combination_of_columns": ["campaign_id", "updated_at"], "model": "{{ get_where_subquery(ref('int_tiktok_ads__most_recent_campaign')) }}"}, "namespace": "dbt_utils"}, "compiled": true, "resource_type": "test", "depends_on": {"macros": ["macro.dbt_utils.test_unique_combination_of_columns", "macro.dbt.get_where_subquery"], "nodes": ["model.tiktok_ads.int_tiktok_ads__most_recent_campaign"]}, "config": {"enabled": true, "alias": "dbt_utils_unique_combination_o_8456719f1ebbe11b109db2e39e0239ce", "schema": "dbt_test__audit", "database": null, "tags": [], "meta": {}, "materialized": "test", "severity": "ERROR", "store_failures": null, "where": null, "limit": null, "fail_calc": "count(*)", "warn_if": "!= 0", "error_if": "!= 0"}, "database": "FIVETRAN_DBT_TESTING", "schema": "DBT_TIKTOK_ADS_dbt_test__audit", "fqn": ["tiktok_ads", "intermediate", "dbt_utils_unique_combination_of_columns_int_tiktok_ads__most_recent_campaign_campaign_id__updated_at"], "unique_id": "test.tiktok_ads.dbt_utils_unique_combination_of_columns_int_tiktok_ads__most_recent_campaign_campaign_id__updated_at.39077adf71", "package_name": "tiktok_ads", "root_path": "/Users/renee.li/Documents/dbt/tiktok/develop/dbt_packages/tiktok_ads", "path": "dbt_utils_unique_combination_o_8456719f1ebbe11b109db2e39e0239ce.sql", "original_file_path": "models/intermediate/intermediate.yml", "name": "dbt_utils_unique_combination_of_columns_int_tiktok_ads__most_recent_campaign_campaign_id__updated_at", "alias": "dbt_utils_unique_combination_o_8456719f1ebbe11b109db2e39e0239ce", "checksum": {"name": "none", "checksum": ""}, "tags": [], "refs": [["int_tiktok_ads__most_recent_campaign"]], "sources": [], "description": "", "columns": {}, "meta": {}, "docs": {"show": true}, "patch_path": null, "compiled_path": "target/compiled/tiktok_ads/models/intermediate/intermediate.yml/dbt_utils_unique_combination_o_8456719f1ebbe11b109db2e39e0239ce.sql", "build_path": null, "deferred": false, "unrendered_config": {"alias": "dbt_utils_unique_combination_o_8456719f1ebbe11b109db2e39e0239ce"}, "created_at": 1641494963.180662, "compiled_sql": "\n\n\n\n\n\nwith __dbt__cte__int_tiktok_ads__most_recent_campaign as (\nwith base as (\n\n select *\n from FIVETRAN_DBT_TESTING.DBT_TIKTOK_ADS_stg_tiktok_ads.stg_tiktok_ads__campaign_history\n\n), filtered as (\n\n select *\n from base\n where is_most_recent_record\n \n)\n\nselect *\nfrom filtered\n),validation_errors as (\n\n select\n campaign_id, updated_at\n from __dbt__cte__int_tiktok_ads__most_recent_campaign\n group by campaign_id, updated_at\n having count(*) > 1\n\n)\n\nselect *\nfrom validation_errors\n\n\n", "extra_ctes_injected": true, "extra_ctes": [{"id": "model.tiktok_ads.int_tiktok_ads__most_recent_campaign", "sql": " __dbt__cte__int_tiktok_ads__most_recent_campaign as (\nwith base as (\n\n select *\n from FIVETRAN_DBT_TESTING.DBT_TIKTOK_ADS_stg_tiktok_ads.stg_tiktok_ads__campaign_history\n\n), filtered as (\n\n select *\n from base\n where is_most_recent_record\n \n)\n\nselect *\nfrom filtered\n)"}], "relation_name": null, "column_name": null, "file_key_name": "models.int_tiktok_ads__most_recent_campaign"}, "test.tiktok_ads_source.unique_stg_tiktok_ads__advertiser_advertiser_id.078391ba66": {"raw_sql": "{{ test_unique(**_dbt_generic_test_kwargs) }}", "test_metadata": {"name": "unique", "kwargs": {"column_name": "advertiser_id", "model": "{{ get_where_subquery(ref('stg_tiktok_ads__advertiser')) }}"}, "namespace": null}, "compiled": true, "resource_type": "test", "depends_on": {"macros": ["macro.dbt.test_unique", "macro.dbt.get_where_subquery"], "nodes": ["model.tiktok_ads_source.stg_tiktok_ads__advertiser"]}, "config": {"enabled": true, "alias": null, "schema": "dbt_test__audit", "database": null, "tags": [], "meta": {}, "materialized": "test", "severity": "ERROR", "store_failures": null, "where": null, "limit": null, "fail_calc": "count(*)", "warn_if": "!= 0", "error_if": "!= 0"}, "database": "FIVETRAN_DBT_TESTING", "schema": "DBT_TIKTOK_ADS_dbt_test__audit", "fqn": ["tiktok_ads_source", "unique_stg_tiktok_ads__advertiser_advertiser_id"], "unique_id": "test.tiktok_ads_source.unique_stg_tiktok_ads__advertiser_advertiser_id.078391ba66", "package_name": "tiktok_ads_source", "root_path": "/Users/renee.li/Documents/dbt/tiktok/develop/dbt_packages/tiktok_ads_source", "path": "unique_stg_tiktok_ads__advertiser_advertiser_id.sql", "original_file_path": "models/stg_tiktok_ads.yml", "name": "unique_stg_tiktok_ads__advertiser_advertiser_id", "alias": "unique_stg_tiktok_ads__advertiser_advertiser_id", "checksum": {"name": "none", "checksum": ""}, "tags": [], "refs": [["stg_tiktok_ads__advertiser"]], "sources": [], "description": "", "columns": {}, "meta": {}, "docs": {"show": true}, "patch_path": null, "compiled_path": "target/compiled/tiktok_ads_source/models/stg_tiktok_ads.yml/unique_stg_tiktok_ads__advertiser_advertiser_id.sql", "build_path": null, "deferred": false, "unrendered_config": {}, "created_at": 1641494963.3718421, "compiled_sql": "\n \n \n\nselect\n advertiser_id as unique_field,\n count(*) as n_records\n\nfrom FIVETRAN_DBT_TESTING.DBT_TIKTOK_ADS_stg_tiktok_ads.stg_tiktok_ads__advertiser\nwhere advertiser_id is not null\ngroup by advertiser_id\nhaving count(*) > 1\n\n\n", "extra_ctes_injected": true, "extra_ctes": [], "relation_name": null, "column_name": "advertiser_id", "file_key_name": "models.stg_tiktok_ads__advertiser"}, "test.tiktok_ads_source.not_null_stg_tiktok_ads__advertiser_advertiser_id.5deab92def": {"raw_sql": "{{ test_not_null(**_dbt_generic_test_kwargs) }}", "test_metadata": {"name": "not_null", "kwargs": {"column_name": "advertiser_id", "model": "{{ get_where_subquery(ref('stg_tiktok_ads__advertiser')) }}"}, "namespace": null}, "compiled": true, "resource_type": "test", "depends_on": {"macros": ["macro.dbt.test_not_null", "macro.dbt.get_where_subquery"], "nodes": ["model.tiktok_ads_source.stg_tiktok_ads__advertiser"]}, "config": {"enabled": true, "alias": null, "schema": "dbt_test__audit", "database": null, "tags": [], "meta": {}, "materialized": "test", "severity": "ERROR", "store_failures": null, "where": null, "limit": null, "fail_calc": "count(*)", "warn_if": "!= 0", "error_if": "!= 0"}, "database": "FIVETRAN_DBT_TESTING", "schema": "DBT_TIKTOK_ADS_dbt_test__audit", "fqn": ["tiktok_ads_source", "not_null_stg_tiktok_ads__advertiser_advertiser_id"], "unique_id": "test.tiktok_ads_source.not_null_stg_tiktok_ads__advertiser_advertiser_id.5deab92def", "package_name": "tiktok_ads_source", "root_path": "/Users/renee.li/Documents/dbt/tiktok/develop/dbt_packages/tiktok_ads_source", "path": "not_null_stg_tiktok_ads__advertiser_advertiser_id.sql", "original_file_path": "models/stg_tiktok_ads.yml", "name": "not_null_stg_tiktok_ads__advertiser_advertiser_id", "alias": "not_null_stg_tiktok_ads__advertiser_advertiser_id", "checksum": {"name": "none", "checksum": ""}, "tags": [], "refs": [["stg_tiktok_ads__advertiser"]], "sources": [], "description": "", "columns": {}, "meta": {}, "docs": {"show": true}, "patch_path": null, "compiled_path": "target/compiled/tiktok_ads_source/models/stg_tiktok_ads.yml/not_null_stg_tiktok_ads__advertiser_advertiser_id.sql", "build_path": null, "deferred": false, "unrendered_config": {}, "created_at": 1641494963.3744462, "compiled_sql": "\n \n \n\nselect *\nfrom FIVETRAN_DBT_TESTING.DBT_TIKTOK_ADS_stg_tiktok_ads.stg_tiktok_ads__advertiser\nwhere advertiser_id is null\n\n\n", "extra_ctes_injected": true, "extra_ctes": [], "relation_name": null, "column_name": "advertiser_id", "file_key_name": "models.stg_tiktok_ads__advertiser"}, "test.tiktok_ads_source.not_null_stg_tiktok_ads__ad_group_history_ad_group_id.04778d7fad": {"raw_sql": "{{ test_not_null(**_dbt_generic_test_kwargs) }}", "test_metadata": {"name": "not_null", "kwargs": {"column_name": "ad_group_id", "model": "{{ get_where_subquery(ref('stg_tiktok_ads__ad_group_history')) }}"}, "namespace": null}, "compiled": true, "resource_type": "test", "depends_on": {"macros": ["macro.dbt.test_not_null", "macro.dbt.get_where_subquery"], "nodes": ["model.tiktok_ads_source.stg_tiktok_ads__ad_group_history"]}, "config": {"enabled": true, "alias": null, "schema": "dbt_test__audit", "database": null, "tags": [], "meta": {}, "materialized": "test", "severity": "ERROR", "store_failures": null, "where": null, "limit": null, "fail_calc": "count(*)", "warn_if": "!= 0", "error_if": "!= 0"}, "database": "FIVETRAN_DBT_TESTING", "schema": "DBT_TIKTOK_ADS_dbt_test__audit", "fqn": ["tiktok_ads_source", "not_null_stg_tiktok_ads__ad_group_history_ad_group_id"], "unique_id": "test.tiktok_ads_source.not_null_stg_tiktok_ads__ad_group_history_ad_group_id.04778d7fad", "package_name": "tiktok_ads_source", "root_path": "/Users/renee.li/Documents/dbt/tiktok/develop/dbt_packages/tiktok_ads_source", "path": "not_null_stg_tiktok_ads__ad_group_history_ad_group_id.sql", "original_file_path": "models/stg_tiktok_ads.yml", "name": "not_null_stg_tiktok_ads__ad_group_history_ad_group_id", "alias": "not_null_stg_tiktok_ads__ad_group_history_ad_group_id", "checksum": {"name": "none", "checksum": ""}, "tags": [], "refs": [["stg_tiktok_ads__ad_group_history"]], "sources": [], "description": "", "columns": {}, "meta": {}, "docs": {"show": true}, "patch_path": null, "compiled_path": "target/compiled/tiktok_ads_source/models/stg_tiktok_ads.yml/not_null_stg_tiktok_ads__ad_group_history_ad_group_id.sql", "build_path": null, "deferred": false, "unrendered_config": {}, "created_at": 1641494963.37691, "compiled_sql": "\n \n \n\nselect *\nfrom FIVETRAN_DBT_TESTING.DBT_TIKTOK_ADS_stg_tiktok_ads.stg_tiktok_ads__ad_group_history\nwhere ad_group_id is null\n\n\n", "extra_ctes_injected": true, "extra_ctes": [], "relation_name": null, "column_name": "ad_group_id", "file_key_name": "models.stg_tiktok_ads__ad_group_history"}, "test.tiktok_ads_source.dbt_utils_unique_combination_of_columns_stg_tiktok_ads__ad_group_history_ad_group_id__updated_at.cec78c01de": {"raw_sql": "{{ dbt_utils.test_unique_combination_of_columns(**_dbt_generic_test_kwargs) }}{{ config(alias=\"dbt_utils_unique_combination_o_353c130a41ba5d6aab13dbda36b226c8\") }}", "test_metadata": {"name": "unique_combination_of_columns", "kwargs": {"combination_of_columns": ["ad_group_id", "updated_at"], "model": "{{ get_where_subquery(ref('stg_tiktok_ads__ad_group_history')) }}"}, "namespace": "dbt_utils"}, "compiled": true, "resource_type": "test", "depends_on": {"macros": ["macro.dbt_utils.test_unique_combination_of_columns", "macro.dbt.get_where_subquery"], "nodes": ["model.tiktok_ads_source.stg_tiktok_ads__ad_group_history"]}, "config": {"enabled": true, "alias": "dbt_utils_unique_combination_o_353c130a41ba5d6aab13dbda36b226c8", "schema": "dbt_test__audit", "database": null, "tags": [], "meta": {}, "materialized": "test", "severity": "ERROR", "store_failures": null, "where": null, "limit": null, "fail_calc": "count(*)", "warn_if": "!= 0", "error_if": "!= 0"}, "database": "FIVETRAN_DBT_TESTING", "schema": "DBT_TIKTOK_ADS_dbt_test__audit", "fqn": ["tiktok_ads_source", "dbt_utils_unique_combination_of_columns_stg_tiktok_ads__ad_group_history_ad_group_id__updated_at"], "unique_id": "test.tiktok_ads_source.dbt_utils_unique_combination_of_columns_stg_tiktok_ads__ad_group_history_ad_group_id__updated_at.cec78c01de", "package_name": "tiktok_ads_source", "root_path": "/Users/renee.li/Documents/dbt/tiktok/develop/dbt_packages/tiktok_ads_source", "path": "dbt_utils_unique_combination_o_353c130a41ba5d6aab13dbda36b226c8.sql", "original_file_path": "models/stg_tiktok_ads.yml", "name": "dbt_utils_unique_combination_of_columns_stg_tiktok_ads__ad_group_history_ad_group_id__updated_at", "alias": "dbt_utils_unique_combination_o_353c130a41ba5d6aab13dbda36b226c8", "checksum": {"name": "none", "checksum": ""}, "tags": [], "refs": [["stg_tiktok_ads__ad_group_history"]], "sources": [], "description": "", "columns": {}, "meta": {}, "docs": {"show": true}, "patch_path": null, "compiled_path": "target/compiled/tiktok_ads_source/models/stg_tiktok_ads.yml/dbt_utils_unique_combination_o_353c130a41ba5d6aab13dbda36b226c8.sql", "build_path": null, "deferred": false, "unrendered_config": {"alias": "dbt_utils_unique_combination_o_353c130a41ba5d6aab13dbda36b226c8"}, "created_at": 1641494963.379584, "compiled_sql": "\n\n\n\n\n\nwith validation_errors as (\n\n select\n ad_group_id, updated_at\n from FIVETRAN_DBT_TESTING.DBT_TIKTOK_ADS_stg_tiktok_ads.stg_tiktok_ads__ad_group_history\n group by ad_group_id, updated_at\n having count(*) > 1\n\n)\n\nselect *\nfrom validation_errors\n\n\n", "extra_ctes_injected": true, "extra_ctes": [], "relation_name": null, "column_name": null, "file_key_name": "models.stg_tiktok_ads__ad_group_history"}, "test.tiktok_ads_source.not_null_stg_tiktok_ads__ad_history_ad_id.4ffd05b23a": {"raw_sql": "{{ test_not_null(**_dbt_generic_test_kwargs) }}", "test_metadata": {"name": "not_null", "kwargs": {"column_name": "ad_id", "model": "{{ get_where_subquery(ref('stg_tiktok_ads__ad_history')) }}"}, "namespace": null}, "compiled": true, "resource_type": "test", "depends_on": {"macros": ["macro.dbt.test_not_null", "macro.dbt.get_where_subquery"], "nodes": ["model.tiktok_ads_source.stg_tiktok_ads__ad_history"]}, "config": {"enabled": true, "alias": null, "schema": "dbt_test__audit", "database": null, "tags": [], "meta": {}, "materialized": "test", "severity": "ERROR", "store_failures": null, "where": null, "limit": null, "fail_calc": "count(*)", "warn_if": "!= 0", "error_if": "!= 0"}, "database": "FIVETRAN_DBT_TESTING", "schema": "DBT_TIKTOK_ADS_dbt_test__audit", "fqn": ["tiktok_ads_source", "not_null_stg_tiktok_ads__ad_history_ad_id"], "unique_id": "test.tiktok_ads_source.not_null_stg_tiktok_ads__ad_history_ad_id.4ffd05b23a", "package_name": "tiktok_ads_source", "root_path": "/Users/renee.li/Documents/dbt/tiktok/develop/dbt_packages/tiktok_ads_source", "path": "not_null_stg_tiktok_ads__ad_history_ad_id.sql", "original_file_path": "models/stg_tiktok_ads.yml", "name": "not_null_stg_tiktok_ads__ad_history_ad_id", "alias": "not_null_stg_tiktok_ads__ad_history_ad_id", "checksum": {"name": "none", "checksum": ""}, "tags": [], "refs": [["stg_tiktok_ads__ad_history"]], "sources": [], "description": "", "columns": {}, "meta": {}, "docs": {"show": true}, "patch_path": null, "compiled_path": "target/compiled/tiktok_ads_source/models/stg_tiktok_ads.yml/not_null_stg_tiktok_ads__ad_history_ad_id.sql", "build_path": null, "deferred": false, "unrendered_config": {}, "created_at": 1641494963.385997, "compiled_sql": "\n \n \n\nselect *\nfrom FIVETRAN_DBT_TESTING.DBT_TIKTOK_ADS_stg_tiktok_ads.stg_tiktok_ads__ad_history\nwhere ad_id is null\n\n\n", "extra_ctes_injected": true, "extra_ctes": [], "relation_name": null, "column_name": "ad_id", "file_key_name": "models.stg_tiktok_ads__ad_history"}, "test.tiktok_ads_source.dbt_utils_unique_combination_of_columns_stg_tiktok_ads__ad_history_ad_id__updated_at.66b86b4dd1": {"raw_sql": "{{ dbt_utils.test_unique_combination_of_columns(**_dbt_generic_test_kwargs) }}{{ config(alias=\"dbt_utils_unique_combination_o_fe2e43690b07f6a6cbd499af54b7738f\") }}", "test_metadata": {"name": "unique_combination_of_columns", "kwargs": {"combination_of_columns": ["ad_id", "updated_at"], "model": "{{ get_where_subquery(ref('stg_tiktok_ads__ad_history')) }}"}, "namespace": "dbt_utils"}, "compiled": true, "resource_type": "test", "depends_on": {"macros": ["macro.dbt_utils.test_unique_combination_of_columns", "macro.dbt.get_where_subquery"], "nodes": ["model.tiktok_ads_source.stg_tiktok_ads__ad_history"]}, "config": {"enabled": true, "alias": "dbt_utils_unique_combination_o_fe2e43690b07f6a6cbd499af54b7738f", "schema": "dbt_test__audit", "database": null, "tags": [], "meta": {}, "materialized": "test", "severity": "ERROR", "store_failures": null, "where": null, "limit": null, "fail_calc": "count(*)", "warn_if": "!= 0", "error_if": "!= 0"}, "database": "FIVETRAN_DBT_TESTING", "schema": "DBT_TIKTOK_ADS_dbt_test__audit", "fqn": ["tiktok_ads_source", "dbt_utils_unique_combination_of_columns_stg_tiktok_ads__ad_history_ad_id__updated_at"], "unique_id": "test.tiktok_ads_source.dbt_utils_unique_combination_of_columns_stg_tiktok_ads__ad_history_ad_id__updated_at.66b86b4dd1", "package_name": "tiktok_ads_source", "root_path": "/Users/renee.li/Documents/dbt/tiktok/develop/dbt_packages/tiktok_ads_source", "path": "dbt_utils_unique_combination_o_fe2e43690b07f6a6cbd499af54b7738f.sql", "original_file_path": "models/stg_tiktok_ads.yml", "name": "dbt_utils_unique_combination_of_columns_stg_tiktok_ads__ad_history_ad_id__updated_at", "alias": "dbt_utils_unique_combination_o_fe2e43690b07f6a6cbd499af54b7738f", "checksum": {"name": "none", "checksum": ""}, "tags": [], "refs": [["stg_tiktok_ads__ad_history"]], "sources": [], "description": "", "columns": {}, "meta": {}, "docs": {"show": true}, "patch_path": null, "compiled_path": "target/compiled/tiktok_ads_source/models/stg_tiktok_ads.yml/dbt_utils_unique_combination_o_fe2e43690b07f6a6cbd499af54b7738f.sql", "build_path": null, "deferred": false, "unrendered_config": {"alias": "dbt_utils_unique_combination_o_fe2e43690b07f6a6cbd499af54b7738f"}, "created_at": 1641494963.3886878, "compiled_sql": "\n\n\n\n\n\nwith validation_errors as (\n\n select\n ad_id, updated_at\n from FIVETRAN_DBT_TESTING.DBT_TIKTOK_ADS_stg_tiktok_ads.stg_tiktok_ads__ad_history\n group by ad_id, updated_at\n having count(*) > 1\n\n)\n\nselect *\nfrom validation_errors\n\n\n", "extra_ctes_injected": true, "extra_ctes": [], "relation_name": null, "column_name": null, "file_key_name": "models.stg_tiktok_ads__ad_history"}, "test.tiktok_ads_source.not_null_stg_tiktok_ads__campaign_history_campaign_id.7f9147d1e1": {"raw_sql": "{{ test_not_null(**_dbt_generic_test_kwargs) }}", "test_metadata": {"name": "not_null", "kwargs": {"column_name": "campaign_id", "model": "{{ get_where_subquery(ref('stg_tiktok_ads__campaign_history')) }}"}, "namespace": null}, "compiled": true, "resource_type": "test", "depends_on": {"macros": ["macro.dbt.test_not_null", "macro.dbt.get_where_subquery"], "nodes": ["model.tiktok_ads_source.stg_tiktok_ads__campaign_history"]}, "config": {"enabled": true, "alias": null, "schema": "dbt_test__audit", "database": null, "tags": [], "meta": {}, "materialized": "test", "severity": "ERROR", "store_failures": null, "where": null, "limit": null, "fail_calc": "count(*)", "warn_if": "!= 0", "error_if": "!= 0"}, "database": "FIVETRAN_DBT_TESTING", "schema": "DBT_TIKTOK_ADS_dbt_test__audit", "fqn": ["tiktok_ads_source", "not_null_stg_tiktok_ads__campaign_history_campaign_id"], "unique_id": "test.tiktok_ads_source.not_null_stg_tiktok_ads__campaign_history_campaign_id.7f9147d1e1", "package_name": "tiktok_ads_source", "root_path": "/Users/renee.li/Documents/dbt/tiktok/develop/dbt_packages/tiktok_ads_source", "path": "not_null_stg_tiktok_ads__campaign_history_campaign_id.sql", "original_file_path": "models/stg_tiktok_ads.yml", "name": "not_null_stg_tiktok_ads__campaign_history_campaign_id", "alias": "not_null_stg_tiktok_ads__campaign_history_campaign_id", "checksum": {"name": "none", "checksum": ""}, "tags": [], "refs": [["stg_tiktok_ads__campaign_history"]], "sources": [], "description": "", "columns": {}, "meta": {}, "docs": {"show": true}, "patch_path": null, "compiled_path": "target/compiled/tiktok_ads_source/models/stg_tiktok_ads.yml/not_null_stg_tiktok_ads__campaign_history_campaign_id.sql", "build_path": null, "deferred": false, "unrendered_config": {}, "created_at": 1641494963.394699, "compiled_sql": "\n \n \n\nselect *\nfrom FIVETRAN_DBT_TESTING.DBT_TIKTOK_ADS_stg_tiktok_ads.stg_tiktok_ads__campaign_history\nwhere campaign_id is null\n\n\n", "extra_ctes_injected": true, "extra_ctes": [], "relation_name": null, "column_name": "campaign_id", "file_key_name": "models.stg_tiktok_ads__campaign_history"}, "test.tiktok_ads_source.dbt_utils_unique_combination_of_columns_stg_tiktok_ads__campaign_history_campaign_id__updated_at.72bf07011b": {"raw_sql": "{{ dbt_utils.test_unique_combination_of_columns(**_dbt_generic_test_kwargs) }}{{ config(alias=\"dbt_utils_unique_combination_o_843ebfc08785d00a296625f469aa2000\") }}", "test_metadata": {"name": "unique_combination_of_columns", "kwargs": {"combination_of_columns": ["campaign_id", "updated_at"], "model": "{{ get_where_subquery(ref('stg_tiktok_ads__campaign_history')) }}"}, "namespace": "dbt_utils"}, "compiled": true, "resource_type": "test", "depends_on": {"macros": ["macro.dbt_utils.test_unique_combination_of_columns", "macro.dbt.get_where_subquery"], "nodes": ["model.tiktok_ads_source.stg_tiktok_ads__campaign_history"]}, "config": {"enabled": true, "alias": "dbt_utils_unique_combination_o_843ebfc08785d00a296625f469aa2000", "schema": "dbt_test__audit", "database": null, "tags": [], "meta": {}, "materialized": "test", "severity": "ERROR", "store_failures": null, "where": null, "limit": null, "fail_calc": "count(*)", "warn_if": "!= 0", "error_if": "!= 0"}, "database": "FIVETRAN_DBT_TESTING", "schema": "DBT_TIKTOK_ADS_dbt_test__audit", "fqn": ["tiktok_ads_source", "dbt_utils_unique_combination_of_columns_stg_tiktok_ads__campaign_history_campaign_id__updated_at"], "unique_id": "test.tiktok_ads_source.dbt_utils_unique_combination_of_columns_stg_tiktok_ads__campaign_history_campaign_id__updated_at.72bf07011b", "package_name": "tiktok_ads_source", "root_path": "/Users/renee.li/Documents/dbt/tiktok/develop/dbt_packages/tiktok_ads_source", "path": "dbt_utils_unique_combination_o_843ebfc08785d00a296625f469aa2000.sql", "original_file_path": "models/stg_tiktok_ads.yml", "name": "dbt_utils_unique_combination_of_columns_stg_tiktok_ads__campaign_history_campaign_id__updated_at", "alias": "dbt_utils_unique_combination_o_843ebfc08785d00a296625f469aa2000", "checksum": {"name": "none", "checksum": ""}, "tags": [], "refs": [["stg_tiktok_ads__campaign_history"]], "sources": [], "description": "", "columns": {}, "meta": {}, "docs": {"show": true}, "patch_path": null, "compiled_path": "target/compiled/tiktok_ads_source/models/stg_tiktok_ads.yml/dbt_utils_unique_combination_o_843ebfc08785d00a296625f469aa2000.sql", "build_path": null, "deferred": false, "unrendered_config": {"alias": "dbt_utils_unique_combination_o_843ebfc08785d00a296625f469aa2000"}, "created_at": 1641494963.3970292, "compiled_sql": "\n\n\n\n\n\nwith validation_errors as (\n\n select\n campaign_id, updated_at\n from FIVETRAN_DBT_TESTING.DBT_TIKTOK_ADS_stg_tiktok_ads.stg_tiktok_ads__campaign_history\n group by campaign_id, updated_at\n having count(*) > 1\n\n)\n\nselect *\nfrom validation_errors\n\n\n", "extra_ctes_injected": true, "extra_ctes": [], "relation_name": null, "column_name": null, "file_key_name": "models.stg_tiktok_ads__campaign_history"}, "test.tiktok_ads_source.dbt_utils_unique_combination_of_columns_stg_tiktok_ads__ad_report_hourly_ad_id__stat_time_hour.e70f8cef6d": {"raw_sql": "{{ dbt_utils.test_unique_combination_of_columns(**_dbt_generic_test_kwargs) }}{{ config(alias=\"dbt_utils_unique_combination_o_e6913172297a173fb855f92cf72b08dc\") }}", "test_metadata": {"name": "unique_combination_of_columns", "kwargs": {"combination_of_columns": ["ad_id", "stat_time_hour"], "model": "{{ get_where_subquery(ref('stg_tiktok_ads__ad_report_hourly')) }}"}, "namespace": "dbt_utils"}, "compiled": true, "resource_type": "test", "depends_on": {"macros": ["macro.dbt_utils.test_unique_combination_of_columns", "macro.dbt.get_where_subquery"], "nodes": ["model.tiktok_ads_source.stg_tiktok_ads__ad_report_hourly"]}, "config": {"enabled": true, "alias": "dbt_utils_unique_combination_o_e6913172297a173fb855f92cf72b08dc", "schema": "dbt_test__audit", "database": null, "tags": [], "meta": {}, "materialized": "test", "severity": "ERROR", "store_failures": null, "where": null, "limit": null, "fail_calc": "count(*)", "warn_if": "!= 0", "error_if": "!= 0"}, "database": "FIVETRAN_DBT_TESTING", "schema": "DBT_TIKTOK_ADS_dbt_test__audit", "fqn": ["tiktok_ads_source", "dbt_utils_unique_combination_of_columns_stg_tiktok_ads__ad_report_hourly_ad_id__stat_time_hour"], "unique_id": "test.tiktok_ads_source.dbt_utils_unique_combination_of_columns_stg_tiktok_ads__ad_report_hourly_ad_id__stat_time_hour.e70f8cef6d", "package_name": "tiktok_ads_source", "root_path": "/Users/renee.li/Documents/dbt/tiktok/develop/dbt_packages/tiktok_ads_source", "path": "dbt_utils_unique_combination_o_e6913172297a173fb855f92cf72b08dc.sql", "original_file_path": "models/stg_tiktok_ads.yml", "name": "dbt_utils_unique_combination_of_columns_stg_tiktok_ads__ad_report_hourly_ad_id__stat_time_hour", "alias": "dbt_utils_unique_combination_o_e6913172297a173fb855f92cf72b08dc", "checksum": {"name": "none", "checksum": ""}, "tags": [], "refs": [["stg_tiktok_ads__ad_report_hourly"]], "sources": [], "description": "", "columns": {}, "meta": {}, "docs": {"show": true}, "patch_path": null, "compiled_path": "target/compiled/tiktok_ads_source/models/stg_tiktok_ads.yml/dbt_utils_unique_combination_o_e6913172297a173fb855f92cf72b08dc.sql", "build_path": null, "deferred": false, "unrendered_config": {"alias": "dbt_utils_unique_combination_o_e6913172297a173fb855f92cf72b08dc"}, "created_at": 1641494963.4022489, "compiled_sql": "\n\n\n\n\n\nwith validation_errors as (\n\n select\n ad_id, stat_time_hour\n from FIVETRAN_DBT_TESTING.DBT_TIKTOK_ADS_stg_tiktok_ads.stg_tiktok_ads__ad_report_hourly\n group by ad_id, stat_time_hour\n having count(*) > 1\n\n)\n\nselect *\nfrom validation_errors\n\n\n", "extra_ctes_injected": true, "extra_ctes": [], "relation_name": null, "column_name": null, "file_key_name": "models.stg_tiktok_ads__ad_report_hourly"}, "test.tiktok_ads_source.not_null_stg_tiktok_ads__ad_group_report_hourly_ad_group_id.8da17119f1": {"raw_sql": "{{ test_not_null(**_dbt_generic_test_kwargs) }}", "test_metadata": {"name": "not_null", "kwargs": {"column_name": "ad_group_id", "model": "{{ get_where_subquery(ref('stg_tiktok_ads__ad_group_report_hourly')) }}"}, "namespace": null}, "compiled": true, "resource_type": "test", "depends_on": {"macros": ["macro.dbt.test_not_null", "macro.dbt.get_where_subquery"], "nodes": ["model.tiktok_ads_source.stg_tiktok_ads__ad_group_report_hourly"]}, "config": {"enabled": true, "alias": null, "schema": "dbt_test__audit", "database": null, "tags": [], "meta": {}, "materialized": "test", "severity": "ERROR", "store_failures": null, "where": null, "limit": null, "fail_calc": "count(*)", "warn_if": "!= 0", "error_if": "!= 0"}, "database": "FIVETRAN_DBT_TESTING", "schema": "DBT_TIKTOK_ADS_dbt_test__audit", "fqn": ["tiktok_ads_source", "not_null_stg_tiktok_ads__ad_group_report_hourly_ad_group_id"], "unique_id": "test.tiktok_ads_source.not_null_stg_tiktok_ads__ad_group_report_hourly_ad_group_id.8da17119f1", "package_name": "tiktok_ads_source", "root_path": "/Users/renee.li/Documents/dbt/tiktok/develop/dbt_packages/tiktok_ads_source", "path": "not_null_stg_tiktok_ads__ad_group_report_hourly_ad_group_id.sql", "original_file_path": "models/stg_tiktok_ads.yml", "name": "not_null_stg_tiktok_ads__ad_group_report_hourly_ad_group_id", "alias": "not_null_stg_tiktok_ads__ad_group_report_hourly_ad_group_id", "checksum": {"name": "none", "checksum": ""}, "tags": [], "refs": [["stg_tiktok_ads__ad_group_report_hourly"]], "sources": [], "description": "", "columns": {}, "meta": {}, "docs": {"show": true}, "patch_path": null, "compiled_path": "target/compiled/tiktok_ads_source/models/stg_tiktok_ads.yml/not_null_stg_tiktok_ads__ad_group_report_hourly_ad_group_id.sql", "build_path": null, "deferred": false, "unrendered_config": {}, "created_at": 1641494963.4079082, "compiled_sql": "\n \n \n\nselect *\nfrom FIVETRAN_DBT_TESTING.DBT_TIKTOK_ADS_stg_tiktok_ads.stg_tiktok_ads__ad_group_report_hourly\nwhere ad_group_id is null\n\n\n", "extra_ctes_injected": true, "extra_ctes": [], "relation_name": null, "column_name": "ad_group_id", "file_key_name": "models.stg_tiktok_ads__ad_group_report_hourly"}, "test.tiktok_ads_source.dbt_utils_unique_combination_of_columns_stg_tiktok_ads__ad_group_report_hourly_ad_group_id__stat_time_hour.1aeaeb71ad": {"raw_sql": "{{ dbt_utils.test_unique_combination_of_columns(**_dbt_generic_test_kwargs) }}{{ config(alias=\"dbt_utils_unique_combination_o_b8146651452c0bd776f5ad7184463e60\") }}", "test_metadata": {"name": "unique_combination_of_columns", "kwargs": {"combination_of_columns": ["ad_group_id", "stat_time_hour"], "model": "{{ get_where_subquery(ref('stg_tiktok_ads__ad_group_report_hourly')) }}"}, "namespace": "dbt_utils"}, "compiled": true, "resource_type": "test", "depends_on": {"macros": ["macro.dbt_utils.test_unique_combination_of_columns", "macro.dbt.get_where_subquery"], "nodes": ["model.tiktok_ads_source.stg_tiktok_ads__ad_group_report_hourly"]}, "config": {"enabled": true, "alias": "dbt_utils_unique_combination_o_b8146651452c0bd776f5ad7184463e60", "schema": "dbt_test__audit", "database": null, "tags": [], "meta": {}, "materialized": "test", "severity": "ERROR", "store_failures": null, "where": null, "limit": null, "fail_calc": "count(*)", "warn_if": "!= 0", "error_if": "!= 0"}, "database": "FIVETRAN_DBT_TESTING", "schema": "DBT_TIKTOK_ADS_dbt_test__audit", "fqn": ["tiktok_ads_source", "dbt_utils_unique_combination_of_columns_stg_tiktok_ads__ad_group_report_hourly_ad_group_id__stat_time_hour"], "unique_id": "test.tiktok_ads_source.dbt_utils_unique_combination_of_columns_stg_tiktok_ads__ad_group_report_hourly_ad_group_id__stat_time_hour.1aeaeb71ad", "package_name": "tiktok_ads_source", "root_path": "/Users/renee.li/Documents/dbt/tiktok/develop/dbt_packages/tiktok_ads_source", "path": "dbt_utils_unique_combination_o_b8146651452c0bd776f5ad7184463e60.sql", "original_file_path": "models/stg_tiktok_ads.yml", "name": "dbt_utils_unique_combination_of_columns_stg_tiktok_ads__ad_group_report_hourly_ad_group_id__stat_time_hour", "alias": "dbt_utils_unique_combination_o_b8146651452c0bd776f5ad7184463e60", "checksum": {"name": "none", "checksum": ""}, "tags": [], "refs": [["stg_tiktok_ads__ad_group_report_hourly"]], "sources": [], "description": "", "columns": {}, "meta": {}, "docs": {"show": true}, "patch_path": null, "compiled_path": "target/compiled/tiktok_ads_source/models/stg_tiktok_ads.yml/dbt_utils_unique_combination_o_b8146651452c0bd776f5ad7184463e60.sql", "build_path": null, "deferred": false, "unrendered_config": {"alias": "dbt_utils_unique_combination_o_b8146651452c0bd776f5ad7184463e60"}, "created_at": 1641494963.410182, "compiled_sql": "\n\n\n\n\n\nwith validation_errors as (\n\n select\n ad_group_id, stat_time_hour\n from FIVETRAN_DBT_TESTING.DBT_TIKTOK_ADS_stg_tiktok_ads.stg_tiktok_ads__ad_group_report_hourly\n group by ad_group_id, stat_time_hour\n having count(*) > 1\n\n)\n\nselect *\nfrom validation_errors\n\n\n", "extra_ctes_injected": true, "extra_ctes": [], "relation_name": null, "column_name": null, "file_key_name": "models.stg_tiktok_ads__ad_group_report_hourly"}, "test.tiktok_ads_source.not_null_stg_tiktok_ads__campaign_report_hourly_campaign_id.ef898379fb": {"raw_sql": "{{ test_not_null(**_dbt_generic_test_kwargs) }}", "test_metadata": {"name": "not_null", "kwargs": {"column_name": "campaign_id", "model": "{{ get_where_subquery(ref('stg_tiktok_ads__campaign_report_hourly')) }}"}, "namespace": null}, "compiled": true, "resource_type": "test", "depends_on": {"macros": ["macro.dbt.test_not_null", "macro.dbt.get_where_subquery"], "nodes": ["model.tiktok_ads_source.stg_tiktok_ads__campaign_report_hourly"]}, "config": {"enabled": true, "alias": null, "schema": "dbt_test__audit", "database": null, "tags": [], "meta": {}, "materialized": "test", "severity": "ERROR", "store_failures": null, "where": null, "limit": null, "fail_calc": "count(*)", "warn_if": "!= 0", "error_if": "!= 0"}, "database": "FIVETRAN_DBT_TESTING", "schema": "DBT_TIKTOK_ADS_dbt_test__audit", "fqn": ["tiktok_ads_source", "not_null_stg_tiktok_ads__campaign_report_hourly_campaign_id"], "unique_id": "test.tiktok_ads_source.not_null_stg_tiktok_ads__campaign_report_hourly_campaign_id.ef898379fb", "package_name": "tiktok_ads_source", "root_path": "/Users/renee.li/Documents/dbt/tiktok/develop/dbt_packages/tiktok_ads_source", "path": "not_null_stg_tiktok_ads__campaign_report_hourly_campaign_id.sql", "original_file_path": "models/stg_tiktok_ads.yml", "name": "not_null_stg_tiktok_ads__campaign_report_hourly_campaign_id", "alias": "not_null_stg_tiktok_ads__campaign_report_hourly_campaign_id", "checksum": {"name": "none", "checksum": ""}, "tags": [], "refs": [["stg_tiktok_ads__campaign_report_hourly"]], "sources": [], "description": "", "columns": {}, "meta": {}, "docs": {"show": true}, "patch_path": null, "compiled_path": "target/compiled/tiktok_ads_source/models/stg_tiktok_ads.yml/not_null_stg_tiktok_ads__campaign_report_hourly_campaign_id.sql", "build_path": null, "deferred": false, "unrendered_config": {}, "created_at": 1641494963.415447, "compiled_sql": "\n \n \n\nselect *\nfrom FIVETRAN_DBT_TESTING.DBT_TIKTOK_ADS_stg_tiktok_ads.stg_tiktok_ads__campaign_report_hourly\nwhere campaign_id is null\n\n\n", "extra_ctes_injected": true, "extra_ctes": [], "relation_name": null, "column_name": "campaign_id", "file_key_name": "models.stg_tiktok_ads__campaign_report_hourly"}, "test.tiktok_ads_source.dbt_utils_unique_combination_of_columns_stg_tiktok_ads__campaign_report_hourly_campaign_id__stat_time_hour.8e4a1e4b34": {"raw_sql": "{{ dbt_utils.test_unique_combination_of_columns(**_dbt_generic_test_kwargs) }}{{ config(alias=\"dbt_utils_unique_combination_o_28d20c1f14a23926a21e229d68eb6b16\") }}", "test_metadata": {"name": "unique_combination_of_columns", "kwargs": {"combination_of_columns": ["campaign_id", "stat_time_hour"], "model": "{{ get_where_subquery(ref('stg_tiktok_ads__campaign_report_hourly')) }}"}, "namespace": "dbt_utils"}, "compiled": true, "resource_type": "test", "depends_on": {"macros": ["macro.dbt_utils.test_unique_combination_of_columns", "macro.dbt.get_where_subquery"], "nodes": ["model.tiktok_ads_source.stg_tiktok_ads__campaign_report_hourly"]}, "config": {"enabled": true, "alias": "dbt_utils_unique_combination_o_28d20c1f14a23926a21e229d68eb6b16", "schema": "dbt_test__audit", "database": null, "tags": [], "meta": {}, "materialized": "test", "severity": "ERROR", "store_failures": null, "where": null, "limit": null, "fail_calc": "count(*)", "warn_if": "!= 0", "error_if": "!= 0"}, "database": "FIVETRAN_DBT_TESTING", "schema": "DBT_TIKTOK_ADS_dbt_test__audit", "fqn": ["tiktok_ads_source", "dbt_utils_unique_combination_of_columns_stg_tiktok_ads__campaign_report_hourly_campaign_id__stat_time_hour"], "unique_id": "test.tiktok_ads_source.dbt_utils_unique_combination_of_columns_stg_tiktok_ads__campaign_report_hourly_campaign_id__stat_time_hour.8e4a1e4b34", "package_name": "tiktok_ads_source", "root_path": "/Users/renee.li/Documents/dbt/tiktok/develop/dbt_packages/tiktok_ads_source", "path": "dbt_utils_unique_combination_o_28d20c1f14a23926a21e229d68eb6b16.sql", "original_file_path": "models/stg_tiktok_ads.yml", "name": "dbt_utils_unique_combination_of_columns_stg_tiktok_ads__campaign_report_hourly_campaign_id__stat_time_hour", "alias": "dbt_utils_unique_combination_o_28d20c1f14a23926a21e229d68eb6b16", "checksum": {"name": "none", "checksum": ""}, "tags": [], "refs": [["stg_tiktok_ads__campaign_report_hourly"]], "sources": [], "description": "", "columns": {}, "meta": {}, "docs": {"show": true}, "patch_path": null, "compiled_path": "target/compiled/tiktok_ads_source/models/stg_tiktok_ads.yml/dbt_utils_unique_combination_o_28d20c1f14a23926a21e229d68eb6b16.sql", "build_path": null, "deferred": false, "unrendered_config": {"alias": "dbt_utils_unique_combination_o_28d20c1f14a23926a21e229d68eb6b16"}, "created_at": 1641494963.417697, "compiled_sql": "\n\n\n\n\n\nwith validation_errors as (\n\n select\n campaign_id, stat_time_hour\n from FIVETRAN_DBT_TESTING.DBT_TIKTOK_ADS_stg_tiktok_ads.stg_tiktok_ads__campaign_report_hourly\n group by campaign_id, stat_time_hour\n having count(*) > 1\n\n)\n\nselect *\nfrom validation_errors\n\n\n", "extra_ctes_injected": true, "extra_ctes": [], "relation_name": null, "column_name": null, "file_key_name": "models.stg_tiktok_ads__campaign_report_hourly"}}, "sources": {"source.tiktok_ads_source.tiktok_ads.advertiser": {"fqn": ["tiktok_ads_source", "tiktok_ads", "advertiser"], "database": "MB_TIKTOK_ADS", "schema": "TIKTOK_ADS", "unique_id": "source.tiktok_ads_source.tiktok_ads.advertiser", "package_name": "tiktok_ads_source", "root_path": "/Users/renee.li/Documents/dbt/tiktok/develop/dbt_packages/tiktok_ads_source", "path": "models/src_tiktok_ads.yml", "original_file_path": "models/src_tiktok_ads.yml", "name": "advertiser", "source_name": "tiktok_ads", "source_description": "", "loader": "fivetran", "identifier": "advertiser", "resource_type": "source", "quoting": {"database": null, "schema": null, "identifier": null, "column": null}, "loaded_at_field": "_fivetran_synced", "freshness": {"warn_after": {"count": null, "period": null}, "error_after": {"count": null, "period": null}, "filter": null}, "external": null, "description": "Each record represents data for one advertiser.", "columns": {"id": {"name": "id", "description": "Advertiser ID", "meta": {}, "data_type": null, "quote": null, "tags": []}, "address": {"name": "address", "description": "Advertiser address information", "meta": {}, "data_type": null, "quote": null, "tags": []}, "balance": {"name": "balance", "description": "Account available balance", "meta": {}, "data_type": null, "quote": null, "tags": []}, "company": {"name": "company", "description": "Advertiser's company name", "meta": {}, "data_type": null, "quote": null, "tags": []}, "contacter": {"name": "contacter", "description": "Contact Person", "meta": {}, "data_type": null, "quote": null, "tags": []}, "country": {"name": "country", "description": "The advertiser's country", "meta": {}, "data_type": null, "quote": null, "tags": []}, "create_time": {"name": "create_time", "description": "Advertiser's create time", "meta": {}, "data_type": null, "quote": null, "tags": []}, "currency": {"name": "currency", "description": "Type of currency used by advertisers", "meta": {}, "data_type": null, "quote": null, "tags": []}, "description": {"name": "description", "description": "Brand description, i.e. promotional content", "meta": {}, "data_type": null, "quote": null, "tags": []}, "email": {"name": "email", "description": "Advertiser contact email, desensitised data", "meta": {}, "data_type": null, "quote": null, "tags": []}, "industry": {"name": "industry", "description": "Advertiser industry category", "meta": {}, "data_type": null, "quote": null, "tags": []}, "language": {"name": "language", "description": "Language used by advertisers", "meta": {}, "data_type": null, "quote": null, "tags": []}, "license_no": {"name": "license_no", "description": "License number", "meta": {}, "data_type": null, "quote": null, "tags": []}, "license_url": {"name": "license_url", "description": "License preview address, the link is valid for an hour by default.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "name": {"name": "name", "description": "Advertiser name", "meta": {}, "data_type": null, "quote": null, "tags": []}, "phone_number": {"name": "phone_number", "description": "Contact mobile number, desensitised data", "meta": {}, "data_type": null, "quote": null, "tags": []}, "promotion_area": {"name": "promotion_area", "description": "Operation area", "meta": {}, "data_type": null, "quote": null, "tags": []}, "reason": {"name": "reason", "description": "Reason for rejection", "meta": {}, "data_type": null, "quote": null, "tags": []}, "role": {"name": "role", "description": "Advertiser role", "meta": {}, "data_type": null, "quote": null, "tags": []}, "status": {"name": "status", "description": "Advertiser status", "meta": {}, "data_type": null, "quote": null, "tags": []}, "telephone": {"name": "telephone", "description": "Fixed phone number, desensitised data", "meta": {}, "data_type": null, "quote": null, "tags": []}, "timezone": {"name": "timezone", "description": "Ad account time zone including GMT offset", "meta": {}, "data_type": null, "quote": null, "tags": []}, "_fivetran_synced": {"name": "_fivetran_synced", "description": "Timestamp of when Fivetran synced a record.", "meta": {}, "data_type": null, "quote": null, "tags": []}}, "meta": {}, "source_meta": {}, "tags": [], "config": {"enabled": true}, "patch_path": null, "unrendered_config": {}, "relation_name": "MB_TIKTOK_ADS.TIKTOK_ADS.advertiser", "created_at": 1641494963.4221592}, "source.tiktok_ads_source.tiktok_ads.campaign_history": {"fqn": ["tiktok_ads_source", "tiktok_ads", "campaign_history"], "database": "MB_TIKTOK_ADS", "schema": "TIKTOK_ADS", "unique_id": "source.tiktok_ads_source.tiktok_ads.campaign_history", "package_name": "tiktok_ads_source", "root_path": "/Users/renee.li/Documents/dbt/tiktok/develop/dbt_packages/tiktok_ads_source", "path": "models/src_tiktok_ads.yml", "original_file_path": "models/src_tiktok_ads.yml", "name": "campaign_history", "source_name": "tiktok_ads", "source_description": "", "loader": "fivetran", "identifier": "campaign_history", "resource_type": "source", "quoting": {"database": null, "schema": null, "identifier": null, "column": null}, "loaded_at_field": "_fivetran_synced", "freshness": {"warn_after": {"count": null, "period": null}, "error_after": {"count": null, "period": null}, "filter": null}, "external": null, "description": "Each record represents a version of a TikTok campaign.", "columns": {"campaign_id": {"name": "campaign_id", "description": "Campaign ID", "meta": {}, "data_type": null, "quote": null, "tags": []}, "updated_at": {"name": "updated_at", "description": "Time the record was updated.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "advertiser_id": {"name": "advertiser_id", "description": "Advertiser ID", "meta": {}, "data_type": null, "quote": null, "tags": []}, "budget": {"name": "budget", "description": "Campaign budget", "meta": {}, "data_type": null, "quote": null, "tags": []}, "budget_mode": {"name": "budget_mode", "description": "Budget type", "meta": {}, "data_type": null, "quote": null, "tags": []}, "campaign_name": {"name": "campaign_name", "description": "Campaign name", "meta": {}, "data_type": null, "quote": null, "tags": []}, "campaign_type": {"name": "campaign_type", "description": "Campaign Type, indicates the campaign is a regular campaign or iOS 14 campaign.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "create_time": {"name": "create_time", "description": "Time at which the campaign was created.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "is_new_structure": {"name": "is_new_structure", "description": "Whether the campaign is a new structure (for the same campaign, the structure of campaign, adgroups and ads are the same)", "meta": {}, "data_type": null, "quote": null, "tags": []}, "objective_type": {"name": "objective_type", "description": "Advertising objective.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "opt_status": {"name": "opt_status", "description": "Operation status.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "status": {"name": "status", "description": "Campaign status", "meta": {}, "data_type": null, "quote": null, "tags": []}, "split_test_variable": {"name": "split_test_variable", "description": "Split Test variables. Optional values; TARGETING, BIDDING_OPTIMIZATION , CREATIVE.", "meta": {}, "data_type": null, "quote": null, "tags": []}}, "meta": {}, "source_meta": {}, "tags": [], "config": {"enabled": true}, "patch_path": null, "unrendered_config": {}, "relation_name": "MB_TIKTOK_ADS.TIKTOK_ADS.campaign_history", "created_at": 1641494963.422365}, "source.tiktok_ads_source.tiktok_ads.adgroup_history": {"fqn": ["tiktok_ads_source", "tiktok_ads", "adgroup_history"], "database": "MB_TIKTOK_ADS", "schema": "TIKTOK_ADS", "unique_id": "source.tiktok_ads_source.tiktok_ads.adgroup_history", "package_name": "tiktok_ads_source", "root_path": "/Users/renee.li/Documents/dbt/tiktok/develop/dbt_packages/tiktok_ads_source", "path": "models/src_tiktok_ads.yml", "original_file_path": "models/src_tiktok_ads.yml", "name": "adgroup_history", "source_name": "tiktok_ads", "source_description": "", "loader": "fivetran", "identifier": "adgroup_history", "resource_type": "source", "quoting": {"database": null, "schema": null, "identifier": null, "column": null}, "loaded_at_field": "_fivetran_synced", "freshness": {"warn_after": {"count": null, "period": null}, "error_after": {"count": null, "period": null}, "filter": null}, "external": null, "description": "Each record represents a version of a TikTok ad group.", "columns": {"adgroup_id": {"name": "adgroup_id", "description": "Ad group ID", "meta": {}, "data_type": null, "quote": null, "tags": []}, "updated_at": {"name": "updated_at", "description": "Time the record was updated.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "advertiser_id": {"name": "advertiser_id", "description": "Advertiser ID", "meta": {}, "data_type": null, "quote": null, "tags": []}, "campaign_id": {"name": "campaign_id", "description": "The Ad group's campaign ID.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "action_categories": {"name": "action_categories", "description": "IDs of the action categories (behaviors) that you want to target.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "action_days": {"name": "action_days", "description": "The number of days of the time period to include action from.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "adgroup_name": {"name": "adgroup_name", "description": "Ad group name. Character limit is 512 and cannot contain emoji.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "age": {"name": "age", "description": "Age groups you want to target.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "android_osv": {"name": "android_osv", "description": "Minimum Android version.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "app_download_url": {"name": "app_download_url", "description": "App download link", "meta": {}, "data_type": null, "quote": null, "tags": []}, "app_id": {"name": "app_id", "description": "The Application id of the promoted app", "meta": {}, "data_type": null, "quote": null, "tags": []}, "app_name": {"name": "app_name", "description": "App name.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "app_type": {"name": "app_type", "description": "App type.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "audience": {"name": "audience", "description": "A list of audience IDs.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "audience_type": {"name": "audience_type", "description": "Audience Type", "meta": {}, "data_type": null, "quote": null, "tags": []}, "bid": {"name": "bid", "description": "CPC, CPM bidding, oCPM learning bidding", "meta": {}, "data_type": null, "quote": null, "tags": []}, "bid_type": {"name": "bid_type", "description": "Bidding Strategy", "meta": {}, "data_type": null, "quote": null, "tags": []}, "billing_event": {"name": "billing_event", "description": "Bid method.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "budget": {"name": "budget", "description": "Ad budget. Returns 0.0 when Campaign Budget Optimization (budget_optimize_switch) is on.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "budget_mode": {"name": "budget_mode", "description": "Budget mode. This field will be ignored when Campaign Budget Optimization (budget_optimize_switch) is enabled.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "carriers": {"name": "carriers", "description": "Carriers that you want to target.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "category": {"name": "category", "description": "Ad group category.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "click_tracking_url": {"name": "click_tracking_url", "description": "Click monitoring URL.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "connection_type": {"name": "connection_type", "description": "Device connection types that you want to target. Default; unlimited.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "conversion_bid": {"name": "conversion_bid", "description": "oCPM conversion bid", "meta": {}, "data_type": null, "quote": null, "tags": []}, "cpv_video_duration": {"name": "cpv_video_duration", "description": "Video playback duration, required if optimize_goal is VIDEO_VIEW. Allowed values; SIX_SECONDS (video playback 6s), TWO_SECONDS (video playback 2s)\n", "meta": {}, "data_type": null, "quote": null, "tags": []}, "creative_material_mode": {"name": "creative_material_mode", "description": "Creative delivery mode.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "dayparting": {"name": "dayparting", "description": "Ad delivery period, the default is always and the format is 48 * 7 character string, represented by 0 or 1. > That is, with half an hour as the minimum granularity, a day (24 hours) is divided by the minimum granularity(30 mins) from Monday to Sunday. Resulting in a 48*7 format.0 represents not to be delivered, 1 represents delivery. no transmission, full transmission 0, full transmission 1 all represent full time delivery", "meta": {}, "data_type": null, "quote": null, "tags": []}, "deep_bid_type": {"name": "deep_bid_type", "description": "Bidding strategy for in-app events.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "deep_cpabid": {"name": "deep_cpabid", "description": "Deep bid", "meta": {}, "data_type": null, "quote": null, "tags": []}, "deep_external_action": {"name": "deep_external_action", "description": "Deep conversion event.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "display_name": {"name": "display_name", "description": "Display name of ad group.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "enable_inventory_filter": {"name": "enable_inventory_filter", "description": "Inventory filtering (Unsafe videos will not be displayed).", "meta": {}, "data_type": null, "quote": null, "tags": []}, "excluded_audience": {"name": "excluded_audience", "description": "A list of audience ID to be excluded.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "external_action": {"name": "external_action", "description": "Conversion event for the ad group. It is required when the promoted object is an app with tracking urls, or when pixel_id is specified.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "fallback_type": {"name": "fallback_type", "description": "Fallback Type. If the audience do not have the app installed, you can have them fall back to install the app, or to view a specific web page. Not applicable for Deferred Deeplink. Allowed values; APP_INSTALL, WEBSITE, UNSET. If website is chosen, you need to specify the url via landing_page_url field.\n", "meta": {}, "data_type": null, "quote": null, "tags": []}, "frequency": {"name": "frequency", "description": "frequency, together with frequency_schedule, controls how often people see your ad (only available for REACH ads). For example, frequency = 2 frequency_schedule = 3 means \"show ads no more than twice every 3 day\".\n", "meta": {}, "data_type": null, "quote": null, "tags": []}, "frequency_schedule": {"name": "frequency_schedule", "description": "frequency, together with frequency, controls how often people see your ad (only available for REACH ads).", "meta": {}, "data_type": null, "quote": null, "tags": []}, "gender": {"name": "gender", "description": "Gender that you want to target.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "impression_tracking_url": {"name": "impression_tracking_url", "description": "Display monitoring URL.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "interest_category_v2": {"name": "interest_category_v2", "description": "Interest classification. If the interest is specified, users that do not meet interest target will be excluded during delivery.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "ios_osv": {"name": "ios_osv", "description": "Minimum iOS version.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "is_comment_disable": {"name": "is_comment_disable", "description": "Whether to allow comments on your ads on TikTok, Vigo, Helo.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "is_hfss": {"name": "is_hfss", "description": "Whether the promoted content is HFSS foods (foods that are high in fat, salt, or sugar).", "meta": {}, "data_type": null, "quote": null, "tags": []}, "is_new_structure": {"name": "is_new_structure", "description": "Whether the campaign is a new structure.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "keywords": {"name": "keywords", "description": "Keywords used.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "landing_page_url": {"name": "landing_page_url", "description": "Landing page URL.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "languages": {"name": "languages", "description": "Codes of the languages that you want to target.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "location": {"name": "location", "description": "IDs of the locations that you want to target.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "open_url": {"name": "open_url", "description": "The specific location where you want your audience to go if they have your app installed.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "open_url_type": {"name": "open_url_type", "description": "The open URL type.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "operation_system": {"name": "operation_system", "description": "Device operating systems that you want to target.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "opt_status": {"name": "opt_status", "description": "Operation status.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "optimize_goal": {"name": "optimize_goal", "description": "Optimization goal.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "pacing": {"name": "pacing", "description": "You can choose between PACING_MODE_SMOOTH and PACING_MODE_FAST. For PACING_MODE_SMOOTH, the budget is allocated evenly within the scheduled time. PACING_MODE_FAST would consume budget and produce results as soon as possible. \n", "meta": {}, "data_type": null, "quote": null, "tags": []}, "package": {"name": "package", "description": "Package name.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "pangle_block_app_list_id": {"name": "pangle_block_app_list_id", "description": "Pangle app block list ID.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "pixel_id": {"name": "pixel_id", "description": "Pixel ID. Only application for landing pages.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "placement": {"name": "placement", "description": "The apps where you want to deliver your ads.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "placement_type": {"name": "placement_type", "description": "Placement type.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "profile_image": {"name": "profile_image", "description": "Avatar URL.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "schedule_end_time": {"name": "schedule_end_time", "description": "Ad delivery end time (UTC+0). Format should be YYYY-MM-DD HH:MM:SS", "meta": {}, "data_type": null, "quote": null, "tags": []}, "schedule_start_time": {"name": "schedule_start_time", "description": "Ad delivery start time (UTC+0). Format should be YYYY-MM-DD HH:MM:SS", "meta": {}, "data_type": null, "quote": null, "tags": []}, "schedule_type": {"name": "schedule_type", "description": "The schedule type, which can be either SCHEDULE_START_END or SCHEDULE_FROM_NOW.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "skip_learning_phase": {"name": "skip_learning_phase", "description": "Whether to skip the learning stage.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "statistic_type": {"name": "statistic_type", "description": "conversion bid statistic type", "meta": {}, "data_type": null, "quote": null, "tags": []}, "status": {"name": "status", "description": "Ad group status", "meta": {}, "data_type": null, "quote": null, "tags": []}, "video_actions": {"name": "video_actions", "description": "Number of video actions.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "video_download": {"name": "video_download", "description": "Whether users can download your video ads on TikTok(cannot be updated once created).", "meta": {}, "data_type": null, "quote": null, "tags": []}}, "meta": {}, "source_meta": {}, "tags": [], "config": {"enabled": true}, "patch_path": null, "unrendered_config": {}, "relation_name": "MB_TIKTOK_ADS.TIKTOK_ADS.adgroup_history", "created_at": 1641494963.422668}, "source.tiktok_ads_source.tiktok_ads.ad_history": {"fqn": ["tiktok_ads_source", "tiktok_ads", "ad_history"], "database": "MB_TIKTOK_ADS", "schema": "TIKTOK_ADS", "unique_id": "source.tiktok_ads_source.tiktok_ads.ad_history", "package_name": "tiktok_ads_source", "root_path": "/Users/renee.li/Documents/dbt/tiktok/develop/dbt_packages/tiktok_ads_source", "path": "models/src_tiktok_ads.yml", "original_file_path": "models/src_tiktok_ads.yml", "name": "ad_history", "source_name": "tiktok_ads", "source_description": "", "loader": "fivetran", "identifier": "ad_history", "resource_type": "source", "quoting": {"database": null, "schema": null, "identifier": null, "column": null}, "loaded_at_field": "_fivetran_synced", "freshness": {"warn_after": {"count": null, "period": null}, "error_after": {"count": null, "period": null}, "filter": null}, "external": null, "description": "Each record represents a version of a TikTok ad.", "columns": {"ad_id": {"name": "ad_id", "description": "Ad ID", "meta": {}, "data_type": null, "quote": null, "tags": []}, "updated_at": {"name": "updated_at", "description": "Time the record was updated.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "adgroup_id": {"name": "adgroup_id", "description": "Ad group ID", "meta": {}, "data_type": null, "quote": null, "tags": []}, "advertiser_id": {"name": "advertiser_id", "description": "Advertiser ID", "meta": {}, "data_type": null, "quote": null, "tags": []}, "campaign_id": {"name": "campaign_id", "description": "Campaign ID", "meta": {}, "data_type": null, "quote": null, "tags": []}, "ad_name": {"name": "ad_name", "description": "Ad Name.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "ad_text": {"name": "ad_text", "description": "The ad text.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "app_name": {"name": "app_name", "description": "The display name of app download ad.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "call_to_action": {"name": "call_to_action", "description": "Call to action values.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "click_tracking_url": {"name": "click_tracking_url", "description": "Click monitoring URL.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "create_time": {"name": "create_time", "description": "Time at which the ad was created.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "display_name": {"name": "display_name", "description": "The display name of landing page or pure exposure ad.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "image_ids": {"name": "image_ids", "description": "A list of image IDs.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "impression_tracking_url": {"name": "impression_tracking_url", "description": "Display monitoring URL.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "is_aco": {"name": "is_aco", "description": "Whether the ad is an automated ad.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "is_creative_authorized": {"name": "is_creative_authorized", "description": "Whether you grant displaying some of your ads in our TikTok For Business Creative Center. Only valid for non-US advertisers, the default value is false.\n", "meta": {}, "data_type": null, "quote": null, "tags": []}, "is_new_structure": {"name": "is_new_structure", "description": "Whether the campaign is a new structure.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "landing_page_url": {"name": "landing_page_url", "description": "Landing page URL.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "open_url": {"name": "open_url", "description": "The specific location where you want your audience to go if they have your app installed.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "opt_status": {"name": "opt_status", "description": "Operation status.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "playable_url": {"name": "playable_url", "description": "Playable material url.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "profile_image": {"name": "profile_image", "description": "Avatar URL.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "status": {"name": "status", "description": "Ad status.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "video_id": {"name": "video_id", "description": "The video ID.", "meta": {}, "data_type": null, "quote": null, "tags": []}}, "meta": {}, "source_meta": {}, "tags": [], "config": {"enabled": true}, "patch_path": null, "unrendered_config": {}, "relation_name": "MB_TIKTOK_ADS.TIKTOK_ADS.ad_history", "created_at": 1641494963.422879}, "source.tiktok_ads_source.tiktok_ads.ad_report_hourly": {"fqn": ["tiktok_ads_source", "tiktok_ads", "ad_report_hourly"], "database": "MB_TIKTOK_ADS", "schema": "TIKTOK_ADS", "unique_id": "source.tiktok_ads_source.tiktok_ads.ad_report_hourly", "package_name": "tiktok_ads_source", "root_path": "/Users/renee.li/Documents/dbt/tiktok/develop/dbt_packages/tiktok_ads_source", "path": "models/src_tiktok_ads.yml", "original_file_path": "models/src_tiktok_ads.yml", "name": "ad_report_hourly", "source_name": "tiktok_ads", "source_description": "", "loader": "fivetran", "identifier": "ad_report_hourly", "resource_type": "source", "quoting": {"database": null, "schema": null, "identifier": null, "column": null}, "loaded_at_field": "_fivetran_synced", "freshness": {"warn_after": {"count": null, "period": null}, "error_after": {"count": null, "period": null}, "filter": null}, "external": null, "description": "Each record represents data for each ad for each hour.", "columns": {"ad_id": {"name": "ad_id", "description": "Ad id", "meta": {}, "data_type": null, "quote": null, "tags": []}, "stat_time_hour": {"name": "stat_time_hour", "description": "Hour of activity", "meta": {}, "data_type": null, "quote": null, "tags": []}, "cost_per_conversion": {"name": "cost_per_conversion", "description": "The average amount of money you've spent on a conversion. (The total count is calculated based on the time each ad impression occurred.)\n", "meta": {}, "data_type": null, "quote": null, "tags": []}, "real_time_conversion": {"name": "real_time_conversion", "description": "The number of times your ad achieved an outcome, based on the objective and settings you selected. (The total count is based on when the conversion actually happened.)\n", "meta": {}, "data_type": null, "quote": null, "tags": []}, "cpc": {"name": "cpc", "description": "The average amount of money you've spent on a click.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "video_play_actions": {"name": "video_play_actions", "description": "The number of times your video starts to play. Replays will not be counted.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "conversion_rate": {"name": "conversion_rate", "description": "The percentage of results you received out of all the clicks of your ads. (The total count is calculated based on the time each ad impression occurred.)\n", "meta": {}, "data_type": null, "quote": null, "tags": []}, "video_views_p_75": {"name": "video_views_p_75", "description": "The number of times your video was played at 75% of its length. Replays will not be counted.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "result": {"name": "result", "description": "The number of times your ad achieved an outcome, based on the optimization goal you selected. As one campaign may have a number of different optimization goals, this statistic is not supported for campaigns. Please go to ad groups or ads to view the results. (The total count is calculated based on the time each ad impression occurred.)\n", "meta": {}, "data_type": null, "quote": null, "tags": []}, "video_views_p_50": {"name": "video_views_p_50", "description": "The number of times your video was played at 50% of its length. Replays will not be counted.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "impressions": {"name": "impressions", "description": "The number of times your ads were on screen.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "comments": {"name": "comments", "description": "The number of comments your video creative received within 1 day of a user seeing a paid ad.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "real_time_cost_per_result": {"name": "real_time_cost_per_result", "description": "As a campaign may have different optimization goals, the total number of result is not supported in campaign section now, please go to the ad group section to view the cost per Result. (The total count is based on when the conversion actually happened.)\n", "meta": {}, "data_type": null, "quote": null, "tags": []}, "conversion": {"name": "conversion", "description": "The number of times your ad achieved an outcome, based on the secondary goal you selected. As one campaign may have a number of different secondary goals, this statistic is not supported for campaigns. Please go to ad groups or ads to view. (The total count is calculated based on the time each ad impression occurred.)\n", "meta": {}, "data_type": null, "quote": null, "tags": []}, "real_time_result": {"name": "real_time_result", "description": "The number of times your ad achieved an outcome, based on the optimization goal you selected. As a campaign may have different optimization goals, the total number of result is not supported in campaign section now , Please go to the ad group section to view the result. (The total count is based on when the conversion actually happened.)\n", "meta": {}, "data_type": null, "quote": null, "tags": []}, "video_view_p_100": {"name": "video_view_p_100", "description": "The number of times your video was played at 100% of its length. Replays will not be counted.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "shares": {"name": "shares", "description": "The number of shares your video creative received within 1 day of a user seeing a paid ad.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "real_time_conversion_rate": {"name": "real_time_conversion_rate", "description": "The percentage of results you received out of all the clicks of your ads. (The total count is based on when the conversion actually happened.)", "meta": {}, "data_type": null, "quote": null, "tags": []}, "cost_per_secondary_goal_result": {"name": "cost_per_secondary_goal_result", "description": "The average cost for each secondary goal result from your adverts. As one campaign may have a number of different secondary goals, this statistic is not supported for campaigns. Please go to ad groups or ads to view. (The total count is calculated based on the time each ad impression occurred.)\n", "meta": {}, "data_type": null, "quote": null, "tags": []}, "secondary_goal_result_rate": {"name": "secondary_goal_result_rate", "description": "The percentage of secondary goal results you achieved out of all of the installs of your adverts. As one campaign may have a number of different secondary goals, this statistic is not supported for campaigns. Please go to ad groups or ads to view. The total count is calculated based on the time each ad impression occurred.\n", "meta": {}, "data_type": null, "quote": null, "tags": []}, "clicks": {"name": "clicks", "description": "The number of clicks on your ads.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "cost_per_1000_reached": {"name": "cost_per_1000_reached", "description": "The average cost to reach 1,000 unique users. This metric is estimated.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "video_views_p_25": {"name": "video_views_p_25", "description": "The number of times your video was played at 25% of its length. Replays will not be counted.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "reach": {"name": "reach", "description": "The number of unique users who saw your ads at least once. This metric is estimated.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "real_time_cost_per_conversion": {"name": "real_time_cost_per_conversion", "description": "The average amount of money you've spent on a conversion. (The total count is based on when the conversion actually happened.)", "meta": {}, "data_type": null, "quote": null, "tags": []}, "profile_visits_rate": {"name": "profile_visits_rate", "description": "The rate of profile visits per impression the paid ad drove during the campaign. This metric is only for Boosted TikToks.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "average_video_play": {"name": "average_video_play", "description": "The average time your video was played per single video view, including any time spent replaying the video.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "profile_visits": {"name": "profile_visits", "description": "The number of profile visits the ad drove during the campaign. This metric is only for Boosted TikToks.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "cpm": {"name": "cpm", "description": "The average amount of money you've spent per 1,000 impressions.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "ctr": {"name": "ctr", "description": "The percentage of times people saw your ad and performed a click.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "video_watched_2_s": {"name": "video_watched_2_s", "description": "The number of times your video played for at least 2 seconds. Replays will not be counted.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "follows": {"name": "follows", "description": "The number of new followers that were gained within 1 day of a user seeing a paid ad. This metric is only for Boosted TikToks.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "result_rate": {"name": "result_rate", "description": "The percentage of results you achieved out of all of the views/clicks on your ads. As one campaign may have a number of different optimization goals, this statistic is not supported for campaigns. Please go to ad groups or ads to view the result rate. (The total count is calculated based on the time each ad impression occurred.)\n", "meta": {}, "data_type": null, "quote": null, "tags": []}, "video_watched_6_s": {"name": "video_watched_6_s", "description": "The number of times your video played for at least 6 seconds, or completely played. Replays will not be counted.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "secondary_goal_result": {"name": "secondary_goal_result", "description": "The number of times your ad achieved an outcome, based on the secondary goal you selected. As one campaign may have a number of different secondary goals, this statistic is not supported for campaigns. Please go to ad groups or ads to view. (The total count is calculated based on the time each ad impression occurred.)\n", "meta": {}, "data_type": null, "quote": null, "tags": []}, "cost_per_result": {"name": "cost_per_result", "description": "The average cost for each result from your ads. As one campaign may have a number of different optimization goals, this statistic is not supported for campaigns. Please go to ad groups or ads to view the cost per result. (The total count is calculated based on the time each ad impression occurred.)\n", "meta": {}, "data_type": null, "quote": null, "tags": []}, "average_video_play_per_user": {"name": "average_video_play_per_user", "description": "The average time your video was played per person, including any time spent replaying the video. This metric is estimated.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "real_time_result_rate": {"name": "real_time_result_rate", "description": "As a campaign may have different optimization goals, the total number of result is not supported in campaign section now ,Please go to the ad group section to view the Result Rate. (The total count is based on when the conversion actually happened.)", "meta": {}, "data_type": null, "quote": null, "tags": []}, "spend": {"name": "spend", "description": "The estimated total amount of money you've spent on your campaign, ad group or ad during its schedule.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "likes": {"name": "likes", "description": "The number of likes your video creative received within 1 day of a user seeing a paid ad.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "_fivetran_synced": {"name": "_fivetran_synced", "description": "Timestamp of when Fivetran synced a record.", "meta": {}, "data_type": null, "quote": null, "tags": []}}, "meta": {}, "source_meta": {}, "tags": [], "config": {"enabled": true}, "patch_path": null, "unrendered_config": {}, "relation_name": "MB_TIKTOK_ADS.TIKTOK_ADS.ad_report_hourly", "created_at": 1641494963.423119}, "source.tiktok_ads_source.tiktok_ads.campaign_report_hourly": {"fqn": ["tiktok_ads_source", "tiktok_ads", "campaign_report_hourly"], "database": "MB_TIKTOK_ADS", "schema": "TIKTOK_ADS", "unique_id": "source.tiktok_ads_source.tiktok_ads.campaign_report_hourly", "package_name": "tiktok_ads_source", "root_path": "/Users/renee.li/Documents/dbt/tiktok/develop/dbt_packages/tiktok_ads_source", "path": "models/src_tiktok_ads.yml", "original_file_path": "models/src_tiktok_ads.yml", "name": "campaign_report_hourly", "source_name": "tiktok_ads", "source_description": "", "loader": "fivetran", "identifier": "campaign_report_hourly", "resource_type": "source", "quoting": {"database": null, "schema": null, "identifier": null, "column": null}, "loaded_at_field": "_fivetran_synced", "freshness": {"warn_after": {"count": null, "period": null}, "error_after": {"count": null, "period": null}, "filter": null}, "external": null, "description": "Each record represents data for each campaign for each hour.", "columns": {"campaign_id": {"name": "campaign_id", "description": "Campaign id", "meta": {}, "data_type": null, "quote": null, "tags": []}, "stat_time_hour": {"name": "stat_time_hour", "description": "Hour of activity", "meta": {}, "data_type": null, "quote": null, "tags": []}, "cost_per_conversion": {"name": "cost_per_conversion", "description": "The average amount of money you've spent on a conversion. (The total count is calculated based on the time each ad impression occurred.)\n", "meta": {}, "data_type": null, "quote": null, "tags": []}, "real_time_conversion": {"name": "real_time_conversion", "description": "The number of times your ad achieved an outcome, based on the objective and settings you selected. (The total count is based on when the conversion actually happened.)\n", "meta": {}, "data_type": null, "quote": null, "tags": []}, "cpc": {"name": "cpc", "description": "The average amount of money you've spent on a click.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "video_play_actions": {"name": "video_play_actions", "description": "The number of times your video starts to play. Replays will not be counted.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "conversion_rate": {"name": "conversion_rate", "description": "The percentage of results you received out of all the clicks of your ads. (The total count is calculated based on the time each ad impression occurred.)\n", "meta": {}, "data_type": null, "quote": null, "tags": []}, "video_views_p_75": {"name": "video_views_p_75", "description": "The number of times your video was played at 75% of its length. Replays will not be counted.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "result": {"name": "result", "description": "The number of times your ad achieved an outcome, based on the optimization goal \n you selected. As one campaign may have a number of different optimization goals, \nthis statistic is not supported for campaigns. Please go to ad groups or ads to view the results. (The total count is calculated based on the time each ad impression occurred.)\n", "meta": {}, "data_type": null, "quote": null, "tags": []}, "video_views_p_50": {"name": "video_views_p_50", "description": "The number of times your video was played at 50% of its length. Replays will not be counted.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "impressions": {"name": "impressions", "description": "The number of times your ads were on screen.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "comments": {"name": "comments", "description": "The number of comments your video creative received within 1 day of a user seeing a paid ad.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "real_time_cost_per_result": {"name": "real_time_cost_per_result", "description": "As a campaign may have different optimization goals, the total number of result is not supported in campaign section now, please go to the ad group section to view the cost per Result. (The total count is based on when the conversion actually happened.)\n", "meta": {}, "data_type": null, "quote": null, "tags": []}, "conversion": {"name": "conversion", "description": "The number of times your ad achieved an outcome, based on the secondary goal you selected. As one campaign may have a number of different secondary goals, this statistic is not supported for campaigns. Please go to ad groups or ads to view. (The total count is calculated based on the time each ad impression occurred.)\n", "meta": {}, "data_type": null, "quote": null, "tags": []}, "real_time_result": {"name": "real_time_result", "description": "The number of times your ad achieved an outcome, based on the optimization goal you selected. As a campaign may have different optimization goals, the total number of result is not supported in campaign section now , Please go to the ad group section to view the result. (The total count is based on when the conversion actually happened.)\n", "meta": {}, "data_type": null, "quote": null, "tags": []}, "video_view_p_100": {"name": "video_view_p_100", "description": "The number of times your video was played at 100% of its length. Replays will not be counted.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "shares": {"name": "shares", "description": "The number of shares your video creative received within 1 day of a user seeing a paid ad.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "real_time_conversion_rate": {"name": "real_time_conversion_rate", "description": "The percentage of results you received out of all the clicks of your ads. (The total count is based on when the conversion actually happened.)", "meta": {}, "data_type": null, "quote": null, "tags": []}, "cost_per_secondary_goal_result": {"name": "cost_per_secondary_goal_result", "description": "The average cost for each secondary goal result from your adverts. As one campaign may have a number of different secondary goals, this statistic is not supported for campaigns. Please go to ad groups or ads to view. (The total count is calculated based on the time each ad impression occurred.)\n", "meta": {}, "data_type": null, "quote": null, "tags": []}, "secondary_goal_result_rate": {"name": "secondary_goal_result_rate", "description": "The percentage of secondary goal results you achieved out of all of the installs of your adverts. As one campaign may have a number of different secondary goals, this statistic is not supported for campaigns. Please go to ad groups or ads to view. The total count is calculated based on the time each ad impression occurred.\n", "meta": {}, "data_type": null, "quote": null, "tags": []}, "clicks": {"name": "clicks", "description": "The number of clicks on your ads.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "cost_per_1000_reached": {"name": "cost_per_1000_reached", "description": "The average cost to reach 1,000 unique users. This metric is estimated.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "video_views_p_25": {"name": "video_views_p_25", "description": "The number of times your video was played at 25% of its length. Replays will not be counted.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "reach": {"name": "reach", "description": "The number of unique users who saw your ads at least once. This metric is estimated.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "real_time_cost_per_conversion": {"name": "real_time_cost_per_conversion", "description": "The average amount of money you've spent on a conversion. (The total count is based on when the conversion actually happened.)", "meta": {}, "data_type": null, "quote": null, "tags": []}, "profile_visits_rate": {"name": "profile_visits_rate", "description": "The rate of profile visits per impression the paid ad drove during the campaign. This metric is only for Boosted TikToks.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "average_video_play": {"name": "average_video_play", "description": "The average time your video was played per single video view, including any time spent replaying the video.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "profile_visits": {"name": "profile_visits", "description": "The number of profile visits the ad drove during the campaign. This metric is only for Boosted TikToks.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "cpm": {"name": "cpm", "description": "The average amount of money you've spent per 1,000 impressions.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "ctr": {"name": "ctr", "description": "The percentage of times people saw your ad and performed a click.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "video_watched_2_s": {"name": "video_watched_2_s", "description": "The number of times your video played for at least 2 seconds. Replays will not be counted.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "follows": {"name": "follows", "description": "The number of new followers that were gained within 1 day of a user seeing a paid ad. This metric is only for Boosted TikToks.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "result_rate": {"name": "result_rate", "description": "The percentage of results you achieved out of all of the views/clicks on your ads. As one campaign may have a number of different optimization goals, this statistic is not supported for campaigns. Please go to ad groups or ads to view the result rate. (The total count is calculated based on the time each ad impression occurred.)\n", "meta": {}, "data_type": null, "quote": null, "tags": []}, "video_watched_6_s": {"name": "video_watched_6_s", "description": "The number of times your video played for at least 6 seconds, or completely played. Replays will not be counted.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "secondary_goal_result": {"name": "secondary_goal_result", "description": "The number of times your ad achieved an outcome, based on the secondary goal you selected. As one campaign may have a number of different secondary goals, this statistic is not supported for campaigns. Please go to ad groups or ads to view. (The total count is calculated based on the time each ad impression occurred.)\n", "meta": {}, "data_type": null, "quote": null, "tags": []}, "cost_per_result": {"name": "cost_per_result", "description": "The average cost for each result from your ads. As one campaign may have a number of different optimization goals, this statistic is not supported for campaigns. Please go to ad groups or ads to view the cost per result. (The total count is calculated based on the time each ad impression occurred.)\n", "meta": {}, "data_type": null, "quote": null, "tags": []}, "average_video_play_per_user": {"name": "average_video_play_per_user", "description": "The average time your video was played per person, including any time spent replaying the video. This metric is estimated.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "real_time_result_rate": {"name": "real_time_result_rate", "description": "As a campaign may have different optimization goals, the total number of result is not supported in campaign section now ,Please go to the ad group section to view the Result Rate. (The total count is based on when the conversion actually happened.)\n", "meta": {}, "data_type": null, "quote": null, "tags": []}, "spend": {"name": "spend", "description": "The estimated total amount of money you've spent on your campaign, ad group or ad during its schedule.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "likes": {"name": "likes", "description": "The number of likes your video creative received within 1 day of a user seeing a paid ad.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "_fivetran_synced": {"name": "_fivetran_synced", "description": "Timestamp of when Fivetran synced a record.", "meta": {}, "data_type": null, "quote": null, "tags": []}}, "meta": {}, "source_meta": {}, "tags": [], "config": {"enabled": true}, "patch_path": null, "unrendered_config": {}, "relation_name": "MB_TIKTOK_ADS.TIKTOK_ADS.campaign_report_hourly", "created_at": 1641494963.4233558}, "source.tiktok_ads_source.tiktok_ads.adgroup_report_hourly": {"fqn": ["tiktok_ads_source", "tiktok_ads", "adgroup_report_hourly"], "database": "MB_TIKTOK_ADS", "schema": "TIKTOK_ADS", "unique_id": "source.tiktok_ads_source.tiktok_ads.adgroup_report_hourly", "package_name": "tiktok_ads_source", "root_path": "/Users/renee.li/Documents/dbt/tiktok/develop/dbt_packages/tiktok_ads_source", "path": "models/src_tiktok_ads.yml", "original_file_path": "models/src_tiktok_ads.yml", "name": "adgroup_report_hourly", "source_name": "tiktok_ads", "source_description": "", "loader": "fivetran", "identifier": "adgroup_report_hourly", "resource_type": "source", "quoting": {"database": null, "schema": null, "identifier": null, "column": null}, "loaded_at_field": "_fivetran_synced", "freshness": {"warn_after": {"count": null, "period": null}, "error_after": {"count": null, "period": null}, "filter": null}, "external": null, "description": "Each record represents data for each ad group for each hour.", "columns": {"adgroup_id": {"name": "adgroup_id", "description": "Ad group id", "meta": {}, "data_type": null, "quote": null, "tags": []}, "stat_time_hour": {"name": "stat_time_hour", "description": "Hour of activity", "meta": {}, "data_type": null, "quote": null, "tags": []}, "cost_per_conversion": {"name": "cost_per_conversion", "description": "The average amount of money you've spent on a conversion. (The total count is calculated based on the time each ad impression occurred.)\n", "meta": {}, "data_type": null, "quote": null, "tags": []}, "real_time_conversion": {"name": "real_time_conversion", "description": "The number of times your ad achieved an outcome, based on the objective and settings you selected. (The total count is based on when the conversion actually happened.)\n", "meta": {}, "data_type": null, "quote": null, "tags": []}, "cpc": {"name": "cpc", "description": "The average amount of money you've spent on a click.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "video_play_actions": {"name": "video_play_actions", "description": "The number of times your video starts to play. Replays will not be counted.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "conversion_rate": {"name": "conversion_rate", "description": "The percentage of results you received out of all the clicks of your ads. (The total count is calculated based on the time each ad impression occurred.)", "meta": {}, "data_type": null, "quote": null, "tags": []}, "video_views_p_75": {"name": "video_views_p_75", "description": "The number of times your video was played at 75% of its length. Replays will not be counted.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "result": {"name": "result", "description": "The number of times your ad achieved an outcome, based on the optimization goal you selected. As one campaign may have a number of different optimization goals, this statistic is not supported for campaigns. Please go to ad groups or ads to view the results. (The total count is calculated based on the time each ad impression occurred.)\n", "meta": {}, "data_type": null, "quote": null, "tags": []}, "video_views_p_50": {"name": "video_views_p_50", "description": "The number of times your video was played at 50% of its length. Replays will not be counted.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "impressions": {"name": "impressions", "description": "The number of times your ads were on screen.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "comments": {"name": "comments", "description": "The number of comments your video creative received within 1 day of a user seeing a paid ad.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "real_time_cost_per_result": {"name": "real_time_cost_per_result", "description": "As a campaign may have different optimization goals, the total number of result is not supported in campaign section now, please go to the ad group section to view the cost per Result. (The total count is based on when the conversion actually happened.)\n", "meta": {}, "data_type": null, "quote": null, "tags": []}, "conversion": {"name": "conversion", "description": "The number of times your ad achieved an outcome, based on the secondary goal you selected. As one campaign may have a number of different secondary goals, this statistic is not supported for campaigns. Please go to ad groups or ads to view. (The total count is calculated based on the time each ad impression occurred.)\n", "meta": {}, "data_type": null, "quote": null, "tags": []}, "real_time_result": {"name": "real_time_result", "description": "The number of times your ad achieved an outcome, based on the optimization goal you selected. As a campaign may have different optimization goals, the total number of result is not supported in campaign section now , Please go to the ad group section to view the result. (The total count is based on when the conversion actually happened.)\n", "meta": {}, "data_type": null, "quote": null, "tags": []}, "video_view_p_100": {"name": "video_view_p_100", "description": "The number of times your video was played at 100% of its length. Replays will not be counted.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "shares": {"name": "shares", "description": "The number of shares your video creative received within 1 day of a user seeing a paid ad.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "real_time_conversion_rate": {"name": "real_time_conversion_rate", "description": "The percentage of results you received out of all the clicks of your ads. (The total count is based on when the conversion actually happened.)", "meta": {}, "data_type": null, "quote": null, "tags": []}, "cost_per_secondary_goal_result": {"name": "cost_per_secondary_goal_result", "description": "The average cost for each secondary goal result from your adverts. As one campaign may have a number of different secondary goals, this statistic is not supported for campaigns. Please go to ad groups or ads to view. (The total count is calculated based on the time each ad impression occurred.)\n", "meta": {}, "data_type": null, "quote": null, "tags": []}, "secondary_goal_result_rate": {"name": "secondary_goal_result_rate", "description": "The percentage of secondary goal results you achieved out of all of the installs of your adverts. As one campaign may have a number of different secondary goals, this statistic is not supported for campaigns. Please go to ad groups or ads to view. The total count is calculated based on the time each ad impression occurred.\n", "meta": {}, "data_type": null, "quote": null, "tags": []}, "clicks": {"name": "clicks", "description": "The number of clicks on your ads.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "cost_per_1000_reached": {"name": "cost_per_1000_reached", "description": "The average cost to reach 1,000 unique users. This metric is estimated.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "video_views_p_25": {"name": "video_views_p_25", "description": "The number of times your video was played at 25% of its length. Replays will not be counted.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "reach": {"name": "reach", "description": "The number of unique users who saw your ads at least once. This metric is estimated.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "real_time_cost_per_conversion": {"name": "real_time_cost_per_conversion", "description": "The average amount of money you've spent on a conversion. (The total count is based on when the conversion actually happened.)", "meta": {}, "data_type": null, "quote": null, "tags": []}, "profile_visits_rate": {"name": "profile_visits_rate", "description": "The rate of profile visits per impression the paid ad drove during the campaign. This metric is only for Boosted TikToks.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "average_video_play": {"name": "average_video_play", "description": "The average time your video was played per single video view, including any time spent replaying the video.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "profile_visits": {"name": "profile_visits", "description": "The number of profile visits the ad drove during the campaign. This metric is only for Boosted TikToks.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "cpm": {"name": "cpm", "description": "The average amount of money you've spent per 1,000 impressions.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "ctr": {"name": "ctr", "description": "The percentage of times people saw your ad and performed a click.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "video_watched_2_s": {"name": "video_watched_2_s", "description": "The number of times your video played for at least 2 seconds. Replays will not be counted.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "follows": {"name": "follows", "description": "The number of new followers that were gained within 1 day of a user seeing a paid ad. This metric is only for Boosted TikToks.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "result_rate": {"name": "result_rate", "description": "The percentage of results you achieved out of all of the views/clicks on your ads. As one campaign may have a number of different optimization goals, this statistic is not supported for campaigns. Please go to ad groups or ads to view the result rate. (The total count is calculated based on the time each ad impression occurred.)\n", "meta": {}, "data_type": null, "quote": null, "tags": []}, "video_watched_6_s": {"name": "video_watched_6_s", "description": "The number of times your video played for at least 6 seconds, or completely played. Replays will not be counted.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "secondary_goal_result": {"name": "secondary_goal_result", "description": "The number of times your ad achieved an outcome, based on the secondary goal you selected. As one campaign may have a number of different secondary goals, this statistic is not supported for campaigns. Please go to ad groups or ads to view. (The total count is calculated based on the time each ad impression occurred.)\n", "meta": {}, "data_type": null, "quote": null, "tags": []}, "cost_per_result": {"name": "cost_per_result", "description": "The average cost for each result from your ads. As one campaign may have a number of different optimization goals, this statistic is not supported for campaigns. Please go to ad groups or ads to view the cost per result. (The total count is calculated based on the time each ad impression occurred.)\n", "meta": {}, "data_type": null, "quote": null, "tags": []}, "average_video_play_per_user": {"name": "average_video_play_per_user", "description": "The average time your video was played per person, including any time spent replaying the video. This metric is estimated.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "real_time_result_rate": {"name": "real_time_result_rate", "description": "As a campaign may have different optimization goals, the total number of result is not supported in campaign section now ,Please go to the ad group section to view the Result Rate. (The total count is based on when the conversion actually happened.)\n", "meta": {}, "data_type": null, "quote": null, "tags": []}, "spend": {"name": "spend", "description": "The estimated total amount of money you've spent on your campaign, ad group or ad during its schedule.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "likes": {"name": "likes", "description": "The number of likes your video creative received within 1 day of a user seeing a paid ad.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "_fivetran_synced": {"name": "_fivetran_synced", "description": "Timestamp of when Fivetran synced a record.", "meta": {}, "data_type": null, "quote": null, "tags": []}}, "meta": {}, "source_meta": {}, "tags": [], "config": {"enabled": true}, "patch_path": null, "unrendered_config": {}, "relation_name": "MB_TIKTOK_ADS.TIKTOK_ADS.adgroup_report_hourly", "created_at": 1641494963.423848}}, "macros": {"macro.dbt_snowflake.snowflake__get_catalog": {"unique_id": "macro.dbt_snowflake.snowflake__get_catalog", "package_name": "dbt_snowflake", "root_path": "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages/dbt/include/snowflake", "path": "macros/catalog.sql", "original_file_path": "macros/catalog.sql", "name": "snowflake__get_catalog", "macro_sql": "{% macro snowflake__get_catalog(information_schema, schemas) -%}\n {% set query %}\n with tables as (\n\n select\n table_catalog as \"table_database\",\n table_schema as \"table_schema\",\n table_name as \"table_name\",\n table_type as \"table_type\",\n comment as \"table_comment\",\n\n -- note: this is the _role_ that owns the table\n table_owner as \"table_owner\",\n\n 'Clustering Key' as \"stats:clustering_key:label\",\n clustering_key as \"stats:clustering_key:value\",\n 'The key used to cluster this table' as \"stats:clustering_key:description\",\n (clustering_key is not null) as \"stats:clustering_key:include\",\n\n 'Row Count' as \"stats:row_count:label\",\n row_count as \"stats:row_count:value\",\n 'An approximate count of rows in this table' as \"stats:row_count:description\",\n (row_count is not null) as \"stats:row_count:include\",\n\n 'Approximate Size' as \"stats:bytes:label\",\n bytes as \"stats:bytes:value\",\n 'Approximate size of the table as reported by Snowflake' as \"stats:bytes:description\",\n (bytes is not null) as \"stats:bytes:include\",\n\n 'Last Modified' as \"stats:last_modified:label\",\n to_varchar(convert_timezone('UTC', last_altered), 'yyyy-mm-dd HH24:MI'||'UTC') as \"stats:last_modified:value\",\n 'The timestamp for last update/change' as \"stats:last_modified:description\",\n (last_altered is not null and table_type='BASE TABLE') as \"stats:last_modified:include\"\n\n from {{ information_schema }}.tables\n\n ),\n\n columns as (\n\n select\n table_catalog as \"table_database\",\n table_schema as \"table_schema\",\n table_name as \"table_name\",\n\n column_name as \"column_name\",\n ordinal_position as \"column_index\",\n data_type as \"column_type\",\n comment as \"column_comment\"\n\n from {{ information_schema }}.columns\n )\n\n select *\n from tables\n join columns using (\"table_database\", \"table_schema\", \"table_name\")\n where (\n {%- for schema in schemas -%}\n upper(\"table_schema\") = upper('{{ schema }}'){%- if not loop.last %} or {% endif -%}\n {%- endfor -%}\n )\n order by \"column_index\"\n {%- endset -%}\n\n {{ return(run_query(query)) }}\n\n{%- endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.dbt.run_query"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1641494961.58659}, "macro.dbt_snowflake.snowflake__create_table_as": {"unique_id": "macro.dbt_snowflake.snowflake__create_table_as", "package_name": "dbt_snowflake", "root_path": "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages/dbt/include/snowflake", "path": "macros/adapters.sql", "original_file_path": "macros/adapters.sql", "name": "snowflake__create_table_as", "macro_sql": "{% macro snowflake__create_table_as(temporary, relation, sql) -%}\n {%- set transient = config.get('transient', default=true) -%}\n {%- set cluster_by_keys = config.get('cluster_by', default=none) -%}\n {%- set enable_automatic_clustering = config.get('automatic_clustering', default=false) -%}\n {%- set copy_grants = config.get('copy_grants', default=false) -%}\n\n {%- if cluster_by_keys is not none and cluster_by_keys is string -%}\n {%- set cluster_by_keys = [cluster_by_keys] -%}\n {%- endif -%}\n {%- if cluster_by_keys is not none -%}\n {%- set cluster_by_string = cluster_by_keys|join(\", \")-%}\n {% else %}\n {%- set cluster_by_string = none -%}\n {%- endif -%}\n {%- set sql_header = config.get('sql_header', none) -%}\n\n {{ sql_header if sql_header is not none }}\n\n create or replace {% if temporary -%}\n temporary\n {%- elif transient -%}\n transient\n {%- endif %} table {{ relation }} {% if copy_grants and not temporary -%} copy grants {%- endif %} as\n (\n {%- if cluster_by_string is not none -%}\n select * from(\n {{ sql }}\n ) order by ({{ cluster_by_string }})\n {%- else -%}\n {{ sql }}\n {%- endif %}\n );\n {% if cluster_by_string is not none and not temporary -%}\n alter table {{relation}} cluster by ({{cluster_by_string}});\n {%- endif -%}\n {% if enable_automatic_clustering and cluster_by_string is not none and not temporary -%}\n alter table {{relation}} resume recluster;\n {%- endif -%}\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1641494961.6116202}, "macro.dbt_snowflake.get_column_comment_sql": {"unique_id": "macro.dbt_snowflake.get_column_comment_sql", "package_name": "dbt_snowflake", "root_path": "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages/dbt/include/snowflake", "path": "macros/adapters.sql", "original_file_path": "macros/adapters.sql", "name": "get_column_comment_sql", "macro_sql": "{% macro get_column_comment_sql(column_name, column_dict) %}\n {{ adapter.quote(column_name) if column_dict[column_name]['quote'] else column_name }} COMMENT $${{ column_dict[column_name]['description'] | replace('$', '[$]') }}$$\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1641494961.612534}, "macro.dbt_snowflake.get_persist_docs_column_list": {"unique_id": "macro.dbt_snowflake.get_persist_docs_column_list", "package_name": "dbt_snowflake", "root_path": "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages/dbt/include/snowflake", "path": "macros/adapters.sql", "original_file_path": "macros/adapters.sql", "name": "get_persist_docs_column_list", "macro_sql": "{% macro get_persist_docs_column_list(model_columns, query_columns) %}\n(\n {% for column_name in query_columns %}\n {% if (column_name|upper in model_columns) or (column_name in model_columns) %}\n {{ get_column_comment_sql(column_name, model_columns) }}\n {% else %}\n {{column_name}}\n {% endif %}\n {{ \", \" if not loop.last else \"\" }}\n {% endfor %}\n)\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.dbt_snowflake.get_column_comment_sql"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1641494961.613724}, "macro.dbt_snowflake.snowflake__create_view_as": {"unique_id": "macro.dbt_snowflake.snowflake__create_view_as", "package_name": "dbt_snowflake", "root_path": "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages/dbt/include/snowflake", "path": "macros/adapters.sql", "original_file_path": "macros/adapters.sql", "name": "snowflake__create_view_as", "macro_sql": "{% macro snowflake__create_view_as(relation, sql) -%}\n {%- set secure = config.get('secure', default=false) -%}\n {%- set copy_grants = config.get('copy_grants', default=false) -%}\n {%- set sql_header = config.get('sql_header', none) -%}\n\n {{ sql_header if sql_header is not none }}\n create or replace {% if secure -%}\n secure\n {%- endif %} view {{ relation }} \n {% if config.persist_column_docs() -%}\n {% set model_columns = model.columns %}\n {% set query_columns = get_columns_in_query(sql) %}\n {{ get_persist_docs_column_list(model_columns, query_columns) }}\n \n {%- endif %}\n {% if copy_grants -%} copy grants {%- endif %} as (\n {{ sql }}\n );\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.dbt.get_columns_in_query", "macro.dbt_snowflake.get_persist_docs_column_list"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1641494961.615744}, "macro.dbt_snowflake.snowflake__get_columns_in_relation": {"unique_id": "macro.dbt_snowflake.snowflake__get_columns_in_relation", "package_name": "dbt_snowflake", "root_path": "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages/dbt/include/snowflake", "path": "macros/adapters.sql", "original_file_path": "macros/adapters.sql", "name": "snowflake__get_columns_in_relation", "macro_sql": "{% macro snowflake__get_columns_in_relation(relation) -%}\n {%- set sql -%}\n describe table {{ relation }}\n {%- endset -%}\n {%- set result = run_query(sql) -%}\n\n {% set maximum = 10000 %}\n {% if (result | length) >= maximum %}\n {% set msg %}\n Too many columns in relation {{ relation }}! dbt can only get\n information about relations with fewer than {{ maximum }} columns.\n {% endset %}\n {% do exceptions.raise_compiler_error(msg) %}\n {% endif %}\n\n {% set columns = [] %}\n {% for row in result %}\n {% do columns.append(api.Column.from_description(row['name'], row['type'])) %}\n {% endfor %}\n {% do return(columns) %}\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.dbt.run_query"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1641494961.617829}, "macro.dbt_snowflake.snowflake__list_schemas": {"unique_id": "macro.dbt_snowflake.snowflake__list_schemas", "package_name": "dbt_snowflake", "root_path": "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages/dbt/include/snowflake", "path": "macros/adapters.sql", "original_file_path": "macros/adapters.sql", "name": "snowflake__list_schemas", "macro_sql": "{% macro snowflake__list_schemas(database) -%}\n {# 10k limit from here: https://docs.snowflake.net/manuals/sql-reference/sql/show-schemas.html#usage-notes #}\n {% set maximum = 10000 %}\n {% set sql -%}\n show terse schemas in database {{ database }}\n limit {{ maximum }}\n {%- endset %}\n {% set result = run_query(sql) %}\n {% if (result | length) >= maximum %}\n {% set msg %}\n Too many schemas in database {{ database }}! dbt can only get\n information about databases with fewer than {{ maximum }} schemas.\n {% endset %}\n {% do exceptions.raise_compiler_error(msg) %}\n {% endif %}\n {{ return(result) }}\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.dbt.run_query"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1641494961.619324}, "macro.dbt_snowflake.snowflake__list_relations_without_caching": {"unique_id": "macro.dbt_snowflake.snowflake__list_relations_without_caching", "package_name": "dbt_snowflake", "root_path": "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages/dbt/include/snowflake", "path": "macros/adapters.sql", "original_file_path": "macros/adapters.sql", "name": "snowflake__list_relations_without_caching", "macro_sql": "{% macro snowflake__list_relations_without_caching(schema_relation) %}\n {%- set sql -%}\n show terse objects in {{ schema_relation }}\n {%- endset -%}\n\n {%- set result = run_query(sql) -%}\n {% set maximum = 10000 %}\n {% if (result | length) >= maximum %}\n {% set msg %}\n Too many schemas in schema {{ schema_relation }}! dbt can only get\n information about schemas with fewer than {{ maximum }} objects.\n {% endset %}\n {% do exceptions.raise_compiler_error(msg) %}\n {% endif %}\n {%- do return(result) -%}\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.dbt.run_query"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1641494961.620693}, "macro.dbt_snowflake.snowflake__check_schema_exists": {"unique_id": "macro.dbt_snowflake.snowflake__check_schema_exists", "package_name": "dbt_snowflake", "root_path": "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages/dbt/include/snowflake", "path": "macros/adapters.sql", "original_file_path": "macros/adapters.sql", "name": "snowflake__check_schema_exists", "macro_sql": "{% macro snowflake__check_schema_exists(information_schema, schema) -%}\n {% call statement('check_schema_exists', fetch_result=True) -%}\n select count(*)\n from {{ information_schema }}.schemata\n where upper(schema_name) = upper('{{ schema }}')\n and upper(catalog_name) = upper('{{ information_schema.database }}')\n {%- endcall %}\n {{ return(load_result('check_schema_exists').table) }}\n{%- endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.dbt.statement"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1641494961.62155}, "macro.dbt_snowflake.snowflake__current_timestamp": {"unique_id": "macro.dbt_snowflake.snowflake__current_timestamp", "package_name": "dbt_snowflake", "root_path": "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages/dbt/include/snowflake", "path": "macros/adapters.sql", "original_file_path": "macros/adapters.sql", "name": "snowflake__current_timestamp", "macro_sql": "{% macro snowflake__current_timestamp() -%}\n convert_timezone('UTC', current_timestamp())\n{%- endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1641494961.6217651}, "macro.dbt_snowflake.snowflake__snapshot_string_as_time": {"unique_id": "macro.dbt_snowflake.snowflake__snapshot_string_as_time", "package_name": "dbt_snowflake", "root_path": "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages/dbt/include/snowflake", "path": "macros/adapters.sql", "original_file_path": "macros/adapters.sql", "name": "snowflake__snapshot_string_as_time", "macro_sql": "{% macro snowflake__snapshot_string_as_time(timestamp) -%}\n {%- set result = \"to_timestamp_ntz('\" ~ timestamp ~ \"')\" -%}\n {{ return(result) }}\n{%- endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1641494961.6222432}, "macro.dbt_snowflake.snowflake__snapshot_get_time": {"unique_id": "macro.dbt_snowflake.snowflake__snapshot_get_time", "package_name": "dbt_snowflake", "root_path": "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages/dbt/include/snowflake", "path": "macros/adapters.sql", "original_file_path": "macros/adapters.sql", "name": "snowflake__snapshot_get_time", "macro_sql": "{% macro snowflake__snapshot_get_time() -%}\n to_timestamp_ntz({{ current_timestamp() }})\n{%- endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.dbt_utils.current_timestamp"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1641494961.6225321}, "macro.dbt_snowflake.snowflake__rename_relation": {"unique_id": "macro.dbt_snowflake.snowflake__rename_relation", "package_name": "dbt_snowflake", "root_path": "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages/dbt/include/snowflake", "path": "macros/adapters.sql", "original_file_path": "macros/adapters.sql", "name": "snowflake__rename_relation", "macro_sql": "{% macro snowflake__rename_relation(from_relation, to_relation) -%}\n {% call statement('rename_relation') -%}\n alter table {{ from_relation }} rename to {{ to_relation }}\n {%- endcall %}\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.dbt.statement"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1641494961.623054}, "macro.dbt_snowflake.snowflake__alter_column_type": {"unique_id": "macro.dbt_snowflake.snowflake__alter_column_type", "package_name": "dbt_snowflake", "root_path": "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages/dbt/include/snowflake", "path": "macros/adapters.sql", "original_file_path": "macros/adapters.sql", "name": "snowflake__alter_column_type", "macro_sql": "{% macro snowflake__alter_column_type(relation, column_name, new_column_type) -%}\n {% call statement('alter_column_type') %}\n alter table {{ relation }} alter {{ adapter.quote(column_name) }} set data type {{ new_column_type }};\n {% endcall %}\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.dbt.statement"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1641494961.623714}, "macro.dbt_snowflake.snowflake__alter_relation_comment": {"unique_id": "macro.dbt_snowflake.snowflake__alter_relation_comment", "package_name": "dbt_snowflake", "root_path": "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages/dbt/include/snowflake", "path": "macros/adapters.sql", "original_file_path": "macros/adapters.sql", "name": "snowflake__alter_relation_comment", "macro_sql": "{% macro snowflake__alter_relation_comment(relation, relation_comment) -%}\n comment on {{ relation.type }} {{ relation }} IS $${{ relation_comment | replace('$', '[$]') }}$$;\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1641494961.6242611}, "macro.dbt_snowflake.snowflake__alter_column_comment": {"unique_id": "macro.dbt_snowflake.snowflake__alter_column_comment", "package_name": "dbt_snowflake", "root_path": "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages/dbt/include/snowflake", "path": "macros/adapters.sql", "original_file_path": "macros/adapters.sql", "name": "snowflake__alter_column_comment", "macro_sql": "{% macro snowflake__alter_column_comment(relation, column_dict) -%}\n {% set existing_columns = adapter.get_columns_in_relation(relation) | map(attribute=\"name\") | list %}\n alter {{ relation.type }} {{ relation }} alter\n {% for column_name in column_dict if (column_name in existing_columns) or (column_name|upper in existing_columns) %}\n {{ get_column_comment_sql(column_name, column_dict) }} {{ ',' if not loop.last else ';' }}\n {% endfor %}\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.dbt_snowflake.get_column_comment_sql"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1641494961.625719}, "macro.dbt_snowflake.get_current_query_tag": {"unique_id": "macro.dbt_snowflake.get_current_query_tag", "package_name": "dbt_snowflake", "root_path": "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages/dbt/include/snowflake", "path": "macros/adapters.sql", "original_file_path": "macros/adapters.sql", "name": "get_current_query_tag", "macro_sql": "{% macro get_current_query_tag() -%}\n {{ return(run_query(\"show parameters like 'query_tag' in session\").rows[0]['value']) }}\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.dbt.run_query"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1641494961.6261928}, "macro.dbt_snowflake.set_query_tag": {"unique_id": "macro.dbt_snowflake.set_query_tag", "package_name": "dbt_snowflake", "root_path": "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages/dbt/include/snowflake", "path": "macros/adapters.sql", "original_file_path": "macros/adapters.sql", "name": "set_query_tag", "macro_sql": "{% macro set_query_tag() -%}\n {% set new_query_tag = config.get('query_tag') %}\n {% if new_query_tag %}\n {% set original_query_tag = get_current_query_tag() %}\n {{ log(\"Setting query_tag to '\" ~ new_query_tag ~ \"'. Will reset to '\" ~ original_query_tag ~ \"' after materialization.\") }}\n {% do run_query(\"alter session set query_tag = '{}'\".format(new_query_tag)) %}\n {{ return(original_query_tag)}}\n {% endif %}\n {{ return(none)}}\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.dbt_snowflake.get_current_query_tag", "macro.dbt.run_query"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1641494961.627497}, "macro.dbt_snowflake.unset_query_tag": {"unique_id": "macro.dbt_snowflake.unset_query_tag", "package_name": "dbt_snowflake", "root_path": "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages/dbt/include/snowflake", "path": "macros/adapters.sql", "original_file_path": "macros/adapters.sql", "name": "unset_query_tag", "macro_sql": "{% macro unset_query_tag(original_query_tag) -%}\n {% set new_query_tag = config.get('query_tag') %}\n {% if new_query_tag %}\n {% if original_query_tag %}\n {{ log(\"Resetting query_tag to '\" ~ original_query_tag ~ \"'.\") }}\n {% do run_query(\"alter session set query_tag = '{}'\".format(original_query_tag)) %}\n {% else %}\n {{ log(\"No original query_tag, unsetting parameter.\") }}\n {% do run_query(\"alter session unset query_tag\") %}\n {% endif %}\n {% endif %}\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.dbt.run_query"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1641494961.6288068}, "macro.dbt_snowflake.snowflake__alter_relation_add_remove_columns": {"unique_id": "macro.dbt_snowflake.snowflake__alter_relation_add_remove_columns", "package_name": "dbt_snowflake", "root_path": "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages/dbt/include/snowflake", "path": "macros/adapters.sql", "original_file_path": "macros/adapters.sql", "name": "snowflake__alter_relation_add_remove_columns", "macro_sql": "{% macro snowflake__alter_relation_add_remove_columns(relation, add_columns, remove_columns) %}\n \n {% if add_columns %}\n \n {% set sql -%}\n alter {{ relation.type }} {{ relation }} add column\n {% for column in add_columns %}\n {{ column.name }} {{ column.data_type }}{{ ',' if not loop.last }}\n {% endfor %}\n {%- endset -%}\n\n {% do run_query(sql) %}\n\n {% endif %}\n\n {% if remove_columns %}\n \n {% set sql -%}\n alter {{ relation.type }} {{ relation }} drop column\n {% for column in remove_columns %}\n {{ column.name }}{{ ',' if not loop.last }}\n {% endfor %}\n {%- endset -%}\n \n {% do run_query(sql) %}\n \n {% endif %}\n\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.dbt.run_query"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1641494961.630784}, "macro.dbt_snowflake.snowflake_dml_explicit_transaction": {"unique_id": "macro.dbt_snowflake.snowflake_dml_explicit_transaction", "package_name": "dbt_snowflake", "root_path": "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages/dbt/include/snowflake", "path": "macros/adapters.sql", "original_file_path": "macros/adapters.sql", "name": "snowflake_dml_explicit_transaction", "macro_sql": "{% macro snowflake_dml_explicit_transaction(dml) %}\n {#\n Use this macro to wrap all INSERT, MERGE, UPDATE, DELETE, and TRUNCATE \n statements before passing them into run_query(), or calling in the 'main' statement\n of a materialization\n #}\n {% set dml_transaction -%}\n begin;\n {{ dml }};\n commit;\n {%- endset %}\n \n {% do return(dml_transaction) %}\n\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1641494961.631348}, "macro.dbt_snowflake.snowflake__truncate_relation": {"unique_id": "macro.dbt_snowflake.snowflake__truncate_relation", "package_name": "dbt_snowflake", "root_path": "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages/dbt/include/snowflake", "path": "macros/adapters.sql", "original_file_path": "macros/adapters.sql", "name": "snowflake__truncate_relation", "macro_sql": "{% macro snowflake__truncate_relation(relation) -%}\n {% set truncate_dml %}\n truncate table {{ relation }}\n {% endset %}\n {% call statement('truncate_relation') -%}\n {{ snowflake_dml_explicit_transaction(truncate_dml) }}\n {%- endcall %}\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.dbt.statement", "macro.dbt_snowflake.snowflake_dml_explicit_transaction"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1641494961.631983}, "macro.dbt_snowflake.snowflake__get_merge_sql": {"unique_id": "macro.dbt_snowflake.snowflake__get_merge_sql", "package_name": "dbt_snowflake", "root_path": "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages/dbt/include/snowflake", "path": "macros/materializations/merge.sql", "original_file_path": "macros/materializations/merge.sql", "name": "snowflake__get_merge_sql", "macro_sql": "{% macro snowflake__get_merge_sql(target, source_sql, unique_key, dest_columns, predicates) -%}\n\n {#\n Workaround for Snowflake not being happy with a merge on a constant-false predicate.\n When no unique_key is provided, this macro will do a regular insert. If a unique_key\n is provided, then this macro will do a proper merge instead.\n #}\n\n {%- set dest_cols_csv = get_quoted_csv(dest_columns | map(attribute='name')) -%}\n {%- set sql_header = config.get('sql_header', none) -%}\n\n {%- set dml -%}\n {%- if unique_key is none -%}\n\n {{ sql_header if sql_header is not none }}\n\n insert into {{ target }} ({{ dest_cols_csv }})\n (\n select {{ dest_cols_csv }}\n from {{ source_sql }}\n )\n\n {%- else -%}\n\n {{ default__get_merge_sql(target, source_sql, unique_key, dest_columns, predicates) }}\n\n {%- endif -%}\n {%- endset -%}\n \n {% do return(snowflake_dml_explicit_transaction(dml)) %}\n\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.dbt.get_quoted_csv", "macro.dbt.default__get_merge_sql", "macro.dbt_snowflake.snowflake_dml_explicit_transaction"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1641494961.634818}, "macro.dbt_snowflake.snowflake__get_delete_insert_merge_sql": {"unique_id": "macro.dbt_snowflake.snowflake__get_delete_insert_merge_sql", "package_name": "dbt_snowflake", "root_path": "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages/dbt/include/snowflake", "path": "macros/materializations/merge.sql", "original_file_path": "macros/materializations/merge.sql", "name": "snowflake__get_delete_insert_merge_sql", "macro_sql": "{% macro snowflake__get_delete_insert_merge_sql(target, source, unique_key, dest_columns) %}\n {% set dml = default__get_delete_insert_merge_sql(target, source, unique_key, dest_columns) %}\n {% do return(snowflake_dml_explicit_transaction(dml)) %}\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.dbt.default__get_delete_insert_merge_sql", "macro.dbt_snowflake.snowflake_dml_explicit_transaction"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1641494961.635539}, "macro.dbt_snowflake.snowflake__snapshot_merge_sql": {"unique_id": "macro.dbt_snowflake.snowflake__snapshot_merge_sql", "package_name": "dbt_snowflake", "root_path": "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages/dbt/include/snowflake", "path": "macros/materializations/merge.sql", "original_file_path": "macros/materializations/merge.sql", "name": "snowflake__snapshot_merge_sql", "macro_sql": "{% macro snowflake__snapshot_merge_sql(target, source, insert_cols) %}\n {% set dml = default__snapshot_merge_sql(target, source, insert_cols) %}\n {% do return(snowflake_dml_explicit_transaction(dml)) %}\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.dbt.default__snapshot_merge_sql", "macro.dbt_snowflake.snowflake_dml_explicit_transaction"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1641494961.63617}, "macro.dbt_snowflake.snowflake__load_csv_rows": {"unique_id": "macro.dbt_snowflake.snowflake__load_csv_rows", "package_name": "dbt_snowflake", "root_path": "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages/dbt/include/snowflake", "path": "macros/materializations/seed.sql", "original_file_path": "macros/materializations/seed.sql", "name": "snowflake__load_csv_rows", "macro_sql": "{% macro snowflake__load_csv_rows(model, agate_table) %}\n {% set batch_size = get_batch_size() %}\n {% set cols_sql = get_seed_column_quoted_csv(model, agate_table.column_names) %}\n {% set bindings = [] %}\n\n {% set statements = [] %}\n\n {% for chunk in agate_table.rows | batch(batch_size) %}\n {% set bindings = [] %}\n\n {% for row in chunk %}\n {% do bindings.extend(row) %}\n {% endfor %}\n\n {% set sql %}\n insert into {{ this.render() }} ({{ cols_sql }}) values\n {% for row in chunk -%}\n ({%- for column in agate_table.column_names -%}\n %s\n {%- if not loop.last%},{%- endif %}\n {%- endfor -%})\n {%- if not loop.last%},{%- endif %}\n {%- endfor %}\n {% endset %}\n\n {% do adapter.add_query('BEGIN', auto_begin=False) %}\n {% do adapter.add_query(sql, bindings=bindings, abridge_sql_log=True) %}\n {% do adapter.add_query('COMMIT', auto_begin=False) %}\n\n {% if loop.index0 == 0 %}\n {% do statements.append(sql) %}\n {% endif %}\n {% endfor %}\n\n {# Return SQL so we can render it out into the compiled files #}\n {{ return(statements[0]) }}\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.dbt.get_batch_size", "macro.dbt.get_seed_column_quoted_csv"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1641494961.640651}, "macro.dbt_snowflake.materialization_seed_snowflake": {"unique_id": "macro.dbt_snowflake.materialization_seed_snowflake", "package_name": "dbt_snowflake", "root_path": "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages/dbt/include/snowflake", "path": "macros/materializations/seed.sql", "original_file_path": "macros/materializations/seed.sql", "name": "materialization_seed_snowflake", "macro_sql": "{% materialization seed, adapter='snowflake' %}\n {% set original_query_tag = set_query_tag() %}\n\n {% set relations = materialization_seed_default() %}\n\n {% do unset_query_tag(original_query_tag) %}\n\n {{ return(relations) }}\n{% endmaterialization %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.dbt_snowflake.set_query_tag", "macro.dbt.materialization_seed_default", "macro.dbt_snowflake.unset_query_tag"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1641494961.6412811}, "macro.dbt_snowflake.materialization_view_snowflake": {"unique_id": "macro.dbt_snowflake.materialization_view_snowflake", "package_name": "dbt_snowflake", "root_path": "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages/dbt/include/snowflake", "path": "macros/materializations/view.sql", "original_file_path": "macros/materializations/view.sql", "name": "materialization_view_snowflake", "macro_sql": "{% materialization view, adapter='snowflake' -%}\n\n {% set original_query_tag = set_query_tag() %}\n {% set to_return = create_or_replace_view() %}\n\n {% set target_relation = this.incorporate(type='view') %}\n {% do persist_docs(target_relation, model, for_columns=false) %}\n\n {% do return(to_return) %}\n\n {% do unset_query_tag(original_query_tag) %}\n\n{%- endmaterialization %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.dbt_snowflake.set_query_tag", "macro.dbt.create_or_replace_view", "macro.dbt.persist_docs", "macro.dbt_snowflake.unset_query_tag"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1641494961.642517}, "macro.dbt_snowflake.materialization_table_snowflake": {"unique_id": "macro.dbt_snowflake.materialization_table_snowflake", "package_name": "dbt_snowflake", "root_path": "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages/dbt/include/snowflake", "path": "macros/materializations/table.sql", "original_file_path": "macros/materializations/table.sql", "name": "materialization_table_snowflake", "macro_sql": "{% materialization table, adapter='snowflake' %}\n\n {% set original_query_tag = set_query_tag() %}\n\n {%- set identifier = model['alias'] -%}\n\n {%- set old_relation = adapter.get_relation(database=database, schema=schema, identifier=identifier) -%}\n {%- set target_relation = api.Relation.create(identifier=identifier,\n schema=schema,\n database=database, type='table') -%}\n\n {{ run_hooks(pre_hooks) }}\n\n {#-- Drop the relation if it was a view to \"convert\" it in a table. This may lead to\n -- downtime, but it should be a relatively infrequent occurrence #}\n {% if old_relation is not none and not old_relation.is_table %}\n {{ log(\"Dropping relation \" ~ old_relation ~ \" because it is of type \" ~ old_relation.type) }}\n {{ drop_relation_if_exists(old_relation) }}\n {% endif %}\n\n --build model\n {% call statement('main') -%}\n {{ create_table_as(false, target_relation, sql) }}\n {%- endcall %}\n\n {{ run_hooks(post_hooks) }}\n\n {% do persist_docs(target_relation, model) %}\n\n {% do unset_query_tag(original_query_tag) %}\n\n {{ return({'relations': [target_relation]}) }}\n\n{% endmaterialization %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.dbt_snowflake.set_query_tag", "macro.dbt.run_hooks", "macro.dbt.drop_relation_if_exists", "macro.dbt.statement", "macro.dbt.create_table_as", "macro.dbt.persist_docs", "macro.dbt_snowflake.unset_query_tag"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1641494961.645392}, "macro.dbt_snowflake.dbt_snowflake_validate_get_incremental_strategy": {"unique_id": "macro.dbt_snowflake.dbt_snowflake_validate_get_incremental_strategy", "package_name": "dbt_snowflake", "root_path": "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages/dbt/include/snowflake", "path": "macros/materializations/incremental.sql", "original_file_path": "macros/materializations/incremental.sql", "name": "dbt_snowflake_validate_get_incremental_strategy", "macro_sql": "{% macro dbt_snowflake_validate_get_incremental_strategy(config) %}\n {#-- Find and validate the incremental strategy #}\n {%- set strategy = config.get(\"incremental_strategy\", default=\"merge\") -%}\n\n {% set invalid_strategy_msg -%}\n Invalid incremental strategy provided: {{ strategy }}\n Expected one of: 'merge', 'delete+insert'\n {%- endset %}\n {% if strategy not in ['merge', 'delete+insert'] %}\n {% do exceptions.raise_compiler_error(invalid_strategy_msg) %}\n {% endif %}\n\n {% do return(strategy) %}\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1641494961.648151}, "macro.dbt_snowflake.dbt_snowflake_get_incremental_sql": {"unique_id": "macro.dbt_snowflake.dbt_snowflake_get_incremental_sql", "package_name": "dbt_snowflake", "root_path": "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages/dbt/include/snowflake", "path": "macros/materializations/incremental.sql", "original_file_path": "macros/materializations/incremental.sql", "name": "dbt_snowflake_get_incremental_sql", "macro_sql": "{% macro dbt_snowflake_get_incremental_sql(strategy, tmp_relation, target_relation, unique_key, dest_columns) %}\n {% if strategy == 'merge' %}\n {% do return(get_merge_sql(target_relation, tmp_relation, unique_key, dest_columns)) %}\n {% elif strategy == 'delete+insert' %}\n {% do return(get_delete_insert_merge_sql(target_relation, tmp_relation, unique_key, dest_columns)) %}\n {% else %}\n {% do exceptions.raise_compiler_error('invalid strategy: ' ~ strategy) %}\n {% endif %}\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.dbt.get_merge_sql", "macro.dbt.get_delete_insert_merge_sql"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1641494961.6493068}, "macro.dbt_snowflake.materialization_incremental_snowflake": {"unique_id": "macro.dbt_snowflake.materialization_incremental_snowflake", "package_name": "dbt_snowflake", "root_path": "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages/dbt/include/snowflake", "path": "macros/materializations/incremental.sql", "original_file_path": "macros/materializations/incremental.sql", "name": "materialization_incremental_snowflake", "macro_sql": "{% materialization incremental, adapter='snowflake' -%}\n \n {% set original_query_tag = set_query_tag() %}\n\n {%- set unique_key = config.get('unique_key') -%}\n {%- set full_refresh_mode = (should_full_refresh()) -%}\n\n {% set target_relation = this %}\n {% set existing_relation = load_relation(this) %}\n {% set tmp_relation = make_temp_relation(this) %}\n\n {#-- Validate early so we don't run SQL if the strategy is invalid --#}\n {% set strategy = dbt_snowflake_validate_get_incremental_strategy(config) -%}\n {% set on_schema_change = incremental_validate_on_schema_change(config.get('on_schema_change'), default='ignore') %}\n\n {{ run_hooks(pre_hooks) }}\n\n {% if existing_relation is none %}\n {% set build_sql = create_table_as(False, target_relation, sql) %}\n \n {% elif existing_relation.is_view %}\n {#-- Can't overwrite a view with a table - we must drop --#}\n {{ log(\"Dropping relation \" ~ target_relation ~ \" because it is a view and this model is a table.\") }}\n {% do adapter.drop_relation(existing_relation) %}\n {% set build_sql = create_table_as(False, target_relation, sql) %}\n \n {% elif full_refresh_mode %}\n {% set build_sql = create_table_as(False, target_relation, sql) %}\n \n {% else %}\n {% do run_query(create_table_as(True, tmp_relation, sql)) %}\n {% do adapter.expand_target_column_types(\n from_relation=tmp_relation,\n to_relation=target_relation) %}\n {#-- Process schema changes. Returns dict of changes if successful. Use source columns for upserting/merging --#}\n {% set dest_columns = process_schema_changes(on_schema_change, tmp_relation, existing_relation) %}\n {% if not dest_columns %}\n {% set dest_columns = adapter.get_columns_in_relation(existing_relation) %}\n {% endif %}\n {% set build_sql = dbt_snowflake_get_incremental_sql(strategy, tmp_relation, target_relation, unique_key, dest_columns) %}\n \n {% endif %}\n\n {%- call statement('main') -%}\n {{ build_sql }}\n {%- endcall -%}\n\n {{ run_hooks(post_hooks) }}\n\n {% set target_relation = target_relation.incorporate(type='table') %}\n {% do persist_docs(target_relation, model) %}\n\n {% do unset_query_tag(original_query_tag) %}\n\n {{ return({'relations': [target_relation]}) }}\n\n{%- endmaterialization %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.dbt_snowflake.set_query_tag", "macro.dbt.should_full_refresh", "macro.dbt.load_relation", "macro.dbt.make_temp_relation", "macro.dbt_snowflake.dbt_snowflake_validate_get_incremental_strategy", "macro.dbt.incremental_validate_on_schema_change", "macro.dbt.run_hooks", "macro.dbt.create_table_as", "macro.dbt.run_query", "macro.dbt.process_schema_changes", "macro.dbt_snowflake.dbt_snowflake_get_incremental_sql", "macro.dbt.statement", "macro.dbt.persist_docs", "macro.dbt_snowflake.unset_query_tag"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1641494961.6537652}, "macro.dbt_snowflake.materialization_snapshot_snowflake": {"unique_id": "macro.dbt_snowflake.materialization_snapshot_snowflake", "package_name": "dbt_snowflake", "root_path": "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages/dbt/include/snowflake", "path": "macros/materializations/snapshot.sql", "original_file_path": "macros/materializations/snapshot.sql", "name": "materialization_snapshot_snowflake", "macro_sql": "{% materialization snapshot, adapter='snowflake' %}\n {% set original_query_tag = set_query_tag() %}\n\n {% set relations = materialization_snapshot_default() %}\n\n {% do unset_query_tag(original_query_tag) %}\n\n {{ return(relations) }}\n{% endmaterialization %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.dbt_snowflake.set_query_tag", "macro.dbt.materialization_snapshot_default", "macro.dbt_snowflake.unset_query_tag"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1641494961.654649}, "macro.dbt.run_hooks": {"unique_id": "macro.dbt.run_hooks", "package_name": "dbt", "root_path": "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages/dbt/include/global_project", "path": "macros/materializations/hooks.sql", "original_file_path": "macros/materializations/hooks.sql", "name": "run_hooks", "macro_sql": "{% macro run_hooks(hooks, inside_transaction=True) %}\n {% for hook in hooks | selectattr('transaction', 'equalto', inside_transaction) %}\n {% if not inside_transaction and loop.first %}\n {% call statement(auto_begin=inside_transaction) %}\n commit;\n {% endcall %}\n {% endif %}\n {% set rendered = render(hook.get('sql')) | trim %}\n {% if (rendered | length) > 0 %}\n {% call statement(auto_begin=inside_transaction) %}\n {{ rendered }}\n {% endcall %}\n {% endif %}\n {% endfor %}\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.dbt.statement"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1641494961.656986}, "macro.dbt.make_hook_config": {"unique_id": "macro.dbt.make_hook_config", "package_name": "dbt", "root_path": "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages/dbt/include/global_project", "path": "macros/materializations/hooks.sql", "original_file_path": "macros/materializations/hooks.sql", "name": "make_hook_config", "macro_sql": "{% macro make_hook_config(sql, inside_transaction) %}\n {{ tojson({\"sql\": sql, \"transaction\": inside_transaction}) }}\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1641494961.657418}, "macro.dbt.before_begin": {"unique_id": "macro.dbt.before_begin", "package_name": "dbt", "root_path": "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages/dbt/include/global_project", "path": "macros/materializations/hooks.sql", "original_file_path": "macros/materializations/hooks.sql", "name": "before_begin", "macro_sql": "{% macro before_begin(sql) %}\n {{ make_hook_config(sql, inside_transaction=False) }}\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.dbt.make_hook_config"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1641494961.657734}, "macro.dbt.in_transaction": {"unique_id": "macro.dbt.in_transaction", "package_name": "dbt", "root_path": "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages/dbt/include/global_project", "path": "macros/materializations/hooks.sql", "original_file_path": "macros/materializations/hooks.sql", "name": "in_transaction", "macro_sql": "{% macro in_transaction(sql) %}\n {{ make_hook_config(sql, inside_transaction=True) }}\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.dbt.make_hook_config"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1641494961.658048}, "macro.dbt.after_commit": {"unique_id": "macro.dbt.after_commit", "package_name": "dbt", "root_path": "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages/dbt/include/global_project", "path": "macros/materializations/hooks.sql", "original_file_path": "macros/materializations/hooks.sql", "name": "after_commit", "macro_sql": "{% macro after_commit(sql) %}\n {{ make_hook_config(sql, inside_transaction=False) }}\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.dbt.make_hook_config"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1641494961.65836}, "macro.dbt.set_sql_header": {"unique_id": "macro.dbt.set_sql_header", "package_name": "dbt", "root_path": "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages/dbt/include/global_project", "path": "macros/materializations/configs.sql", "original_file_path": "macros/materializations/configs.sql", "name": "set_sql_header", "macro_sql": "{% macro set_sql_header(config) -%}\n {{ config.set('sql_header', caller()) }}\n{%- endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1641494961.6591702}, "macro.dbt.should_full_refresh": {"unique_id": "macro.dbt.should_full_refresh", "package_name": "dbt", "root_path": "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages/dbt/include/global_project", "path": "macros/materializations/configs.sql", "original_file_path": "macros/materializations/configs.sql", "name": "should_full_refresh", "macro_sql": "{% macro should_full_refresh() %}\n {% set config_full_refresh = config.get('full_refresh') %}\n {% if config_full_refresh is none %}\n {% set config_full_refresh = flags.FULL_REFRESH %}\n {% endif %}\n {% do return(config_full_refresh) %}\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1641494961.659935}, "macro.dbt.should_store_failures": {"unique_id": "macro.dbt.should_store_failures", "package_name": "dbt", "root_path": "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages/dbt/include/global_project", "path": "macros/materializations/configs.sql", "original_file_path": "macros/materializations/configs.sql", "name": "should_store_failures", "macro_sql": "{% macro should_store_failures() %}\n {% set config_store_failures = config.get('store_failures') %}\n {% if config_store_failures is none %}\n {% set config_store_failures = flags.STORE_FAILURES %}\n {% endif %}\n {% do return(config_store_failures) %}\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1641494961.6606}, "macro.dbt.snapshot_merge_sql": {"unique_id": "macro.dbt.snapshot_merge_sql", "package_name": "dbt", "root_path": "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages/dbt/include/global_project", "path": "macros/materializations/snapshots/snapshot_merge.sql", "original_file_path": "macros/materializations/snapshots/snapshot_merge.sql", "name": "snapshot_merge_sql", "macro_sql": "{% macro snapshot_merge_sql(target, source, insert_cols) -%}\n {{ adapter.dispatch('snapshot_merge_sql', 'dbt')(target, source, insert_cols) }}\n{%- endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.dbt_snowflake.snowflake__snapshot_merge_sql"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1641494961.661515}, "macro.dbt.default__snapshot_merge_sql": {"unique_id": "macro.dbt.default__snapshot_merge_sql", "package_name": "dbt", "root_path": "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages/dbt/include/global_project", "path": "macros/materializations/snapshots/snapshot_merge.sql", "original_file_path": "macros/materializations/snapshots/snapshot_merge.sql", "name": "default__snapshot_merge_sql", "macro_sql": "{% macro default__snapshot_merge_sql(target, source, insert_cols) -%}\n {%- set insert_cols_csv = insert_cols | join(', ') -%}\n\n merge into {{ target }} as DBT_INTERNAL_DEST\n using {{ source }} as DBT_INTERNAL_SOURCE\n on DBT_INTERNAL_SOURCE.dbt_scd_id = DBT_INTERNAL_DEST.dbt_scd_id\n\n when matched\n and DBT_INTERNAL_DEST.dbt_valid_to is null\n and DBT_INTERNAL_SOURCE.dbt_change_type in ('update', 'delete')\n then update\n set dbt_valid_to = DBT_INTERNAL_SOURCE.dbt_valid_to\n\n when not matched\n and DBT_INTERNAL_SOURCE.dbt_change_type = 'insert'\n then insert ({{ insert_cols_csv }})\n values ({{ insert_cols_csv }})\n\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1641494961.6621}, "macro.dbt.strategy_dispatch": {"unique_id": "macro.dbt.strategy_dispatch", "package_name": "dbt", "root_path": "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages/dbt/include/global_project", "path": "macros/materializations/snapshots/strategies.sql", "original_file_path": "macros/materializations/snapshots/strategies.sql", "name": "strategy_dispatch", "macro_sql": "{% macro strategy_dispatch(name) -%}\n{% set original_name = name %}\n {% if '.' in name %}\n {% set package_name, name = name.split(\".\", 1) %}\n {% else %}\n {% set package_name = none %}\n {% endif %}\n\n {% if package_name is none %}\n {% set package_context = context %}\n {% elif package_name in context %}\n {% set package_context = context[package_name] %}\n {% else %}\n {% set error_msg %}\n Could not find package '{{package_name}}', called with '{{original_name}}'\n {% endset %}\n {{ exceptions.raise_compiler_error(error_msg | trim) }}\n {% endif %}\n\n {%- set search_name = 'snapshot_' ~ name ~ '_strategy' -%}\n\n {% if search_name not in package_context %}\n {% set error_msg %}\n The specified strategy macro '{{name}}' was not found in package '{{ package_name }}'\n {% endset %}\n {{ exceptions.raise_compiler_error(error_msg | trim) }}\n {% endif %}\n {{ return(package_context[search_name]) }}\n{%- endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1641494961.667943}, "macro.dbt.snapshot_hash_arguments": {"unique_id": "macro.dbt.snapshot_hash_arguments", "package_name": "dbt", "root_path": "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages/dbt/include/global_project", "path": "macros/materializations/snapshots/strategies.sql", "original_file_path": "macros/materializations/snapshots/strategies.sql", "name": "snapshot_hash_arguments", "macro_sql": "{% macro snapshot_hash_arguments(args) -%}\n {{ adapter.dispatch('snapshot_hash_arguments', 'dbt')(args) }}\n{%- endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.dbt.default__snapshot_hash_arguments"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1641494961.668305}, "macro.dbt.default__snapshot_hash_arguments": {"unique_id": "macro.dbt.default__snapshot_hash_arguments", "package_name": "dbt", "root_path": "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages/dbt/include/global_project", "path": "macros/materializations/snapshots/strategies.sql", "original_file_path": "macros/materializations/snapshots/strategies.sql", "name": "default__snapshot_hash_arguments", "macro_sql": "{% macro default__snapshot_hash_arguments(args) -%}\n md5({%- for arg in args -%}\n coalesce(cast({{ arg }} as varchar ), '')\n {% if not loop.last %} || '|' || {% endif %}\n {%- endfor -%})\n{%- endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1641494961.668788}, "macro.dbt.snapshot_get_time": {"unique_id": "macro.dbt.snapshot_get_time", "package_name": "dbt", "root_path": "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages/dbt/include/global_project", "path": "macros/materializations/snapshots/strategies.sql", "original_file_path": "macros/materializations/snapshots/strategies.sql", "name": "snapshot_get_time", "macro_sql": "{% macro snapshot_get_time() -%}\n {{ adapter.dispatch('snapshot_get_time', 'dbt')() }}\n{%- endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.dbt_snowflake.snowflake__snapshot_get_time"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1641494961.6691}, "macro.dbt.default__snapshot_get_time": {"unique_id": "macro.dbt.default__snapshot_get_time", "package_name": "dbt", "root_path": "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages/dbt/include/global_project", "path": "macros/materializations/snapshots/strategies.sql", "original_file_path": "macros/materializations/snapshots/strategies.sql", "name": "default__snapshot_get_time", "macro_sql": "{% macro default__snapshot_get_time() -%}\n {{ current_timestamp() }}\n{%- endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.dbt_utils.current_timestamp"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1641494961.669324}, "macro.dbt.snapshot_timestamp_strategy": {"unique_id": "macro.dbt.snapshot_timestamp_strategy", "package_name": "dbt", "root_path": "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages/dbt/include/global_project", "path": "macros/materializations/snapshots/strategies.sql", "original_file_path": "macros/materializations/snapshots/strategies.sql", "name": "snapshot_timestamp_strategy", "macro_sql": "{% macro snapshot_timestamp_strategy(node, snapshotted_rel, current_rel, config, target_exists) %}\n {% set primary_key = config['unique_key'] %}\n {% set updated_at = config['updated_at'] %}\n {% set invalidate_hard_deletes = config.get('invalidate_hard_deletes', false) %}\n\n {#/*\n The snapshot relation might not have an {{ updated_at }} value if the\n snapshot strategy is changed from `check` to `timestamp`. We\n should use a dbt-created column for the comparison in the snapshot\n table instead of assuming that the user-supplied {{ updated_at }}\n will be present in the historical data.\n\n See https://github.com/dbt-labs/dbt-core/issues/2350\n */ #}\n {% set row_changed_expr -%}\n ({{ snapshotted_rel }}.dbt_valid_from < {{ current_rel }}.{{ updated_at }})\n {%- endset %}\n\n {% set scd_id_expr = snapshot_hash_arguments([primary_key, updated_at]) %}\n\n {% do return({\n \"unique_key\": primary_key,\n \"updated_at\": updated_at,\n \"row_changed\": row_changed_expr,\n \"scd_id\": scd_id_expr,\n \"invalidate_hard_deletes\": invalidate_hard_deletes\n }) %}\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.dbt.snapshot_hash_arguments"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1641494961.670882}, "macro.dbt.snapshot_string_as_time": {"unique_id": "macro.dbt.snapshot_string_as_time", "package_name": "dbt", "root_path": "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages/dbt/include/global_project", "path": "macros/materializations/snapshots/strategies.sql", "original_file_path": "macros/materializations/snapshots/strategies.sql", "name": "snapshot_string_as_time", "macro_sql": "{% macro snapshot_string_as_time(timestamp) -%}\n {{ adapter.dispatch('snapshot_string_as_time', 'dbt')(timestamp) }}\n{%- endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.dbt_snowflake.snowflake__snapshot_string_as_time"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1641494961.671349}, "macro.dbt.default__snapshot_string_as_time": {"unique_id": "macro.dbt.default__snapshot_string_as_time", "package_name": "dbt", "root_path": "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages/dbt/include/global_project", "path": "macros/materializations/snapshots/strategies.sql", "original_file_path": "macros/materializations/snapshots/strategies.sql", "name": "default__snapshot_string_as_time", "macro_sql": "{% macro default__snapshot_string_as_time(timestamp) %}\n {% do exceptions.raise_not_implemented(\n 'snapshot_string_as_time macro not implemented for adapter '+adapter.type()\n ) %}\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1641494961.671723}, "macro.dbt.snapshot_check_all_get_existing_columns": {"unique_id": "macro.dbt.snapshot_check_all_get_existing_columns", "package_name": "dbt", "root_path": "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages/dbt/include/global_project", "path": "macros/materializations/snapshots/strategies.sql", "original_file_path": "macros/materializations/snapshots/strategies.sql", "name": "snapshot_check_all_get_existing_columns", "macro_sql": "{% macro snapshot_check_all_get_existing_columns(node, target_exists) -%}\n {%- set query_columns = get_columns_in_query(node['compiled_sql']) -%}\n {%- if not target_exists -%}\n {# no table yet -> return whatever the query does #}\n {{ return([false, query_columns]) }}\n {%- endif -%}\n {# handle any schema changes #}\n {%- set target_table = node.get('alias', node.get('name')) -%}\n {%- set target_relation = adapter.get_relation(database=node.database, schema=node.schema, identifier=target_table) -%}\n {%- set existing_cols = get_columns_in_query('select * from ' ~ target_relation) -%}\n {%- set ns = namespace() -%} {# handle for-loop scoping with a namespace #}\n {%- set ns.column_added = false -%}\n\n {%- set intersection = [] -%}\n {%- for col in query_columns -%}\n {%- if col in existing_cols -%}\n {%- do intersection.append(col) -%}\n {%- else -%}\n {% set ns.column_added = true %}\n {%- endif -%}\n {%- endfor -%}\n {{ return([ns.column_added, intersection]) }}\n{%- endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.dbt.get_columns_in_query"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1641494961.673886}, "macro.dbt.snapshot_check_strategy": {"unique_id": "macro.dbt.snapshot_check_strategy", "package_name": "dbt", "root_path": "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages/dbt/include/global_project", "path": "macros/materializations/snapshots/strategies.sql", "original_file_path": "macros/materializations/snapshots/strategies.sql", "name": "snapshot_check_strategy", "macro_sql": "{% macro snapshot_check_strategy(node, snapshotted_rel, current_rel, config, target_exists) %}\n {% set check_cols_config = config['check_cols'] %}\n {% set primary_key = config['unique_key'] %}\n {% set invalidate_hard_deletes = config.get('invalidate_hard_deletes', false) %}\n \n {% set select_current_time -%}\n select {{ snapshot_get_time() }} as snapshot_start\n {%- endset %}\n\n {#-- don't access the column by name, to avoid dealing with casing issues on snowflake #}\n {%- set now = run_query(select_current_time)[0][0] -%}\n {% if now is none or now is undefined -%}\n {%- do exceptions.raise_compiler_error('Could not get a snapshot start time from the database') -%}\n {%- endif %}\n {% set updated_at = config.get('updated_at', snapshot_string_as_time(now)) %}\n\n {% set column_added = false %}\n\n {% if check_cols_config == 'all' %}\n {% set column_added, check_cols = snapshot_check_all_get_existing_columns(node, target_exists) %}\n {% elif check_cols_config is iterable and (check_cols_config | length) > 0 %}\n {% set check_cols = check_cols_config %}\n {% else %}\n {% do exceptions.raise_compiler_error(\"Invalid value for 'check_cols': \" ~ check_cols_config) %}\n {% endif %}\n\n {%- set row_changed_expr -%}\n (\n {%- if column_added -%}\n TRUE\n {%- else -%}\n {%- for col in check_cols -%}\n {{ snapshotted_rel }}.{{ col }} != {{ current_rel }}.{{ col }}\n or\n (\n (({{ snapshotted_rel }}.{{ col }} is null) and not ({{ current_rel }}.{{ col }} is null))\n or\n ((not {{ snapshotted_rel }}.{{ col }} is null) and ({{ current_rel }}.{{ col }} is null))\n )\n {%- if not loop.last %} or {% endif -%}\n {%- endfor -%}\n {%- endif -%}\n )\n {%- endset %}\n\n {% set scd_id_expr = snapshot_hash_arguments([primary_key, updated_at]) %}\n\n {% do return({\n \"unique_key\": primary_key,\n \"updated_at\": updated_at,\n \"row_changed\": row_changed_expr,\n \"scd_id\": scd_id_expr,\n \"invalidate_hard_deletes\": invalidate_hard_deletes\n }) %}\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.dbt.snapshot_get_time", "macro.dbt.run_query", "macro.dbt.snapshot_string_as_time", "macro.dbt.snapshot_check_all_get_existing_columns", "macro.dbt.snapshot_hash_arguments"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1641494961.6779258}, "macro.dbt.create_columns": {"unique_id": "macro.dbt.create_columns", "package_name": "dbt", "root_path": "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages/dbt/include/global_project", "path": "macros/materializations/snapshots/helpers.sql", "original_file_path": "macros/materializations/snapshots/helpers.sql", "name": "create_columns", "macro_sql": "{% macro create_columns(relation, columns) %}\n {{ adapter.dispatch('create_columns', 'dbt')(relation, columns) }}\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.dbt.default__create_columns"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1641494961.6827788}, "macro.dbt.default__create_columns": {"unique_id": "macro.dbt.default__create_columns", "package_name": "dbt", "root_path": "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages/dbt/include/global_project", "path": "macros/materializations/snapshots/helpers.sql", "original_file_path": "macros/materializations/snapshots/helpers.sql", "name": "default__create_columns", "macro_sql": "{% macro default__create_columns(relation, columns) %}\n {% for column in columns %}\n {% call statement() %}\n alter table {{ relation }} add column \"{{ column.name }}\" {{ column.data_type }};\n {% endcall %}\n {% endfor %}\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.dbt.statement"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1641494961.683404}, "macro.dbt.post_snapshot": {"unique_id": "macro.dbt.post_snapshot", "package_name": "dbt", "root_path": "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages/dbt/include/global_project", "path": "macros/materializations/snapshots/helpers.sql", "original_file_path": "macros/materializations/snapshots/helpers.sql", "name": "post_snapshot", "macro_sql": "{% macro post_snapshot(staging_relation) %}\n {{ adapter.dispatch('post_snapshot', 'dbt')(staging_relation) }}\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.dbt.default__post_snapshot"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1641494961.683771}, "macro.dbt.default__post_snapshot": {"unique_id": "macro.dbt.default__post_snapshot", "package_name": "dbt", "root_path": "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages/dbt/include/global_project", "path": "macros/materializations/snapshots/helpers.sql", "original_file_path": "macros/materializations/snapshots/helpers.sql", "name": "default__post_snapshot", "macro_sql": "{% macro default__post_snapshot(staging_relation) %}\n {# no-op #}\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1641494961.68397}, "macro.dbt.snapshot_staging_table": {"unique_id": "macro.dbt.snapshot_staging_table", "package_name": "dbt", "root_path": "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages/dbt/include/global_project", "path": "macros/materializations/snapshots/helpers.sql", "original_file_path": "macros/materializations/snapshots/helpers.sql", "name": "snapshot_staging_table", "macro_sql": "{% macro snapshot_staging_table(strategy, source_sql, target_relation) -%}\n {{ adapter.dispatch('snapshot_staging_table', 'dbt')(strategy, source_sql, target_relation) }}\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.dbt.default__snapshot_staging_table"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1641494961.684421}, "macro.dbt.default__snapshot_staging_table": {"unique_id": "macro.dbt.default__snapshot_staging_table", "package_name": "dbt", "root_path": "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages/dbt/include/global_project", "path": "macros/materializations/snapshots/helpers.sql", "original_file_path": "macros/materializations/snapshots/helpers.sql", "name": "default__snapshot_staging_table", "macro_sql": "{% macro default__snapshot_staging_table(strategy, source_sql, target_relation) -%}\n\n with snapshot_query as (\n\n {{ source_sql }}\n\n ),\n\n snapshotted_data as (\n\n select *,\n {{ strategy.unique_key }} as dbt_unique_key\n\n from {{ target_relation }}\n where dbt_valid_to is null\n\n ),\n\n insertions_source_data as (\n\n select\n *,\n {{ strategy.unique_key }} as dbt_unique_key,\n {{ strategy.updated_at }} as dbt_updated_at,\n {{ strategy.updated_at }} as dbt_valid_from,\n nullif({{ strategy.updated_at }}, {{ strategy.updated_at }}) as dbt_valid_to,\n {{ strategy.scd_id }} as dbt_scd_id\n\n from snapshot_query\n ),\n\n updates_source_data as (\n\n select\n *,\n {{ strategy.unique_key }} as dbt_unique_key,\n {{ strategy.updated_at }} as dbt_updated_at,\n {{ strategy.updated_at }} as dbt_valid_from,\n {{ strategy.updated_at }} as dbt_valid_to\n\n from snapshot_query\n ),\n\n {%- if strategy.invalidate_hard_deletes %}\n\n deletes_source_data as (\n\n select \n *,\n {{ strategy.unique_key }} as dbt_unique_key\n from snapshot_query\n ),\n {% endif %}\n\n insertions as (\n\n select\n 'insert' as dbt_change_type,\n source_data.*\n\n from insertions_source_data as source_data\n left outer join snapshotted_data on snapshotted_data.dbt_unique_key = source_data.dbt_unique_key\n where snapshotted_data.dbt_unique_key is null\n or (\n snapshotted_data.dbt_unique_key is not null\n and (\n {{ strategy.row_changed }}\n )\n )\n\n ),\n\n updates as (\n\n select\n 'update' as dbt_change_type,\n source_data.*,\n snapshotted_data.dbt_scd_id\n\n from updates_source_data as source_data\n join snapshotted_data on snapshotted_data.dbt_unique_key = source_data.dbt_unique_key\n where (\n {{ strategy.row_changed }}\n )\n )\n\n {%- if strategy.invalidate_hard_deletes -%}\n ,\n\n deletes as (\n \n select\n 'delete' as dbt_change_type,\n source_data.*,\n {{ snapshot_get_time() }} as dbt_valid_from,\n {{ snapshot_get_time() }} as dbt_updated_at,\n {{ snapshot_get_time() }} as dbt_valid_to,\n snapshotted_data.dbt_scd_id\n \n from snapshotted_data\n left join deletes_source_data as source_data on snapshotted_data.dbt_unique_key = source_data.dbt_unique_key\n where source_data.dbt_unique_key is null\n )\n {%- endif %}\n\n select * from insertions\n union all\n select * from updates\n {%- if strategy.invalidate_hard_deletes %}\n union all\n select * from deletes\n {%- endif %}\n\n{%- endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.dbt.snapshot_get_time"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1641494961.6862679}, "macro.dbt.build_snapshot_table": {"unique_id": "macro.dbt.build_snapshot_table", "package_name": "dbt", "root_path": "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages/dbt/include/global_project", "path": "macros/materializations/snapshots/helpers.sql", "original_file_path": "macros/materializations/snapshots/helpers.sql", "name": "build_snapshot_table", "macro_sql": "{% macro build_snapshot_table(strategy, sql) -%}\n {{ adapter.dispatch('build_snapshot_table', 'dbt')(strategy, sql) }}\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.dbt.default__build_snapshot_table"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1641494961.686681}, "macro.dbt.default__build_snapshot_table": {"unique_id": "macro.dbt.default__build_snapshot_table", "package_name": "dbt", "root_path": "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages/dbt/include/global_project", "path": "macros/materializations/snapshots/helpers.sql", "original_file_path": "macros/materializations/snapshots/helpers.sql", "name": "default__build_snapshot_table", "macro_sql": "{% macro default__build_snapshot_table(strategy, sql) %}\n\n select *,\n {{ strategy.scd_id }} as dbt_scd_id,\n {{ strategy.updated_at }} as dbt_updated_at,\n {{ strategy.updated_at }} as dbt_valid_from,\n nullif({{ strategy.updated_at }}, {{ strategy.updated_at }}) as dbt_valid_to\n from (\n {{ sql }}\n ) sbq\n\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1641494961.687237}, "macro.dbt.build_snapshot_staging_table": {"unique_id": "macro.dbt.build_snapshot_staging_table", "package_name": "dbt", "root_path": "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages/dbt/include/global_project", "path": "macros/materializations/snapshots/helpers.sql", "original_file_path": "macros/materializations/snapshots/helpers.sql", "name": "build_snapshot_staging_table", "macro_sql": "{% macro build_snapshot_staging_table(strategy, sql, target_relation) %}\n {% set tmp_relation = make_temp_relation(target_relation) %}\n\n {% set select = snapshot_staging_table(strategy, sql, target_relation) %}\n\n {% call statement('build_snapshot_staging_relation') %}\n {{ create_table_as(True, tmp_relation, select) }}\n {% endcall %}\n\n {% do return(tmp_relation) %}\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.dbt.make_temp_relation", "macro.dbt.snapshot_staging_table", "macro.dbt.statement", "macro.dbt.create_table_as"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1641494961.68818}, "macro.dbt.materialization_snapshot_default": {"unique_id": "macro.dbt.materialization_snapshot_default", "package_name": "dbt", "root_path": "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages/dbt/include/global_project", "path": "macros/materializations/snapshots/snapshot.sql", "original_file_path": "macros/materializations/snapshots/snapshot.sql", "name": "materialization_snapshot_default", "macro_sql": "{% materialization snapshot, default %}\n {%- set config = model['config'] -%}\n\n {%- set target_table = model.get('alias', model.get('name')) -%}\n\n {%- set strategy_name = config.get('strategy') -%}\n {%- set unique_key = config.get('unique_key') %}\n\n {% if not adapter.check_schema_exists(model.database, model.schema) %}\n {% do create_schema(model.database, model.schema) %}\n {% endif %}\n\n {% set target_relation_exists, target_relation = get_or_create_relation(\n database=model.database,\n schema=model.schema,\n identifier=target_table,\n type='table') -%}\n\n {%- if not target_relation.is_table -%}\n {% do exceptions.relation_wrong_type(target_relation, 'table') %}\n {%- endif -%}\n\n\n {{ run_hooks(pre_hooks, inside_transaction=False) }}\n\n {{ run_hooks(pre_hooks, inside_transaction=True) }}\n\n {% set strategy_macro = strategy_dispatch(strategy_name) %}\n {% set strategy = strategy_macro(model, \"snapshotted_data\", \"source_data\", config, target_relation_exists) %}\n\n {% if not target_relation_exists %}\n\n {% set build_sql = build_snapshot_table(strategy, model['compiled_sql']) %}\n {% set final_sql = create_table_as(False, target_relation, build_sql) %}\n\n {% else %}\n\n {{ adapter.valid_snapshot_target(target_relation) }}\n\n {% set staging_table = build_snapshot_staging_table(strategy, sql, target_relation) %}\n\n -- this may no-op if the database does not require column expansion\n {% do adapter.expand_target_column_types(from_relation=staging_table,\n to_relation=target_relation) %}\n\n {% set missing_columns = adapter.get_missing_columns(staging_table, target_relation)\n | rejectattr('name', 'equalto', 'dbt_change_type')\n | rejectattr('name', 'equalto', 'DBT_CHANGE_TYPE')\n | rejectattr('name', 'equalto', 'dbt_unique_key')\n | rejectattr('name', 'equalto', 'DBT_UNIQUE_KEY')\n | list %}\n\n {% do create_columns(target_relation, missing_columns) %}\n\n {% set source_columns = adapter.get_columns_in_relation(staging_table)\n | rejectattr('name', 'equalto', 'dbt_change_type')\n | rejectattr('name', 'equalto', 'DBT_CHANGE_TYPE')\n | rejectattr('name', 'equalto', 'dbt_unique_key')\n | rejectattr('name', 'equalto', 'DBT_UNIQUE_KEY')\n | list %}\n\n {% set quoted_source_columns = [] %}\n {% for column in source_columns %}\n {% do quoted_source_columns.append(adapter.quote(column.name)) %}\n {% endfor %}\n\n {% set final_sql = snapshot_merge_sql(\n target = target_relation,\n source = staging_table,\n insert_cols = quoted_source_columns\n )\n %}\n\n {% endif %}\n\n {% call statement('main') %}\n {{ final_sql }}\n {% endcall %}\n\n {% do persist_docs(target_relation, model) %}\n\n {% if not target_relation_exists %}\n {% do create_indexes(target_relation) %}\n {% endif %}\n\n {{ run_hooks(post_hooks, inside_transaction=True) }}\n\n {{ adapter.commit() }}\n\n {% if staging_table is defined %}\n {% do post_snapshot(staging_table) %}\n {% endif %}\n\n {{ run_hooks(post_hooks, inside_transaction=False) }}\n\n {{ return({'relations': [target_relation]}) }}\n\n{% endmaterialization %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.dbt.create_schema", "macro.dbt.get_or_create_relation", "macro.dbt.run_hooks", "macro.dbt.strategy_dispatch", "macro.dbt.build_snapshot_table", "macro.dbt.create_table_as", "macro.dbt.build_snapshot_staging_table", "macro.dbt.create_columns", "macro.dbt.snapshot_merge_sql", "macro.dbt.statement", "macro.dbt.persist_docs", "macro.dbt.create_indexes", "macro.dbt.post_snapshot"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1641494961.6990862}, "macro.dbt.materialization_test_default": {"unique_id": "macro.dbt.materialization_test_default", "package_name": "dbt", "root_path": "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages/dbt/include/global_project", "path": "macros/materializations/tests/test.sql", "original_file_path": "macros/materializations/tests/test.sql", "name": "materialization_test_default", "macro_sql": "{%- materialization test, default -%}\n\n {% set relations = [] %}\n\n {% if should_store_failures() %}\n\n {% set identifier = model['alias'] %}\n {% set old_relation = adapter.get_relation(database=database, schema=schema, identifier=identifier) %}\n {% set target_relation = api.Relation.create(\n identifier=identifier, schema=schema, database=database, type='table') -%} %}\n \n {% if old_relation %}\n {% do adapter.drop_relation(old_relation) %}\n {% endif %}\n \n {% call statement(auto_begin=True) %}\n {{ create_table_as(False, target_relation, sql) }}\n {% endcall %}\n \n {% do relations.append(target_relation) %}\n \n {% set main_sql %}\n select *\n from {{ target_relation }}\n {% endset %}\n \n {{ adapter.commit() }}\n \n {% else %}\n\n {% set main_sql = sql %}\n \n {% endif %}\n\n {% set limit = config.get('limit') %}\n {% set fail_calc = config.get('fail_calc') %}\n {% set warn_if = config.get('warn_if') %}\n {% set error_if = config.get('error_if') %}\n\n {% call statement('main', fetch_result=True) -%}\n\n {{ get_test_sql(main_sql, fail_calc, warn_if, error_if, limit)}}\n\n {%- endcall %}\n \n {{ return({'relations': relations}) }}\n\n{%- endmaterialization -%}", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.dbt.should_store_failures", "macro.dbt.statement", "macro.dbt.create_table_as", "macro.dbt.get_test_sql"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1641494961.7032561}, "macro.dbt.get_test_sql": {"unique_id": "macro.dbt.get_test_sql", "package_name": "dbt", "root_path": "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages/dbt/include/global_project", "path": "macros/materializations/tests/helpers.sql", "original_file_path": "macros/materializations/tests/helpers.sql", "name": "get_test_sql", "macro_sql": "{% macro get_test_sql(main_sql, fail_calc, warn_if, error_if, limit) -%}\n {{ adapter.dispatch('get_test_sql', 'dbt')(main_sql, fail_calc, warn_if, error_if, limit) }}\n{%- endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.dbt.default__get_test_sql"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1641494961.704303}, "macro.dbt.default__get_test_sql": {"unique_id": "macro.dbt.default__get_test_sql", "package_name": "dbt", "root_path": "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages/dbt/include/global_project", "path": "macros/materializations/tests/helpers.sql", "original_file_path": "macros/materializations/tests/helpers.sql", "name": "default__get_test_sql", "macro_sql": "{% macro default__get_test_sql(main_sql, fail_calc, warn_if, error_if, limit) -%}\n select\n {{ fail_calc }} as failures,\n {{ fail_calc }} {{ warn_if }} as should_warn,\n {{ fail_calc }} {{ error_if }} as should_error\n from (\n {{ main_sql }}\n {{ \"limit \" ~ limit if limit != none }}\n ) dbt_internal_test\n{%- endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1641494961.705049}, "macro.dbt.get_where_subquery": {"unique_id": "macro.dbt.get_where_subquery", "package_name": "dbt", "root_path": "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages/dbt/include/global_project", "path": "macros/materializations/tests/where_subquery.sql", "original_file_path": "macros/materializations/tests/where_subquery.sql", "name": "get_where_subquery", "macro_sql": "{% macro get_where_subquery(relation) -%}\n {% do return(adapter.dispatch('get_where_subquery', 'dbt')(relation)) %}\n{%- endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.dbt.default__get_where_subquery"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1641494961.705879}, "macro.dbt.default__get_where_subquery": {"unique_id": "macro.dbt.default__get_where_subquery", "package_name": "dbt", "root_path": "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages/dbt/include/global_project", "path": "macros/materializations/tests/where_subquery.sql", "original_file_path": "macros/materializations/tests/where_subquery.sql", "name": "default__get_where_subquery", "macro_sql": "{% macro default__get_where_subquery(relation) -%}\n {% set where = config.get('where', '') %}\n {% if where %}\n {%- set filtered -%}\n (select * from {{ relation }} where {{ where }}) dbt_subquery\n {%- endset -%}\n {% do return(filtered) %}\n {%- else -%}\n {% do return(relation) %}\n {%- endif -%}\n{%- endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1641494961.706709}, "macro.dbt.get_quoted_csv": {"unique_id": "macro.dbt.get_quoted_csv", "package_name": "dbt", "root_path": "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages/dbt/include/global_project", "path": "macros/materializations/models/incremental/column_helpers.sql", "original_file_path": "macros/materializations/models/incremental/column_helpers.sql", "name": "get_quoted_csv", "macro_sql": "{% macro get_quoted_csv(column_names) %}\n \n {% set quoted = [] %}\n {% for col in column_names -%}\n {%- do quoted.append(adapter.quote(col)) -%}\n {%- endfor %}\n\n {%- set dest_cols_csv = quoted | join(', ') -%}\n {{ return(dest_cols_csv) }}\n\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1641494961.708321}, "macro.dbt.diff_columns": {"unique_id": "macro.dbt.diff_columns", "package_name": "dbt", "root_path": "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages/dbt/include/global_project", "path": "macros/materializations/models/incremental/column_helpers.sql", "original_file_path": "macros/materializations/models/incremental/column_helpers.sql", "name": "diff_columns", "macro_sql": "{% macro diff_columns(source_columns, target_columns) %}\n\n {% set result = [] %}\n {% set source_names = source_columns | map(attribute = 'column') | list %}\n {% set target_names = target_columns | map(attribute = 'column') | list %}\n \n {# --check whether the name attribute exists in the target - this does not perform a data type check #}\n {% for sc in source_columns %}\n {% if sc.name not in target_names %}\n {{ result.append(sc) }}\n {% endif %}\n {% endfor %}\n \n {{ return(result) }}\n\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1641494961.709514}, "macro.dbt.diff_column_data_types": {"unique_id": "macro.dbt.diff_column_data_types", "package_name": "dbt", "root_path": "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages/dbt/include/global_project", "path": "macros/materializations/models/incremental/column_helpers.sql", "original_file_path": "macros/materializations/models/incremental/column_helpers.sql", "name": "diff_column_data_types", "macro_sql": "{% macro diff_column_data_types(source_columns, target_columns) %}\n \n {% set result = [] %}\n {% for sc in source_columns %}\n {% set tc = target_columns | selectattr(\"name\", \"equalto\", sc.name) | list | first %}\n {% if tc %}\n {% if sc.data_type != tc.data_type %}\n {{ result.append( { 'column_name': tc.name, 'new_type': sc.data_type } ) }} \n {% endif %}\n {% endif %}\n {% endfor %}\n\n {{ return(result) }}\n\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1641494961.7108421}, "macro.dbt.get_merge_sql": {"unique_id": "macro.dbt.get_merge_sql", "package_name": "dbt", "root_path": "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages/dbt/include/global_project", "path": "macros/materializations/models/incremental/merge.sql", "original_file_path": "macros/materializations/models/incremental/merge.sql", "name": "get_merge_sql", "macro_sql": "{% macro get_merge_sql(target, source, unique_key, dest_columns, predicates=none) -%}\n {{ adapter.dispatch('get_merge_sql', 'dbt')(target, source, unique_key, dest_columns, predicates) }}\n{%- endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.dbt_snowflake.snowflake__get_merge_sql"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1641494961.7152169}, "macro.dbt.default__get_merge_sql": {"unique_id": "macro.dbt.default__get_merge_sql", "package_name": "dbt", "root_path": "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages/dbt/include/global_project", "path": "macros/materializations/models/incremental/merge.sql", "original_file_path": "macros/materializations/models/incremental/merge.sql", "name": "default__get_merge_sql", "macro_sql": "{% macro default__get_merge_sql(target, source, unique_key, dest_columns, predicates) -%}\n {%- set predicates = [] if predicates is none else [] + predicates -%}\n {%- set dest_cols_csv = get_quoted_csv(dest_columns | map(attribute=\"name\")) -%}\n {%- set update_columns = config.get('merge_update_columns', default = dest_columns | map(attribute=\"quoted\") | list) -%}\n {%- set sql_header = config.get('sql_header', none) -%}\n\n {% if unique_key %}\n {% set unique_key_match %}\n DBT_INTERNAL_SOURCE.{{ unique_key }} = DBT_INTERNAL_DEST.{{ unique_key }}\n {% endset %}\n {% do predicates.append(unique_key_match) %}\n {% else %}\n {% do predicates.append('FALSE') %}\n {% endif %}\n\n {{ sql_header if sql_header is not none }}\n\n merge into {{ target }} as DBT_INTERNAL_DEST\n using {{ source }} as DBT_INTERNAL_SOURCE\n on {{ predicates | join(' and ') }}\n\n {% if unique_key %}\n when matched then update set\n {% for column_name in update_columns -%}\n {{ column_name }} = DBT_INTERNAL_SOURCE.{{ column_name }}\n {%- if not loop.last %}, {%- endif %}\n {%- endfor %}\n {% endif %}\n\n when not matched then insert\n ({{ dest_cols_csv }})\n values\n ({{ dest_cols_csv }})\n\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.dbt.get_quoted_csv"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1641494961.717737}, "macro.dbt.get_delete_insert_merge_sql": {"unique_id": "macro.dbt.get_delete_insert_merge_sql", "package_name": "dbt", "root_path": "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages/dbt/include/global_project", "path": "macros/materializations/models/incremental/merge.sql", "original_file_path": "macros/materializations/models/incremental/merge.sql", "name": "get_delete_insert_merge_sql", "macro_sql": "{% macro get_delete_insert_merge_sql(target, source, unique_key, dest_columns) -%}\n {{ adapter.dispatch('get_delete_insert_merge_sql', 'dbt')(target, source, unique_key, dest_columns) }}\n{%- endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.dbt_snowflake.snowflake__get_delete_insert_merge_sql"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1641494961.718247}, "macro.dbt.default__get_delete_insert_merge_sql": {"unique_id": "macro.dbt.default__get_delete_insert_merge_sql", "package_name": "dbt", "root_path": "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages/dbt/include/global_project", "path": "macros/materializations/models/incremental/merge.sql", "original_file_path": "macros/materializations/models/incremental/merge.sql", "name": "default__get_delete_insert_merge_sql", "macro_sql": "{% macro default__get_delete_insert_merge_sql(target, source, unique_key, dest_columns) -%}\n\n {%- set dest_cols_csv = get_quoted_csv(dest_columns | map(attribute=\"name\")) -%}\n\n {% if unique_key is not none %}\n delete from {{ target }}\n where ({{ unique_key }}) in (\n select ({{ unique_key }})\n from {{ source }}\n );\n {% endif %}\n\n insert into {{ target }} ({{ dest_cols_csv }})\n (\n select {{ dest_cols_csv }}\n from {{ source }}\n )\n\n{%- endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.dbt.get_quoted_csv"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1641494961.719182}, "macro.dbt.get_insert_overwrite_merge_sql": {"unique_id": "macro.dbt.get_insert_overwrite_merge_sql", "package_name": "dbt", "root_path": "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages/dbt/include/global_project", "path": "macros/materializations/models/incremental/merge.sql", "original_file_path": "macros/materializations/models/incremental/merge.sql", "name": "get_insert_overwrite_merge_sql", "macro_sql": "{% macro get_insert_overwrite_merge_sql(target, source, dest_columns, predicates, include_sql_header=false) -%}\n {{ adapter.dispatch('get_insert_overwrite_merge_sql', 'dbt')(target, source, dest_columns, predicates, include_sql_header) }}\n{%- endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.dbt.default__get_insert_overwrite_merge_sql"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1641494961.719754}, "macro.dbt.default__get_insert_overwrite_merge_sql": {"unique_id": "macro.dbt.default__get_insert_overwrite_merge_sql", "package_name": "dbt", "root_path": "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages/dbt/include/global_project", "path": "macros/materializations/models/incremental/merge.sql", "original_file_path": "macros/materializations/models/incremental/merge.sql", "name": "default__get_insert_overwrite_merge_sql", "macro_sql": "{% macro default__get_insert_overwrite_merge_sql(target, source, dest_columns, predicates, include_sql_header) -%}\n {%- set predicates = [] if predicates is none else [] + predicates -%}\n {%- set dest_cols_csv = get_quoted_csv(dest_columns | map(attribute=\"name\")) -%}\n {%- set sql_header = config.get('sql_header', none) -%}\n\n {{ sql_header if sql_header is not none and include_sql_header }}\n\n merge into {{ target }} as DBT_INTERNAL_DEST\n using {{ source }} as DBT_INTERNAL_SOURCE\n on FALSE\n\n when not matched by source\n {% if predicates %} and {{ predicates | join(' and ') }} {% endif %}\n then delete\n\n when not matched then insert\n ({{ dest_cols_csv }})\n values\n ({{ dest_cols_csv }})\n\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.dbt.get_quoted_csv"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1641494961.721118}, "macro.dbt.is_incremental": {"unique_id": "macro.dbt.is_incremental", "package_name": "dbt", "root_path": "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages/dbt/include/global_project", "path": "macros/materializations/models/incremental/is_incremental.sql", "original_file_path": "macros/materializations/models/incremental/is_incremental.sql", "name": "is_incremental", "macro_sql": "{% macro is_incremental() %}\n {#-- do not run introspective queries in parsing #}\n {% if not execute %}\n {{ return(False) }}\n {% else %}\n {% set relation = adapter.get_relation(this.database, this.schema, this.table) %}\n {{ return(relation is not none\n and relation.type == 'table'\n and model.config.materialized == 'incremental'\n and not should_full_refresh()) }}\n {% endif %}\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.dbt.should_full_refresh"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1641494961.7225401}, "macro.dbt.materialization_incremental_default": {"unique_id": "macro.dbt.materialization_incremental_default", "package_name": "dbt", "root_path": "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages/dbt/include/global_project", "path": "macros/materializations/models/incremental/incremental.sql", "original_file_path": "macros/materializations/models/incremental/incremental.sql", "name": "materialization_incremental_default", "macro_sql": "{% materialization incremental, default -%}\n\n {% set unique_key = config.get('unique_key') %}\n\n {% set target_relation = this.incorporate(type='table') %}\n {% set existing_relation = load_relation(this) %}\n {% set tmp_relation = make_temp_relation(target_relation) %}\n {%- set full_refresh_mode = (should_full_refresh()) -%}\n\n {% set on_schema_change = incremental_validate_on_schema_change(config.get('on_schema_change'), default='ignore') %}\n\n {% set tmp_identifier = model['name'] + '__dbt_tmp' %}\n {% set backup_identifier = model['name'] + \"__dbt_backup\" %}\n\n -- the intermediate_ and backup_ relations should not already exist in the database; get_relation\n -- will return None in that case. Otherwise, we get a relation that we can drop\n -- later, before we try to use this name for the current operation. This has to happen before\n -- BEGIN, in a separate transaction\n {% set preexisting_intermediate_relation = adapter.get_relation(identifier=tmp_identifier, \n schema=schema,\n database=database) %} \n {% set preexisting_backup_relation = adapter.get_relation(identifier=backup_identifier,\n schema=schema,\n database=database) %}\n {{ drop_relation_if_exists(preexisting_intermediate_relation) }}\n {{ drop_relation_if_exists(preexisting_backup_relation) }}\n\n {{ run_hooks(pre_hooks, inside_transaction=False) }}\n\n -- `BEGIN` happens here:\n {{ run_hooks(pre_hooks, inside_transaction=True) }}\n\n {% set to_drop = [] %}\n\n {# -- first check whether we want to full refresh for source view or config reasons #}\n {% set trigger_full_refresh = (full_refresh_mode or existing_relation.is_view) %}\n\n {% if existing_relation is none %}\n {% set build_sql = create_table_as(False, target_relation, sql) %}\n{% elif trigger_full_refresh %}\n {#-- Make sure the backup doesn't exist so we don't encounter issues with the rename below #}\n {% set tmp_identifier = model['name'] + '__dbt_tmp' %}\n {% set backup_identifier = model['name'] + '__dbt_backup' %}\n {% set intermediate_relation = existing_relation.incorporate(path={\"identifier\": tmp_identifier}) %}\n {% set backup_relation = existing_relation.incorporate(path={\"identifier\": backup_identifier}) %}\n\n {% set build_sql = create_table_as(False, intermediate_relation, sql) %}\n {% set need_swap = true %}\n {% do to_drop.append(backup_relation) %}\n {% else %}\n {% do run_query(create_table_as(True, tmp_relation, sql)) %}\n {% do adapter.expand_target_column_types(\n from_relation=tmp_relation,\n to_relation=target_relation) %}\n {#-- Process schema changes. Returns dict of changes if successful. Use source columns for upserting/merging --#}\n {% set dest_columns = process_schema_changes(on_schema_change, tmp_relation, existing_relation) %}\n {% if not dest_columns %}\n {% set dest_columns = adapter.get_columns_in_relation(existing_relation) %}\n {% endif %}\n {% set build_sql = get_delete_insert_merge_sql(target_relation, tmp_relation, unique_key, dest_columns) %}\n \n {% endif %}\n\n {% call statement(\"main\") %}\n {{ build_sql }}\n {% endcall %}\n\n {% if need_swap %} \n {% do adapter.rename_relation(target_relation, backup_relation) %} \n {% do adapter.rename_relation(intermediate_relation, target_relation) %} \n {% endif %}\n\n {% do persist_docs(target_relation, model) %}\n\n {% if existing_relation is none or existing_relation.is_view or should_full_refresh() %}\n {% do create_indexes(target_relation) %}\n {% endif %}\n\n {{ run_hooks(post_hooks, inside_transaction=True) }}\n\n -- `COMMIT` happens here\n {% do adapter.commit() %}\n\n {% for rel in to_drop %}\n {% do adapter.drop_relation(rel) %}\n {% endfor %}\n\n {{ run_hooks(post_hooks, inside_transaction=False) }}\n\n {{ return({'relations': [target_relation]}) }}\n\n{%- endmaterialization %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.dbt.load_relation", "macro.dbt.make_temp_relation", "macro.dbt.should_full_refresh", "macro.dbt.incremental_validate_on_schema_change", "macro.dbt.drop_relation_if_exists", "macro.dbt.run_hooks", "macro.dbt.create_table_as", "macro.dbt.run_query", "macro.dbt.process_schema_changes", "macro.dbt.get_delete_insert_merge_sql", "macro.dbt.statement", "macro.dbt.persist_docs", "macro.dbt.create_indexes"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1641494961.732165}, "macro.dbt.incremental_validate_on_schema_change": {"unique_id": "macro.dbt.incremental_validate_on_schema_change", "package_name": "dbt", "root_path": "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages/dbt/include/global_project", "path": "macros/materializations/models/incremental/on_schema_change.sql", "original_file_path": "macros/materializations/models/incremental/on_schema_change.sql", "name": "incremental_validate_on_schema_change", "macro_sql": "{% macro incremental_validate_on_schema_change(on_schema_change, default='ignore') %}\n \n {% if on_schema_change not in ['sync_all_columns', 'append_new_columns', 'fail', 'ignore'] %}\n \n {% set log_message = 'Invalid value for on_schema_change (%s) specified. Setting default value of %s.' % (on_schema_change, default) %}\n {% do log(log_message) %}\n \n {{ return(default) }}\n\n {% else %}\n\n {{ return(on_schema_change) }}\n \n {% endif %}\n\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1641494961.739562}, "macro.dbt.check_for_schema_changes": {"unique_id": "macro.dbt.check_for_schema_changes", "package_name": "dbt", "root_path": "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages/dbt/include/global_project", "path": "macros/materializations/models/incremental/on_schema_change.sql", "original_file_path": "macros/materializations/models/incremental/on_schema_change.sql", "name": "check_for_schema_changes", "macro_sql": "{% macro check_for_schema_changes(source_relation, target_relation) %}\n \n {% set schema_changed = False %}\n \n {%- set source_columns = adapter.get_columns_in_relation(source_relation) -%}\n {%- set target_columns = adapter.get_columns_in_relation(target_relation) -%}\n {%- set source_not_in_target = diff_columns(source_columns, target_columns) -%}\n {%- set target_not_in_source = diff_columns(target_columns, source_columns) -%}\n\n {% set new_target_types = diff_column_data_types(source_columns, target_columns) %}\n\n {% if source_not_in_target != [] %}\n {% set schema_changed = True %}\n {% elif target_not_in_source != [] or new_target_types != [] %}\n {% set schema_changed = True %}\n {% elif new_target_types != [] %}\n {% set schema_changed = True %}\n {% endif %}\n \n {% set changes_dict = {\n 'schema_changed': schema_changed,\n 'source_not_in_target': source_not_in_target,\n 'target_not_in_source': target_not_in_source,\n 'source_columns': source_columns,\n 'target_columns': target_columns,\n 'new_target_types': new_target_types\n } %}\n\n {% set msg %}\n In {{ target_relation }}:\n Schema changed: {{ schema_changed }}\n Source columns not in target: {{ source_not_in_target }}\n Target columns not in source: {{ target_not_in_source }}\n New column types: {{ new_target_types }}\n {% endset %}\n \n {% do log(msg) %}\n\n {{ return(changes_dict) }}\n\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.dbt.diff_columns", "macro.dbt.diff_column_data_types"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1641494961.742211}, "macro.dbt.sync_column_schemas": {"unique_id": "macro.dbt.sync_column_schemas", "package_name": "dbt", "root_path": "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages/dbt/include/global_project", "path": "macros/materializations/models/incremental/on_schema_change.sql", "original_file_path": "macros/materializations/models/incremental/on_schema_change.sql", "name": "sync_column_schemas", "macro_sql": "{% macro sync_column_schemas(on_schema_change, target_relation, schema_changes_dict) %}\n \n {%- set add_to_target_arr = schema_changes_dict['source_not_in_target'] -%}\n\n {%- if on_schema_change == 'append_new_columns'-%}\n {%- if add_to_target_arr | length > 0 -%}\n {%- do alter_relation_add_remove_columns(target_relation, add_to_target_arr, none) -%}\n {%- endif -%}\n \n {% elif on_schema_change == 'sync_all_columns' %}\n {%- set remove_from_target_arr = schema_changes_dict['target_not_in_source'] -%}\n {%- set new_target_types = schema_changes_dict['new_target_types'] -%}\n \n {% if add_to_target_arr | length > 0 or remove_from_target_arr | length > 0 %} \n {%- do alter_relation_add_remove_columns(target_relation, add_to_target_arr, remove_from_target_arr) -%}\n {% endif %}\n\n {% if new_target_types != [] %}\n {% for ntt in new_target_types %}\n {% set column_name = ntt['column_name'] %}\n {% set new_type = ntt['new_type'] %}\n {% do alter_column_type(target_relation, column_name, new_type) %}\n {% endfor %}\n {% endif %}\n \n {% endif %}\n\n {% set schema_change_message %}\n In {{ target_relation }}:\n Schema change approach: {{ on_schema_change }}\n Columns added: {{ add_to_target_arr }}\n Columns removed: {{ remove_from_target_arr }}\n Data types changed: {{ new_target_types }}\n {% endset %}\n \n {% do log(schema_change_message) %}\n \n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.dbt.alter_relation_add_remove_columns", "macro.dbt.alter_column_type"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1641494961.744809}, "macro.dbt.process_schema_changes": {"unique_id": "macro.dbt.process_schema_changes", "package_name": "dbt", "root_path": "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages/dbt/include/global_project", "path": "macros/materializations/models/incremental/on_schema_change.sql", "original_file_path": "macros/materializations/models/incremental/on_schema_change.sql", "name": "process_schema_changes", "macro_sql": "{% macro process_schema_changes(on_schema_change, source_relation, target_relation) %}\n \n {% if on_schema_change == 'ignore' %}\n\n {{ return({}) }}\n\n {% else %}\n \n {% set schema_changes_dict = check_for_schema_changes(source_relation, target_relation) %}\n \n {% if schema_changes_dict['schema_changed'] %}\n \n {% if on_schema_change == 'fail' %}\n \n {% set fail_msg %}\n The source and target schemas on this incremental model are out of sync!\n They can be reconciled in several ways: \n - set the `on_schema_change` config to either append_new_columns or sync_all_columns, depending on your situation.\n - Re-run the incremental model with `full_refresh: True` to update the target schema.\n - update the schema manually and re-run the process.\n {% endset %}\n \n {% do exceptions.raise_compiler_error(fail_msg) %}\n \n {# -- unless we ignore, run the sync operation per the config #}\n {% else %}\n \n {% do sync_column_schemas(on_schema_change, target_relation, schema_changes_dict) %}\n \n {% endif %}\n \n {% endif %}\n\n {{ return(schema_changes_dict['source_columns']) }}\n \n {% endif %}\n\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.dbt.check_for_schema_changes", "macro.dbt.sync_column_schemas"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1641494961.746426}, "macro.dbt.materialization_table_default": {"unique_id": "macro.dbt.materialization_table_default", "package_name": "dbt", "root_path": "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages/dbt/include/global_project", "path": "macros/materializations/models/table/table.sql", "original_file_path": "macros/materializations/models/table/table.sql", "name": "materialization_table_default", "macro_sql": "{% materialization table, default %}\n {%- set identifier = model['alias'] -%}\n {%- set tmp_identifier = model['name'] + '__dbt_tmp' -%}\n {%- set backup_identifier = model['name'] + '__dbt_backup' -%}\n\n {%- set old_relation = adapter.get_relation(database=database, schema=schema, identifier=identifier) -%}\n {%- set target_relation = api.Relation.create(identifier=identifier,\n schema=schema,\n database=database,\n type='table') -%}\n {%- set intermediate_relation = api.Relation.create(identifier=tmp_identifier,\n schema=schema,\n database=database,\n type='table') -%}\n -- the intermediate_relation should not already exist in the database; get_relation\n -- will return None in that case. Otherwise, we get a relation that we can drop\n -- later, before we try to use this name for the current operation\n {%- set preexisting_intermediate_relation = adapter.get_relation(identifier=tmp_identifier, \n schema=schema,\n database=database) -%}\n /*\n See ../view/view.sql for more information about this relation.\n */\n {%- set backup_relation_type = 'table' if old_relation is none else old_relation.type -%}\n {%- set backup_relation = api.Relation.create(identifier=backup_identifier,\n schema=schema,\n database=database,\n type=backup_relation_type) -%}\n -- as above, the backup_relation should not already exist\n {%- set preexisting_backup_relation = adapter.get_relation(identifier=backup_identifier,\n schema=schema,\n database=database) -%}\n\n\n -- drop the temp relations if they exist already in the database\n {{ drop_relation_if_exists(preexisting_intermediate_relation) }}\n {{ drop_relation_if_exists(preexisting_backup_relation) }}\n\n {{ run_hooks(pre_hooks, inside_transaction=False) }}\n\n -- `BEGIN` happens here:\n {{ run_hooks(pre_hooks, inside_transaction=True) }}\n\n -- build model\n {% call statement('main') -%}\n {{ get_create_table_as_sql(False, intermediate_relation, sql) }}\n {%- endcall %}\n\n -- cleanup\n {% if old_relation is not none %}\n {{ adapter.rename_relation(old_relation, backup_relation) }}\n {% endif %}\n\n {{ adapter.rename_relation(intermediate_relation, target_relation) }}\n\n {% do create_indexes(target_relation) %}\n\n {{ run_hooks(post_hooks, inside_transaction=True) }}\n\n {% do persist_docs(target_relation, model) %}\n\n -- `COMMIT` happens here\n {{ adapter.commit() }}\n\n -- finally, drop the existing/backup relation after the commit\n {{ drop_relation_if_exists(backup_relation) }}\n\n {{ run_hooks(post_hooks, inside_transaction=False) }}\n\n {{ return({'relations': [target_relation]}) }}\n{% endmaterialization %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.dbt.drop_relation_if_exists", "macro.dbt.run_hooks", "macro.dbt.statement", "macro.dbt.get_create_table_as_sql", "macro.dbt.create_indexes", "macro.dbt.persist_docs"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1641494961.753275}, "macro.dbt.get_create_table_as_sql": {"unique_id": "macro.dbt.get_create_table_as_sql", "package_name": "dbt", "root_path": "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages/dbt/include/global_project", "path": "macros/materializations/models/table/create_table_as.sql", "original_file_path": "macros/materializations/models/table/create_table_as.sql", "name": "get_create_table_as_sql", "macro_sql": "{% macro get_create_table_as_sql(temporary, relation, sql) -%}\n {{ adapter.dispatch('get_create_table_as_sql', 'dbt')(temporary, relation, sql) }}\n{%- endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.dbt.default__get_create_table_as_sql"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1641494961.7543318}, "macro.dbt.default__get_create_table_as_sql": {"unique_id": "macro.dbt.default__get_create_table_as_sql", "package_name": "dbt", "root_path": "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages/dbt/include/global_project", "path": "macros/materializations/models/table/create_table_as.sql", "original_file_path": "macros/materializations/models/table/create_table_as.sql", "name": "default__get_create_table_as_sql", "macro_sql": "{% macro default__get_create_table_as_sql(temporary, relation, sql) -%}\n {{ return(create_table_as(temporary, relation, sql)) }}\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.dbt.create_table_as"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1641494961.7547379}, "macro.dbt.create_table_as": {"unique_id": "macro.dbt.create_table_as", "package_name": "dbt", "root_path": "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages/dbt/include/global_project", "path": "macros/materializations/models/table/create_table_as.sql", "original_file_path": "macros/materializations/models/table/create_table_as.sql", "name": "create_table_as", "macro_sql": "{% macro create_table_as(temporary, relation, sql) -%}\n {{ adapter.dispatch('create_table_as', 'dbt')(temporary, relation, sql) }}\n{%- endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.dbt_snowflake.snowflake__create_table_as"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1641494961.755185}, "macro.dbt.default__create_table_as": {"unique_id": "macro.dbt.default__create_table_as", "package_name": "dbt", "root_path": "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages/dbt/include/global_project", "path": "macros/materializations/models/table/create_table_as.sql", "original_file_path": "macros/materializations/models/table/create_table_as.sql", "name": "default__create_table_as", "macro_sql": "{% macro default__create_table_as(temporary, relation, sql) -%}\n {%- set sql_header = config.get('sql_header', none) -%}\n \n {{ sql_header if sql_header is not none }}\n \n create {% if temporary: -%}temporary{%- endif %} table\n {{ relation.include(database=(not temporary), schema=(not temporary)) }}\n as (\n {{ sql }}\n );\n{%- endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1641494961.7560709}, "macro.dbt.materialization_view_default": {"unique_id": "macro.dbt.materialization_view_default", "package_name": "dbt", "root_path": "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages/dbt/include/global_project", "path": "macros/materializations/models/view/view.sql", "original_file_path": "macros/materializations/models/view/view.sql", "name": "materialization_view_default", "macro_sql": "{%- materialization view, default -%}\n\n {%- set identifier = model['alias'] -%}\n {%- set tmp_identifier = model['name'] + '__dbt_tmp' -%}\n {%- set backup_identifier = model['name'] + '__dbt_backup' -%}\n\n {%- set old_relation = adapter.get_relation(database=database, schema=schema, identifier=identifier) -%}\n {%- set target_relation = api.Relation.create(identifier=identifier, schema=schema, database=database,\n type='view') -%}\n {%- set intermediate_relation = api.Relation.create(identifier=tmp_identifier,\n schema=schema, database=database, type='view') -%}\n -- the intermediate_relation should not already exist in the database; get_relation\n -- will return None in that case. Otherwise, we get a relation that we can drop\n -- later, before we try to use this name for the current operation\n {%- set preexisting_intermediate_relation = adapter.get_relation(identifier=tmp_identifier, \n schema=schema,\n database=database) -%}\n /*\n This relation (probably) doesn't exist yet. If it does exist, it's a leftover from\n a previous run, and we're going to try to drop it immediately. At the end of this\n materialization, we're going to rename the \"old_relation\" to this identifier,\n and then we're going to drop it. In order to make sure we run the correct one of:\n - drop view ...\n - drop table ...\n\n We need to set the type of this relation to be the type of the old_relation, if it exists,\n or else \"view\" as a sane default if it does not. Note that if the old_relation does not\n exist, then there is nothing to move out of the way and subsequentally drop. In that case,\n this relation will be effectively unused.\n */\n {%- set backup_relation_type = 'view' if old_relation is none else old_relation.type -%}\n {%- set backup_relation = api.Relation.create(identifier=backup_identifier,\n schema=schema, database=database,\n type=backup_relation_type) -%}\n -- as above, the backup_relation should not already exist\n {%- set preexisting_backup_relation = adapter.get_relation(identifier=backup_identifier,\n schema=schema,\n database=database) -%}\n\n {{ run_hooks(pre_hooks, inside_transaction=False) }}\n\n -- drop the temp relations if they exist already in the database\n {{ drop_relation_if_exists(preexisting_intermediate_relation) }}\n {{ drop_relation_if_exists(preexisting_backup_relation) }}\n\n -- `BEGIN` happens here:\n {{ run_hooks(pre_hooks, inside_transaction=True) }}\n\n -- build model\n {% call statement('main') -%}\n {{ create_view_as(intermediate_relation, sql) }}\n {%- endcall %}\n\n -- cleanup\n -- move the existing view out of the way\n {% if old_relation is not none %}\n {{ adapter.rename_relation(old_relation, backup_relation) }}\n {% endif %}\n {{ adapter.rename_relation(intermediate_relation, target_relation) }}\n\n {% do persist_docs(target_relation, model) %}\n\n {{ run_hooks(post_hooks, inside_transaction=True) }}\n\n {{ adapter.commit() }}\n\n {{ drop_relation_if_exists(backup_relation) }}\n\n {{ run_hooks(post_hooks, inside_transaction=False) }}\n\n {{ return({'relations': [target_relation]}) }}\n\n{%- endmaterialization -%}", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.dbt.run_hooks", "macro.dbt.drop_relation_if_exists", "macro.dbt.statement", "macro.dbt.create_view_as", "macro.dbt.persist_docs"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1641494961.762573}, "macro.dbt.handle_existing_table": {"unique_id": "macro.dbt.handle_existing_table", "package_name": "dbt", "root_path": "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages/dbt/include/global_project", "path": "macros/materializations/models/view/helpers.sql", "original_file_path": "macros/materializations/models/view/helpers.sql", "name": "handle_existing_table", "macro_sql": "{% macro handle_existing_table(full_refresh, old_relation) %}\n {{ adapter.dispatch('handle_existing_table', 'dbt')(full_refresh, old_relation) }}\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.dbt.default__handle_existing_table"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1641494961.763297}, "macro.dbt.default__handle_existing_table": {"unique_id": "macro.dbt.default__handle_existing_table", "package_name": "dbt", "root_path": "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages/dbt/include/global_project", "path": "macros/materializations/models/view/helpers.sql", "original_file_path": "macros/materializations/models/view/helpers.sql", "name": "default__handle_existing_table", "macro_sql": "{% macro default__handle_existing_table(full_refresh, old_relation) %}\n {{ log(\"Dropping relation \" ~ old_relation ~ \" because it is of type \" ~ old_relation.type) }}\n {{ adapter.drop_relation(old_relation) }}\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1641494961.7637818}, "macro.dbt.create_or_replace_view": {"unique_id": "macro.dbt.create_or_replace_view", "package_name": "dbt", "root_path": "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages/dbt/include/global_project", "path": "macros/materializations/models/view/create_or_replace_view.sql", "original_file_path": "macros/materializations/models/view/create_or_replace_view.sql", "name": "create_or_replace_view", "macro_sql": "{% macro create_or_replace_view() %}\n {%- set identifier = model['alias'] -%}\n\n {%- set old_relation = adapter.get_relation(database=database, schema=schema, identifier=identifier) -%}\n\n {%- set exists_as_view = (old_relation is not none and old_relation.is_view) -%}\n\n {%- set target_relation = api.Relation.create(\n identifier=identifier, schema=schema, database=database,\n type='view') -%}\n\n {{ run_hooks(pre_hooks) }}\n\n -- If there's a table with the same name and we weren't told to full refresh,\n -- that's an error. If we were told to full refresh, drop it. This behavior differs\n -- for Snowflake and BigQuery, so multiple dispatch is used.\n {%- if old_relation is not none and old_relation.is_table -%}\n {{ handle_existing_table(should_full_refresh(), old_relation) }}\n {%- endif -%}\n\n -- build model\n {% call statement('main') -%}\n {{ get_create_view_as_sql(target_relation, sql) }}\n {%- endcall %}\n\n {{ run_hooks(post_hooks) }}\n\n {{ return({'relations': [target_relation]}) }}\n\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.dbt.run_hooks", "macro.dbt.handle_existing_table", "macro.dbt.should_full_refresh", "macro.dbt.statement", "macro.dbt.get_create_view_as_sql"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1641494961.7662542}, "macro.dbt.get_create_view_as_sql": {"unique_id": "macro.dbt.get_create_view_as_sql", "package_name": "dbt", "root_path": "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages/dbt/include/global_project", "path": "macros/materializations/models/view/create_view_as.sql", "original_file_path": "macros/materializations/models/view/create_view_as.sql", "name": "get_create_view_as_sql", "macro_sql": "{% macro get_create_view_as_sql(relation, sql) -%}\n {{ adapter.dispatch('get_create_view_as_sql', 'dbt')(relation, sql) }}\n{%- endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.dbt.default__get_create_view_as_sql"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1641494961.767075}, "macro.dbt.default__get_create_view_as_sql": {"unique_id": "macro.dbt.default__get_create_view_as_sql", "package_name": "dbt", "root_path": "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages/dbt/include/global_project", "path": "macros/materializations/models/view/create_view_as.sql", "original_file_path": "macros/materializations/models/view/create_view_as.sql", "name": "default__get_create_view_as_sql", "macro_sql": "{% macro default__get_create_view_as_sql(relation, sql) -%}\n {{ return(create_view_as(relation, sql)) }}\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.dbt.create_view_as"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1641494961.767435}, "macro.dbt.create_view_as": {"unique_id": "macro.dbt.create_view_as", "package_name": "dbt", "root_path": "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages/dbt/include/global_project", "path": "macros/materializations/models/view/create_view_as.sql", "original_file_path": "macros/materializations/models/view/create_view_as.sql", "name": "create_view_as", "macro_sql": "{% macro create_view_as(relation, sql) -%}\n {{ adapter.dispatch('create_view_as', 'dbt')(relation, sql) }}\n{%- endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.dbt_snowflake.snowflake__create_view_as"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1641494961.767835}, "macro.dbt.default__create_view_as": {"unique_id": "macro.dbt.default__create_view_as", "package_name": "dbt", "root_path": "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages/dbt/include/global_project", "path": "macros/materializations/models/view/create_view_as.sql", "original_file_path": "macros/materializations/models/view/create_view_as.sql", "name": "default__create_view_as", "macro_sql": "{% macro default__create_view_as(relation, sql) -%}\n {%- set sql_header = config.get('sql_header', none) -%}\n\n {{ sql_header if sql_header is not none }}\n create view {{ relation }} as (\n {{ sql }}\n );\n{%- endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1641494961.768403}, "macro.dbt.materialization_seed_default": {"unique_id": "macro.dbt.materialization_seed_default", "package_name": "dbt", "root_path": "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages/dbt/include/global_project", "path": "macros/materializations/seeds/seed.sql", "original_file_path": "macros/materializations/seeds/seed.sql", "name": "materialization_seed_default", "macro_sql": "{% materialization seed, default %}\n\n {%- set identifier = model['alias'] -%}\n {%- set full_refresh_mode = (should_full_refresh()) -%}\n\n {%- set old_relation = adapter.get_relation(database=database, schema=schema, identifier=identifier) -%}\n\n {%- set exists_as_table = (old_relation is not none and old_relation.is_table) -%}\n {%- set exists_as_view = (old_relation is not none and old_relation.is_view) -%}\n\n {%- set agate_table = load_agate_table() -%}\n {%- do store_result('agate_table', response='OK', agate_table=agate_table) -%}\n\n {{ run_hooks(pre_hooks, inside_transaction=False) }}\n\n -- `BEGIN` happens here:\n {{ run_hooks(pre_hooks, inside_transaction=True) }}\n\n -- build model\n {% set create_table_sql = \"\" %}\n {% if exists_as_view %}\n {{ exceptions.raise_compiler_error(\"Cannot seed to '{}', it is a view\".format(old_relation)) }}\n {% elif exists_as_table %}\n {% set create_table_sql = reset_csv_table(model, full_refresh_mode, old_relation, agate_table) %}\n {% else %}\n {% set create_table_sql = create_csv_table(model, agate_table) %}\n {% endif %}\n\n {% set code = 'CREATE' if full_refresh_mode else 'INSERT' %}\n {% set rows_affected = (agate_table.rows | length) %}\n {% set sql = load_csv_rows(model, agate_table) %}\n\n {% call noop_statement('main', code ~ ' ' ~ rows_affected, code, rows_affected) %}\n {{ create_table_sql }};\n -- dbt seed --\n {{ sql }}\n {% endcall %}\n\n {% set target_relation = this.incorporate(type='table') %}\n {% do persist_docs(target_relation, model) %}\n\n {% if full_refresh_mode or not exists_as_table %}\n {% do create_indexes(target_relation) %}\n {% endif %}\n\n {{ run_hooks(post_hooks, inside_transaction=True) }}\n\n -- `COMMIT` happens here\n {{ adapter.commit() }}\n\n {{ run_hooks(post_hooks, inside_transaction=False) }}\n\n {{ return({'relations': [target_relation]}) }}\n\n{% endmaterialization %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.dbt.should_full_refresh", "macro.dbt.run_hooks", "macro.dbt.reset_csv_table", "macro.dbt.create_csv_table", "macro.dbt.load_csv_rows", "macro.dbt.noop_statement", "macro.dbt.persist_docs", "macro.dbt.create_indexes"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1641494961.774236}, "macro.dbt.create_csv_table": {"unique_id": "macro.dbt.create_csv_table", "package_name": "dbt", "root_path": "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages/dbt/include/global_project", "path": "macros/materializations/seeds/helpers.sql", "original_file_path": "macros/materializations/seeds/helpers.sql", "name": "create_csv_table", "macro_sql": "{% macro create_csv_table(model, agate_table) -%}\n {{ adapter.dispatch('create_csv_table', 'dbt')(model, agate_table) }}\n{%- endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.dbt.default__create_csv_table"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1641494961.780393}, "macro.dbt.default__create_csv_table": {"unique_id": "macro.dbt.default__create_csv_table", "package_name": "dbt", "root_path": "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages/dbt/include/global_project", "path": "macros/materializations/seeds/helpers.sql", "original_file_path": "macros/materializations/seeds/helpers.sql", "name": "default__create_csv_table", "macro_sql": "{% macro default__create_csv_table(model, agate_table) %}\n {%- set column_override = model['config'].get('column_types', {}) -%}\n {%- set quote_seed_column = model['config'].get('quote_columns', None) -%}\n\n {% set sql %}\n create table {{ this.render() }} (\n {%- for col_name in agate_table.column_names -%}\n {%- set inferred_type = adapter.convert_type(agate_table, loop.index0) -%}\n {%- set type = column_override.get(col_name, inferred_type) -%}\n {%- set column_name = (col_name | string) -%}\n {{ adapter.quote_seed_column(column_name, quote_seed_column) }} {{ type }} {%- if not loop.last -%}, {%- endif -%}\n {%- endfor -%}\n )\n {% endset %}\n\n {% call statement('_') -%}\n {{ sql }}\n {%- endcall %}\n\n {{ return(sql) }}\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.dbt.statement"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1641494961.7823439}, "macro.dbt.reset_csv_table": {"unique_id": "macro.dbt.reset_csv_table", "package_name": "dbt", "root_path": "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages/dbt/include/global_project", "path": "macros/materializations/seeds/helpers.sql", "original_file_path": "macros/materializations/seeds/helpers.sql", "name": "reset_csv_table", "macro_sql": "{% macro reset_csv_table(model, full_refresh, old_relation, agate_table) -%}\n {{ adapter.dispatch('reset_csv_table', 'dbt')(model, full_refresh, old_relation, agate_table) }}\n{%- endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.dbt.default__reset_csv_table"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1641494961.782845}, "macro.dbt.default__reset_csv_table": {"unique_id": "macro.dbt.default__reset_csv_table", "package_name": "dbt", "root_path": "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages/dbt/include/global_project", "path": "macros/materializations/seeds/helpers.sql", "original_file_path": "macros/materializations/seeds/helpers.sql", "name": "default__reset_csv_table", "macro_sql": "{% macro default__reset_csv_table(model, full_refresh, old_relation, agate_table) %}\n {% set sql = \"\" %}\n {% if full_refresh %}\n {{ adapter.drop_relation(old_relation) }}\n {% set sql = create_csv_table(model, agate_table) %}\n {% else %}\n {{ adapter.truncate_relation(old_relation) }}\n {% set sql = \"truncate table \" ~ old_relation %}\n {% endif %}\n\n {{ return(sql) }}\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.dbt.create_csv_table"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1641494961.783901}, "macro.dbt.get_binding_char": {"unique_id": "macro.dbt.get_binding_char", "package_name": "dbt", "root_path": "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages/dbt/include/global_project", "path": "macros/materializations/seeds/helpers.sql", "original_file_path": "macros/materializations/seeds/helpers.sql", "name": "get_binding_char", "macro_sql": "{% macro get_binding_char() -%}\n {{ adapter.dispatch('get_binding_char', 'dbt')() }}\n{%- endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.dbt.default__get_binding_char"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1641494961.784218}, "macro.dbt.default__get_binding_char": {"unique_id": "macro.dbt.default__get_binding_char", "package_name": "dbt", "root_path": "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages/dbt/include/global_project", "path": "macros/materializations/seeds/helpers.sql", "original_file_path": "macros/materializations/seeds/helpers.sql", "name": "default__get_binding_char", "macro_sql": "{% macro default__get_binding_char() %}\n {{ return('%s') }}\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1641494961.7844748}, "macro.dbt.get_batch_size": {"unique_id": "macro.dbt.get_batch_size", "package_name": "dbt", "root_path": "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages/dbt/include/global_project", "path": "macros/materializations/seeds/helpers.sql", "original_file_path": "macros/materializations/seeds/helpers.sql", "name": "get_batch_size", "macro_sql": "{% macro get_batch_size() -%}\n {{ return(adapter.dispatch('get_batch_size', 'dbt')()) }}\n{%- endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.dbt.default__get_batch_size"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1641494961.784822}, "macro.dbt.default__get_batch_size": {"unique_id": "macro.dbt.default__get_batch_size", "package_name": "dbt", "root_path": "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages/dbt/include/global_project", "path": "macros/materializations/seeds/helpers.sql", "original_file_path": "macros/materializations/seeds/helpers.sql", "name": "default__get_batch_size", "macro_sql": "{% macro default__get_batch_size() %}\n {{ return(10000) }}\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1641494961.785076}, "macro.dbt.get_seed_column_quoted_csv": {"unique_id": "macro.dbt.get_seed_column_quoted_csv", "package_name": "dbt", "root_path": "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages/dbt/include/global_project", "path": "macros/materializations/seeds/helpers.sql", "original_file_path": "macros/materializations/seeds/helpers.sql", "name": "get_seed_column_quoted_csv", "macro_sql": "{% macro get_seed_column_quoted_csv(model, column_names) %}\n {%- set quote_seed_column = model['config'].get('quote_columns', None) -%}\n {% set quoted = [] %}\n {% for col in column_names -%}\n {%- do quoted.append(adapter.quote_seed_column(col, quote_seed_column)) -%}\n {%- endfor %}\n\n {%- set dest_cols_csv = quoted | join(', ') -%}\n {{ return(dest_cols_csv) }}\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1641494961.7861068}, "macro.dbt.load_csv_rows": {"unique_id": "macro.dbt.load_csv_rows", "package_name": "dbt", "root_path": "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages/dbt/include/global_project", "path": "macros/materializations/seeds/helpers.sql", "original_file_path": "macros/materializations/seeds/helpers.sql", "name": "load_csv_rows", "macro_sql": "{% macro load_csv_rows(model, agate_table) -%}\n {{ adapter.dispatch('load_csv_rows', 'dbt')(model, agate_table) }}\n{%- endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.dbt_snowflake.snowflake__load_csv_rows"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1641494961.78651}, "macro.dbt.default__load_csv_rows": {"unique_id": "macro.dbt.default__load_csv_rows", "package_name": "dbt", "root_path": "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages/dbt/include/global_project", "path": "macros/materializations/seeds/helpers.sql", "original_file_path": "macros/materializations/seeds/helpers.sql", "name": "default__load_csv_rows", "macro_sql": "{% macro default__load_csv_rows(model, agate_table) %}\n\n {% set batch_size = get_batch_size() %}\n\n {% set cols_sql = get_seed_column_quoted_csv(model, agate_table.column_names) %}\n {% set bindings = [] %}\n\n {% set statements = [] %}\n\n {% for chunk in agate_table.rows | batch(batch_size) %}\n {% set bindings = [] %}\n\n {% for row in chunk %}\n {% do bindings.extend(row) %}\n {% endfor %}\n\n {% set sql %}\n insert into {{ this.render() }} ({{ cols_sql }}) values\n {% for row in chunk -%}\n ({%- for column in agate_table.column_names -%}\n {{ get_binding_char() }}\n {%- if not loop.last%},{%- endif %}\n {%- endfor -%})\n {%- if not loop.last%},{%- endif %}\n {%- endfor %}\n {% endset %}\n\n {% do adapter.add_query(sql, bindings=bindings, abridge_sql_log=True) %}\n\n {% if loop.index0 == 0 %}\n {% do statements.append(sql) %}\n {% endif %}\n {% endfor %}\n\n {# Return SQL so we can render it out into the compiled files #}\n {{ return(statements[0]) }}\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.dbt.get_batch_size", "macro.dbt.get_seed_column_quoted_csv", "macro.dbt.get_binding_char"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1641494961.7891479}, "macro.dbt.generate_alias_name": {"unique_id": "macro.dbt.generate_alias_name", "package_name": "dbt", "root_path": "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages/dbt/include/global_project", "path": "macros/get_custom_name/get_custom_alias.sql", "original_file_path": "macros/get_custom_name/get_custom_alias.sql", "name": "generate_alias_name", "macro_sql": "{% macro generate_alias_name(custom_alias_name=none, node=none) -%}\n {% do return(adapter.dispatch('generate_alias_name', 'dbt')(custom_alias_name, node)) %}\n{%- endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.dbt.default__generate_alias_name"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1641494961.790022}, "macro.dbt.default__generate_alias_name": {"unique_id": "macro.dbt.default__generate_alias_name", "package_name": "dbt", "root_path": "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages/dbt/include/global_project", "path": "macros/get_custom_name/get_custom_alias.sql", "original_file_path": "macros/get_custom_name/get_custom_alias.sql", "name": "default__generate_alias_name", "macro_sql": "{% macro default__generate_alias_name(custom_alias_name=none, node=none) -%}\n\n {%- if custom_alias_name is none -%}\n\n {{ node.name }}\n\n {%- else -%}\n\n {{ custom_alias_name | trim }}\n\n {%- endif -%}\n\n{%- endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1641494961.7905211}, "macro.dbt.generate_schema_name": {"unique_id": "macro.dbt.generate_schema_name", "package_name": "dbt", "root_path": "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages/dbt/include/global_project", "path": "macros/get_custom_name/get_custom_schema.sql", "original_file_path": "macros/get_custom_name/get_custom_schema.sql", "name": "generate_schema_name", "macro_sql": "{% macro generate_schema_name(custom_schema_name=none, node=none) -%}\n {{ return(adapter.dispatch('generate_schema_name', 'dbt')(custom_schema_name, node)) }}\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.dbt.default__generate_schema_name"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1641494961.791585}, "macro.dbt.default__generate_schema_name": {"unique_id": "macro.dbt.default__generate_schema_name", "package_name": "dbt", "root_path": "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages/dbt/include/global_project", "path": "macros/get_custom_name/get_custom_schema.sql", "original_file_path": "macros/get_custom_name/get_custom_schema.sql", "name": "default__generate_schema_name", "macro_sql": "{% macro default__generate_schema_name(custom_schema_name, node) -%}\n\n {%- set default_schema = target.schema -%}\n {%- if custom_schema_name is none -%}\n\n {{ default_schema }}\n\n {%- else -%}\n\n {{ default_schema }}_{{ custom_schema_name | trim }}\n\n {%- endif -%}\n\n{%- endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1641494961.792158}, "macro.dbt.generate_schema_name_for_env": {"unique_id": "macro.dbt.generate_schema_name_for_env", "package_name": "dbt", "root_path": "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages/dbt/include/global_project", "path": "macros/get_custom_name/get_custom_schema.sql", "original_file_path": "macros/get_custom_name/get_custom_schema.sql", "name": "generate_schema_name_for_env", "macro_sql": "{% macro generate_schema_name_for_env(custom_schema_name, node) -%}\n\n {%- set default_schema = target.schema -%}\n {%- if target.name == 'prod' and custom_schema_name is not none -%}\n\n {{ custom_schema_name | trim }}\n\n {%- else -%}\n\n {{ default_schema }}\n\n {%- endif -%}\n\n{%- endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1641494961.792771}, "macro.dbt.generate_database_name": {"unique_id": "macro.dbt.generate_database_name", "package_name": "dbt", "root_path": "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages/dbt/include/global_project", "path": "macros/get_custom_name/get_custom_database.sql", "original_file_path": "macros/get_custom_name/get_custom_database.sql", "name": "generate_database_name", "macro_sql": "{% macro generate_database_name(custom_database_name=none, node=none) -%}\n {% do return(adapter.dispatch('generate_database_name', 'dbt')(custom_database_name, node)) %}\n{%- endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.dbt.default__generate_database_name"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1641494961.793652}, "macro.dbt.default__generate_database_name": {"unique_id": "macro.dbt.default__generate_database_name", "package_name": "dbt", "root_path": "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages/dbt/include/global_project", "path": "macros/get_custom_name/get_custom_database.sql", "original_file_path": "macros/get_custom_name/get_custom_database.sql", "name": "default__generate_database_name", "macro_sql": "{% macro default__generate_database_name(custom_database_name=none, node=none) -%}\n {%- set default_database = target.database -%}\n {%- if custom_database_name is none -%}\n\n {{ default_database }}\n\n {%- else -%}\n\n {{ custom_database_name }}\n\n {%- endif -%}\n\n{%- endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1641494961.7942872}, "macro.dbt.default__test_relationships": {"unique_id": "macro.dbt.default__test_relationships", "package_name": "dbt", "root_path": "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages/dbt/include/global_project", "path": "macros/generic_test_sql/relationships.sql", "original_file_path": "macros/generic_test_sql/relationships.sql", "name": "default__test_relationships", "macro_sql": "{% macro default__test_relationships(model, column_name, to, field) %}\n\nwith child as (\n select {{ column_name }} as from_field\n from {{ model }}\n where {{ column_name }} is not null\n),\n\nparent as (\n select {{ field }} as to_field\n from {{ to }}\n)\n\nselect\n from_field\n\nfrom child\nleft join parent\n on child.from_field = parent.to_field\n\nwhere parent.to_field is null\n\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1641494961.795084}, "macro.dbt.default__test_not_null": {"unique_id": "macro.dbt.default__test_not_null", "package_name": "dbt", "root_path": "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages/dbt/include/global_project", "path": "macros/generic_test_sql/not_null.sql", "original_file_path": "macros/generic_test_sql/not_null.sql", "name": "default__test_not_null", "macro_sql": "{% macro default__test_not_null(model, column_name) %}\n\nselect *\nfrom {{ model }}\nwhere {{ column_name }} is null\n\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1641494961.795586}, "macro.dbt.default__test_unique": {"unique_id": "macro.dbt.default__test_unique", "package_name": "dbt", "root_path": "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages/dbt/include/global_project", "path": "macros/generic_test_sql/unique.sql", "original_file_path": "macros/generic_test_sql/unique.sql", "name": "default__test_unique", "macro_sql": "{% macro default__test_unique(model, column_name) %}\n\nselect\n {{ column_name }} as unique_field,\n count(*) as n_records\n\nfrom {{ model }}\nwhere {{ column_name }} is not null\ngroup by {{ column_name }}\nhaving count(*) > 1\n\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1641494961.796215}, "macro.dbt.default__test_accepted_values": {"unique_id": "macro.dbt.default__test_accepted_values", "package_name": "dbt", "root_path": "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages/dbt/include/global_project", "path": "macros/generic_test_sql/accepted_values.sql", "original_file_path": "macros/generic_test_sql/accepted_values.sql", "name": "default__test_accepted_values", "macro_sql": "{% macro default__test_accepted_values(model, column_name, values, quote=True) %}\n\nwith all_values as (\n\n select\n {{ column_name }} as value_field,\n count(*) as n_records\n\n from {{ model }}\n group by {{ column_name }}\n\n)\n\nselect *\nfrom all_values\nwhere value_field not in (\n {% for value in values -%}\n {% if quote -%}\n '{{ value }}'\n {%- else -%}\n {{ value }}\n {%- endif -%}\n {%- if not loop.last -%},{%- endif %}\n {%- endfor %}\n)\n\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1641494961.797587}, "macro.dbt.statement": {"unique_id": "macro.dbt.statement", "package_name": "dbt", "root_path": "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages/dbt/include/global_project", "path": "macros/etc/statement.sql", "original_file_path": "macros/etc/statement.sql", "name": "statement", "macro_sql": "{% macro statement(name=None, fetch_result=False, auto_begin=True) -%}\n {%- if execute: -%}\n {%- set sql = caller() -%}\n\n {%- if name == 'main' -%}\n {{ log('Writing runtime SQL for node \"{}\"'.format(model['unique_id'])) }}\n {{ write(sql) }}\n {%- endif -%}\n\n {%- set res, table = adapter.execute(sql, auto_begin=auto_begin, fetch=fetch_result) -%}\n {%- if name is not none -%}\n {{ store_result(name, response=res, agate_table=table) }}\n {%- endif -%}\n\n {%- endif -%}\n{%- endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1641494961.799814}, "macro.dbt.noop_statement": {"unique_id": "macro.dbt.noop_statement", "package_name": "dbt", "root_path": "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages/dbt/include/global_project", "path": "macros/etc/statement.sql", "original_file_path": "macros/etc/statement.sql", "name": "noop_statement", "macro_sql": "{% macro noop_statement(name=None, message=None, code=None, rows_affected=None, res=None) -%}\n {%- set sql = caller() -%}\n\n {%- if name == 'main' -%}\n {{ log('Writing runtime SQL for node \"{}\"'.format(model['unique_id'])) }}\n {{ write(sql) }}\n {%- endif -%}\n\n {%- if name is not none -%}\n {{ store_raw_result(name, message=message, code=code, rows_affected=rows_affected, agate_table=res) }}\n {%- endif -%}\n\n{%- endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1641494961.801049}, "macro.dbt.run_query": {"unique_id": "macro.dbt.run_query", "package_name": "dbt", "root_path": "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages/dbt/include/global_project", "path": "macros/etc/statement.sql", "original_file_path": "macros/etc/statement.sql", "name": "run_query", "macro_sql": "{% macro run_query(sql) %}\n {% call statement(\"run_query_statement\", fetch_result=true, auto_begin=false) %}\n {{ sql }}\n {% endcall %}\n\n {% do return(load_result(\"run_query_statement\").table) %}\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.dbt.statement"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1641494961.80169}, "macro.dbt.convert_datetime": {"unique_id": "macro.dbt.convert_datetime", "package_name": "dbt", "root_path": "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages/dbt/include/global_project", "path": "macros/etc/datetime.sql", "original_file_path": "macros/etc/datetime.sql", "name": "convert_datetime", "macro_sql": "{% macro convert_datetime(date_str, date_fmt) %}\n\n {% set error_msg -%}\n The provided partition date '{{ date_str }}' does not match the expected format '{{ date_fmt }}'\n {%- endset %}\n\n {% set res = try_or_compiler_error(error_msg, modules.datetime.datetime.strptime, date_str.strip(), date_fmt) %}\n {{ return(res) }}\n\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1641494961.804731}, "macro.dbt.dates_in_range": {"unique_id": "macro.dbt.dates_in_range", "package_name": "dbt", "root_path": "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages/dbt/include/global_project", "path": "macros/etc/datetime.sql", "original_file_path": "macros/etc/datetime.sql", "name": "dates_in_range", "macro_sql": "{% macro dates_in_range(start_date_str, end_date_str=none, in_fmt=\"%Y%m%d\", out_fmt=\"%Y%m%d\") %}\n {% set end_date_str = start_date_str if end_date_str is none else end_date_str %}\n\n {% set start_date = convert_datetime(start_date_str, in_fmt) %}\n {% set end_date = convert_datetime(end_date_str, in_fmt) %}\n\n {% set day_count = (end_date - start_date).days %}\n {% if day_count < 0 %}\n {% set msg -%}\n Partiton start date is after the end date ({{ start_date }}, {{ end_date }})\n {%- endset %}\n\n {{ exceptions.raise_compiler_error(msg, model) }}\n {% endif %}\n\n {% set date_list = [] %}\n {% for i in range(0, day_count + 1) %}\n {% set the_date = (modules.datetime.timedelta(days=i) + start_date) %}\n {% if not out_fmt %}\n {% set _ = date_list.append(the_date) %}\n {% else %}\n {% set _ = date_list.append(the_date.strftime(out_fmt)) %}\n {% endif %}\n {% endfor %}\n\n {{ return(date_list) }}\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.dbt.convert_datetime"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1641494961.807302}, "macro.dbt.partition_range": {"unique_id": "macro.dbt.partition_range", "package_name": "dbt", "root_path": "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages/dbt/include/global_project", "path": "macros/etc/datetime.sql", "original_file_path": "macros/etc/datetime.sql", "name": "partition_range", "macro_sql": "{% macro partition_range(raw_partition_date, date_fmt='%Y%m%d') %}\n {% set partition_range = (raw_partition_date | string).split(\",\") %}\n\n {% if (partition_range | length) == 1 %}\n {% set start_date = partition_range[0] %}\n {% set end_date = none %}\n {% elif (partition_range | length) == 2 %}\n {% set start_date = partition_range[0] %}\n {% set end_date = partition_range[1] %}\n {% else %}\n {{ exceptions.raise_compiler_error(\"Invalid partition time. Expected format: {Start Date}[,{End Date}]. Got: \" ~ raw_partition_date) }}\n {% endif %}\n\n {{ return(dates_in_range(start_date, end_date, in_fmt=date_fmt)) }}\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.dbt.dates_in_range"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1641494961.808973}, "macro.dbt.py_current_timestring": {"unique_id": "macro.dbt.py_current_timestring", "package_name": "dbt", "root_path": "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages/dbt/include/global_project", "path": "macros/etc/datetime.sql", "original_file_path": "macros/etc/datetime.sql", "name": "py_current_timestring", "macro_sql": "{% macro py_current_timestring() %}\n {% set dt = modules.datetime.datetime.now() %}\n {% do return(dt.strftime(\"%Y%m%d%H%M%S%f\")) %}\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1641494961.809474}, "macro.dbt.create_schema": {"unique_id": "macro.dbt.create_schema", "package_name": "dbt", "root_path": "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages/dbt/include/global_project", "path": "macros/adapters/schema.sql", "original_file_path": "macros/adapters/schema.sql", "name": "create_schema", "macro_sql": "{% macro create_schema(relation) -%}\n {{ adapter.dispatch('create_schema', 'dbt')(relation) }}\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.dbt.default__create_schema"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1641494961.810305}, "macro.dbt.default__create_schema": {"unique_id": "macro.dbt.default__create_schema", "package_name": "dbt", "root_path": "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages/dbt/include/global_project", "path": "macros/adapters/schema.sql", "original_file_path": "macros/adapters/schema.sql", "name": "default__create_schema", "macro_sql": "{% macro default__create_schema(relation) -%}\n {%- call statement('create_schema') -%}\n create schema if not exists {{ relation.without_identifier() }}\n {% endcall %}\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.dbt.statement"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1641494961.810713}, "macro.dbt.drop_schema": {"unique_id": "macro.dbt.drop_schema", "package_name": "dbt", "root_path": "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages/dbt/include/global_project", "path": "macros/adapters/schema.sql", "original_file_path": "macros/adapters/schema.sql", "name": "drop_schema", "macro_sql": "{% macro drop_schema(relation) -%}\n {{ adapter.dispatch('drop_schema', 'dbt')(relation) }}\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.dbt.default__drop_schema"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1641494961.811069}, "macro.dbt.default__drop_schema": {"unique_id": "macro.dbt.default__drop_schema", "package_name": "dbt", "root_path": "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages/dbt/include/global_project", "path": "macros/adapters/schema.sql", "original_file_path": "macros/adapters/schema.sql", "name": "default__drop_schema", "macro_sql": "{% macro default__drop_schema(relation) -%}\n {%- call statement('drop_schema') -%}\n drop schema if exists {{ relation.without_identifier() }} cascade\n {% endcall %}\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.dbt.statement"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1641494961.811471}, "macro.dbt.get_create_index_sql": {"unique_id": "macro.dbt.get_create_index_sql", "package_name": "dbt", "root_path": "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages/dbt/include/global_project", "path": "macros/adapters/indexes.sql", "original_file_path": "macros/adapters/indexes.sql", "name": "get_create_index_sql", "macro_sql": "{% macro get_create_index_sql(relation, index_dict) -%}\n {{ return(adapter.dispatch('get_create_index_sql', 'dbt')(relation, index_dict)) }}\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.dbt.default__get_create_index_sql"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1641494961.8124359}, "macro.dbt.default__get_create_index_sql": {"unique_id": "macro.dbt.default__get_create_index_sql", "package_name": "dbt", "root_path": "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages/dbt/include/global_project", "path": "macros/adapters/indexes.sql", "original_file_path": "macros/adapters/indexes.sql", "name": "default__get_create_index_sql", "macro_sql": "{% macro default__get_create_index_sql(relation, index_dict) -%}\n {% do return(None) %}\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1641494961.81274}, "macro.dbt.create_indexes": {"unique_id": "macro.dbt.create_indexes", "package_name": "dbt", "root_path": "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages/dbt/include/global_project", "path": "macros/adapters/indexes.sql", "original_file_path": "macros/adapters/indexes.sql", "name": "create_indexes", "macro_sql": "{% macro create_indexes(relation) -%}\n {{ adapter.dispatch('create_indexes', 'dbt')(relation) }}\n{%- endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.dbt.default__create_indexes"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1641494961.8130891}, "macro.dbt.default__create_indexes": {"unique_id": "macro.dbt.default__create_indexes", "package_name": "dbt", "root_path": "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages/dbt/include/global_project", "path": "macros/adapters/indexes.sql", "original_file_path": "macros/adapters/indexes.sql", "name": "default__create_indexes", "macro_sql": "{% macro default__create_indexes(relation) -%}\n {%- set _indexes = config.get('indexes', default=[]) -%}\n\n {% for _index_dict in _indexes %}\n {% set create_index_sql = get_create_index_sql(relation, _index_dict) %}\n {% if create_index_sql %}\n {% do run_query(create_index_sql) %}\n {% endif %}\n {% endfor %}\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.dbt.get_create_index_sql", "macro.dbt.run_query"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1641494961.813958}, "macro.dbt.make_temp_relation": {"unique_id": "macro.dbt.make_temp_relation", "package_name": "dbt", "root_path": "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages/dbt/include/global_project", "path": "macros/adapters/relation.sql", "original_file_path": "macros/adapters/relation.sql", "name": "make_temp_relation", "macro_sql": "{% macro make_temp_relation(base_relation, suffix='__dbt_tmp') %}\n {{ return(adapter.dispatch('make_temp_relation', 'dbt')(base_relation, suffix))}}\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.dbt.default__make_temp_relation"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1641494961.816601}, "macro.dbt.default__make_temp_relation": {"unique_id": "macro.dbt.default__make_temp_relation", "package_name": "dbt", "root_path": "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages/dbt/include/global_project", "path": "macros/adapters/relation.sql", "original_file_path": "macros/adapters/relation.sql", "name": "default__make_temp_relation", "macro_sql": "{% macro default__make_temp_relation(base_relation, suffix) %}\n {% set tmp_identifier = base_relation.identifier ~ suffix %}\n {% set tmp_relation = base_relation.incorporate(\n path={\"identifier\": tmp_identifier}) -%}\n\n {% do return(tmp_relation) %}\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1641494961.81726}, "macro.dbt.drop_relation": {"unique_id": "macro.dbt.drop_relation", "package_name": "dbt", "root_path": "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages/dbt/include/global_project", "path": "macros/adapters/relation.sql", "original_file_path": "macros/adapters/relation.sql", "name": "drop_relation", "macro_sql": "{% macro drop_relation(relation) -%}\n {{ return(adapter.dispatch('drop_relation', 'dbt')(relation)) }}\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.dbt.default__drop_relation"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1641494961.817663}, "macro.dbt.default__drop_relation": {"unique_id": "macro.dbt.default__drop_relation", "package_name": "dbt", "root_path": "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages/dbt/include/global_project", "path": "macros/adapters/relation.sql", "original_file_path": "macros/adapters/relation.sql", "name": "default__drop_relation", "macro_sql": "{% macro default__drop_relation(relation) -%}\n {% call statement('drop_relation', auto_begin=False) -%}\n drop {{ relation.type }} if exists {{ relation }} cascade\n {%- endcall %}\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.dbt.statement"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1641494961.818132}, "macro.dbt.truncate_relation": {"unique_id": "macro.dbt.truncate_relation", "package_name": "dbt", "root_path": "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages/dbt/include/global_project", "path": "macros/adapters/relation.sql", "original_file_path": "macros/adapters/relation.sql", "name": "truncate_relation", "macro_sql": "{% macro truncate_relation(relation) -%}\n {{ return(adapter.dispatch('truncate_relation', 'dbt')(relation)) }}\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.dbt_snowflake.snowflake__truncate_relation"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1641494961.8185291}, "macro.dbt.default__truncate_relation": {"unique_id": "macro.dbt.default__truncate_relation", "package_name": "dbt", "root_path": "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages/dbt/include/global_project", "path": "macros/adapters/relation.sql", "original_file_path": "macros/adapters/relation.sql", "name": "default__truncate_relation", "macro_sql": "{% macro default__truncate_relation(relation) -%}\n {% call statement('truncate_relation') -%}\n truncate table {{ relation }}\n {%- endcall %}\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.dbt.statement"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1641494961.818887}, "macro.dbt.rename_relation": {"unique_id": "macro.dbt.rename_relation", "package_name": "dbt", "root_path": "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages/dbt/include/global_project", "path": "macros/adapters/relation.sql", "original_file_path": "macros/adapters/relation.sql", "name": "rename_relation", "macro_sql": "{% macro rename_relation(from_relation, to_relation) -%}\n {{ return(adapter.dispatch('rename_relation', 'dbt')(from_relation, to_relation)) }}\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.dbt_snowflake.snowflake__rename_relation"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1641494961.819474}, "macro.dbt.default__rename_relation": {"unique_id": "macro.dbt.default__rename_relation", "package_name": "dbt", "root_path": "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages/dbt/include/global_project", "path": "macros/adapters/relation.sql", "original_file_path": "macros/adapters/relation.sql", "name": "default__rename_relation", "macro_sql": "{% macro default__rename_relation(from_relation, to_relation) -%}\n {% set target_name = adapter.quote_as_configured(to_relation.identifier, 'identifier') %}\n {% call statement('rename_relation') -%}\n alter table {{ from_relation }} rename to {{ target_name }}\n {%- endcall %}\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.dbt.statement"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1641494961.820101}, "macro.dbt.get_or_create_relation": {"unique_id": "macro.dbt.get_or_create_relation", "package_name": "dbt", "root_path": "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages/dbt/include/global_project", "path": "macros/adapters/relation.sql", "original_file_path": "macros/adapters/relation.sql", "name": "get_or_create_relation", "macro_sql": "{% macro get_or_create_relation(database, schema, identifier, type) -%}\n {{ return(adapter.dispatch('get_or_create_relation', 'dbt')(database, schema, identifier, type)) }}\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.dbt.default__get_or_create_relation"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1641494961.8206458}, "macro.dbt.default__get_or_create_relation": {"unique_id": "macro.dbt.default__get_or_create_relation", "package_name": "dbt", "root_path": "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages/dbt/include/global_project", "path": "macros/adapters/relation.sql", "original_file_path": "macros/adapters/relation.sql", "name": "default__get_or_create_relation", "macro_sql": "{% macro default__get_or_create_relation(database, schema, identifier, type) %}\n {%- set target_relation = adapter.get_relation(database=database, schema=schema, identifier=identifier) %}\n\n {% if target_relation %}\n {% do return([true, target_relation]) %}\n {% endif %}\n\n {%- set new_relation = api.Relation.create(\n database=database,\n schema=schema,\n identifier=identifier,\n type=type\n ) -%}\n {% do return([false, new_relation]) %}\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1641494961.8218298}, "macro.dbt.load_relation": {"unique_id": "macro.dbt.load_relation", "package_name": "dbt", "root_path": "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages/dbt/include/global_project", "path": "macros/adapters/relation.sql", "original_file_path": "macros/adapters/relation.sql", "name": "load_relation", "macro_sql": "{% macro load_relation(relation) %}\n {% do return(adapter.get_relation(\n database=relation.database,\n schema=relation.schema,\n identifier=relation.identifier\n )) -%}\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1641494961.8223228}, "macro.dbt.drop_relation_if_exists": {"unique_id": "macro.dbt.drop_relation_if_exists", "package_name": "dbt", "root_path": "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages/dbt/include/global_project", "path": "macros/adapters/relation.sql", "original_file_path": "macros/adapters/relation.sql", "name": "drop_relation_if_exists", "macro_sql": "{% macro drop_relation_if_exists(relation) %}\n {% if relation is not none %}\n {{ adapter.drop_relation(relation) }}\n {% endif %}\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1641494961.822751}, "macro.dbt.current_timestamp": {"unique_id": "macro.dbt.current_timestamp", "package_name": "dbt", "root_path": "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages/dbt/include/global_project", "path": "macros/adapters/freshness.sql", "original_file_path": "macros/adapters/freshness.sql", "name": "current_timestamp", "macro_sql": "{% macro current_timestamp() -%}\n {{ adapter.dispatch('current_timestamp', 'dbt')() }}\n{%- endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.dbt_snowflake.snowflake__current_timestamp"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1641494961.823683}, "macro.dbt.default__current_timestamp": {"unique_id": "macro.dbt.default__current_timestamp", "package_name": "dbt", "root_path": "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages/dbt/include/global_project", "path": "macros/adapters/freshness.sql", "original_file_path": "macros/adapters/freshness.sql", "name": "default__current_timestamp", "macro_sql": "{% macro default__current_timestamp() -%}\n {{ exceptions.raise_not_implemented(\n 'current_timestamp macro not implemented for adapter '+adapter.type()) }}\n{%- endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1641494961.824011}, "macro.dbt.collect_freshness": {"unique_id": "macro.dbt.collect_freshness", "package_name": "dbt", "root_path": "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages/dbt/include/global_project", "path": "macros/adapters/freshness.sql", "original_file_path": "macros/adapters/freshness.sql", "name": "collect_freshness", "macro_sql": "{% macro collect_freshness(source, loaded_at_field, filter) %}\n {{ return(adapter.dispatch('collect_freshness', 'dbt')(source, loaded_at_field, filter))}}\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.fivetran_utils.default__collect_freshness"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1641494961.824512}, "macro.dbt.default__collect_freshness": {"unique_id": "macro.dbt.default__collect_freshness", "package_name": "dbt", "root_path": "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages/dbt/include/global_project", "path": "macros/adapters/freshness.sql", "original_file_path": "macros/adapters/freshness.sql", "name": "default__collect_freshness", "macro_sql": "{% macro default__collect_freshness(source, loaded_at_field, filter) %}\n {% call statement('collect_freshness', fetch_result=True, auto_begin=False) -%}\n select\n max({{ loaded_at_field }}) as max_loaded_at,\n {{ current_timestamp() }} as snapshotted_at\n from {{ source }}\n {% if filter %}\n where {{ filter }}\n {% endif %}\n {% endcall %}\n {{ return(load_result('collect_freshness').table) }}\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.dbt.statement", "macro.dbt_utils.current_timestamp"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1641494961.8254359}, "macro.dbt.alter_column_comment": {"unique_id": "macro.dbt.alter_column_comment", "package_name": "dbt", "root_path": "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages/dbt/include/global_project", "path": "macros/adapters/persist_docs.sql", "original_file_path": "macros/adapters/persist_docs.sql", "name": "alter_column_comment", "macro_sql": "{% macro alter_column_comment(relation, column_dict) -%}\n {{ return(adapter.dispatch('alter_column_comment', 'dbt')(relation, column_dict)) }}\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.dbt_snowflake.snowflake__alter_column_comment"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1641494961.826781}, "macro.dbt.default__alter_column_comment": {"unique_id": "macro.dbt.default__alter_column_comment", "package_name": "dbt", "root_path": "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages/dbt/include/global_project", "path": "macros/adapters/persist_docs.sql", "original_file_path": "macros/adapters/persist_docs.sql", "name": "default__alter_column_comment", "macro_sql": "{% macro default__alter_column_comment(relation, column_dict) -%}\n {{ exceptions.raise_not_implemented(\n 'alter_column_comment macro not implemented for adapter '+adapter.type()) }}\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1641494961.827148}, "macro.dbt.alter_relation_comment": {"unique_id": "macro.dbt.alter_relation_comment", "package_name": "dbt", "root_path": "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages/dbt/include/global_project", "path": "macros/adapters/persist_docs.sql", "original_file_path": "macros/adapters/persist_docs.sql", "name": "alter_relation_comment", "macro_sql": "{% macro alter_relation_comment(relation, relation_comment) -%}\n {{ return(adapter.dispatch('alter_relation_comment', 'dbt')(relation, relation_comment)) }}\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.dbt_snowflake.snowflake__alter_relation_comment"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1641494961.82766}, "macro.dbt.default__alter_relation_comment": {"unique_id": "macro.dbt.default__alter_relation_comment", "package_name": "dbt", "root_path": "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages/dbt/include/global_project", "path": "macros/adapters/persist_docs.sql", "original_file_path": "macros/adapters/persist_docs.sql", "name": "default__alter_relation_comment", "macro_sql": "{% macro default__alter_relation_comment(relation, relation_comment) -%}\n {{ exceptions.raise_not_implemented(\n 'alter_relation_comment macro not implemented for adapter '+adapter.type()) }}\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1641494961.828084}, "macro.dbt.persist_docs": {"unique_id": "macro.dbt.persist_docs", "package_name": "dbt", "root_path": "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages/dbt/include/global_project", "path": "macros/adapters/persist_docs.sql", "original_file_path": "macros/adapters/persist_docs.sql", "name": "persist_docs", "macro_sql": "{% macro persist_docs(relation, model, for_relation=true, for_columns=true) -%}\n {{ return(adapter.dispatch('persist_docs', 'dbt')(relation, model, for_relation, for_columns)) }}\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.dbt.default__persist_docs"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1641494961.828667}, "macro.dbt.default__persist_docs": {"unique_id": "macro.dbt.default__persist_docs", "package_name": "dbt", "root_path": "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages/dbt/include/global_project", "path": "macros/adapters/persist_docs.sql", "original_file_path": "macros/adapters/persist_docs.sql", "name": "default__persist_docs", "macro_sql": "{% macro default__persist_docs(relation, model, for_relation, for_columns) -%}\n {% if for_relation and config.persist_relation_docs() and model.description %}\n {% do run_query(alter_relation_comment(relation, model.description)) %}\n {% endif %}\n\n {% if for_columns and config.persist_column_docs() and model.columns %}\n {% do run_query(alter_column_comment(relation, model.columns)) %}\n {% endif %}\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.dbt.run_query", "macro.dbt.alter_relation_comment", "macro.dbt.alter_column_comment"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1641494961.829765}, "macro.dbt.get_catalog": {"unique_id": "macro.dbt.get_catalog", "package_name": "dbt", "root_path": "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages/dbt/include/global_project", "path": "macros/adapters/metadata.sql", "original_file_path": "macros/adapters/metadata.sql", "name": "get_catalog", "macro_sql": "{% macro get_catalog(information_schema, schemas) -%}\n {{ return(adapter.dispatch('get_catalog', 'dbt')(information_schema, schemas)) }}\n{%- endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.dbt_snowflake.snowflake__get_catalog"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1641494961.832154}, "macro.dbt.default__get_catalog": {"unique_id": "macro.dbt.default__get_catalog", "package_name": "dbt", "root_path": "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages/dbt/include/global_project", "path": "macros/adapters/metadata.sql", "original_file_path": "macros/adapters/metadata.sql", "name": "default__get_catalog", "macro_sql": "{% macro default__get_catalog(information_schema, schemas) -%}\n\n {% set typename = adapter.type() %}\n {% set msg -%}\n get_catalog not implemented for {{ typename }}\n {%- endset %}\n\n {{ exceptions.raise_compiler_error(msg) }}\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1641494961.8327198}, "macro.dbt.information_schema_name": {"unique_id": "macro.dbt.information_schema_name", "package_name": "dbt", "root_path": "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages/dbt/include/global_project", "path": "macros/adapters/metadata.sql", "original_file_path": "macros/adapters/metadata.sql", "name": "information_schema_name", "macro_sql": "{% macro information_schema_name(database) %}\n {{ return(adapter.dispatch('information_schema_name', 'dbt')(database)) }}\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.dbt.default__information_schema_name"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1641494961.833129}, "macro.dbt.default__information_schema_name": {"unique_id": "macro.dbt.default__information_schema_name", "package_name": "dbt", "root_path": "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages/dbt/include/global_project", "path": "macros/adapters/metadata.sql", "original_file_path": "macros/adapters/metadata.sql", "name": "default__information_schema_name", "macro_sql": "{% macro default__information_schema_name(database) -%}\n {%- if database -%}\n {{ database }}.INFORMATION_SCHEMA\n {%- else -%}\n INFORMATION_SCHEMA\n {%- endif -%}\n{%- endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1641494961.833471}, "macro.dbt.list_schemas": {"unique_id": "macro.dbt.list_schemas", "package_name": "dbt", "root_path": "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages/dbt/include/global_project", "path": "macros/adapters/metadata.sql", "original_file_path": "macros/adapters/metadata.sql", "name": "list_schemas", "macro_sql": "{% macro list_schemas(database) -%}\n {{ return(adapter.dispatch('list_schemas', 'dbt')(database)) }}\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.dbt_snowflake.snowflake__list_schemas"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1641494961.833866}, "macro.dbt.default__list_schemas": {"unique_id": "macro.dbt.default__list_schemas", "package_name": "dbt", "root_path": "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages/dbt/include/global_project", "path": "macros/adapters/metadata.sql", "original_file_path": "macros/adapters/metadata.sql", "name": "default__list_schemas", "macro_sql": "{% macro default__list_schemas(database) -%}\n {% set sql %}\n select distinct schema_name\n from {{ information_schema_name(database) }}.SCHEMATA\n where catalog_name ilike '{{ database }}'\n {% endset %}\n {{ return(run_query(sql)) }}\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.dbt.information_schema_name", "macro.dbt.run_query"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1641494961.834402}, "macro.dbt.check_schema_exists": {"unique_id": "macro.dbt.check_schema_exists", "package_name": "dbt", "root_path": "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages/dbt/include/global_project", "path": "macros/adapters/metadata.sql", "original_file_path": "macros/adapters/metadata.sql", "name": "check_schema_exists", "macro_sql": "{% macro check_schema_exists(information_schema, schema) -%}\n {{ return(adapter.dispatch('check_schema_exists', 'dbt')(information_schema, schema)) }}\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.dbt_snowflake.snowflake__check_schema_exists"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1641494961.8348439}, "macro.dbt.default__check_schema_exists": {"unique_id": "macro.dbt.default__check_schema_exists", "package_name": "dbt", "root_path": "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages/dbt/include/global_project", "path": "macros/adapters/metadata.sql", "original_file_path": "macros/adapters/metadata.sql", "name": "default__check_schema_exists", "macro_sql": "{% macro default__check_schema_exists(information_schema, schema) -%}\n {% set sql -%}\n select count(*)\n from {{ information_schema.replace(information_schema_view='SCHEMATA') }}\n where catalog_name='{{ information_schema.database }}'\n and schema_name='{{ schema }}'\n {%- endset %}\n {{ return(run_query(sql)) }}\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.dbt_utils.replace", "macro.dbt.run_query"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1641494961.8356218}, "macro.dbt.list_relations_without_caching": {"unique_id": "macro.dbt.list_relations_without_caching", "package_name": "dbt", "root_path": "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages/dbt/include/global_project", "path": "macros/adapters/metadata.sql", "original_file_path": "macros/adapters/metadata.sql", "name": "list_relations_without_caching", "macro_sql": "{% macro list_relations_without_caching(schema_relation) %}\n {{ return(adapter.dispatch('list_relations_without_caching', 'dbt')(schema_relation)) }}\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.dbt_snowflake.snowflake__list_relations_without_caching"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1641494961.83603}, "macro.dbt.default__list_relations_without_caching": {"unique_id": "macro.dbt.default__list_relations_without_caching", "package_name": "dbt", "root_path": "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages/dbt/include/global_project", "path": "macros/adapters/metadata.sql", "original_file_path": "macros/adapters/metadata.sql", "name": "default__list_relations_without_caching", "macro_sql": "{% macro default__list_relations_without_caching(schema_relation) %}\n {{ exceptions.raise_not_implemented(\n 'list_relations_without_caching macro not implemented for adapter '+adapter.type()) }}\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1641494961.836382}, "macro.dbt.get_columns_in_relation": {"unique_id": "macro.dbt.get_columns_in_relation", "package_name": "dbt", "root_path": "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages/dbt/include/global_project", "path": "macros/adapters/columns.sql", "original_file_path": "macros/adapters/columns.sql", "name": "get_columns_in_relation", "macro_sql": "{% macro get_columns_in_relation(relation) -%}\n {{ return(adapter.dispatch('get_columns_in_relation', 'dbt')(relation)) }}\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.dbt_snowflake.snowflake__get_columns_in_relation"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1641494961.83917}, "macro.dbt.default__get_columns_in_relation": {"unique_id": "macro.dbt.default__get_columns_in_relation", "package_name": "dbt", "root_path": "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages/dbt/include/global_project", "path": "macros/adapters/columns.sql", "original_file_path": "macros/adapters/columns.sql", "name": "default__get_columns_in_relation", "macro_sql": "{% macro default__get_columns_in_relation(relation) -%}\n {{ exceptions.raise_not_implemented(\n 'get_columns_in_relation macro not implemented for adapter '+adapter.type()) }}\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1641494961.839552}, "macro.dbt.sql_convert_columns_in_relation": {"unique_id": "macro.dbt.sql_convert_columns_in_relation", "package_name": "dbt", "root_path": "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages/dbt/include/global_project", "path": "macros/adapters/columns.sql", "original_file_path": "macros/adapters/columns.sql", "name": "sql_convert_columns_in_relation", "macro_sql": "{% macro sql_convert_columns_in_relation(table) -%}\n {% set columns = [] %}\n {% for row in table %}\n {% do columns.append(api.Column(*row)) %}\n {% endfor %}\n {{ return(columns) }}\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1641494961.840226}, "macro.dbt.get_columns_in_query": {"unique_id": "macro.dbt.get_columns_in_query", "package_name": "dbt", "root_path": "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages/dbt/include/global_project", "path": "macros/adapters/columns.sql", "original_file_path": "macros/adapters/columns.sql", "name": "get_columns_in_query", "macro_sql": "{% macro get_columns_in_query(select_sql) -%}\n {{ return(adapter.dispatch('get_columns_in_query', 'dbt')(select_sql)) }}\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.dbt.default__get_columns_in_query"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1641494961.84063}, "macro.dbt.default__get_columns_in_query": {"unique_id": "macro.dbt.default__get_columns_in_query", "package_name": "dbt", "root_path": "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages/dbt/include/global_project", "path": "macros/adapters/columns.sql", "original_file_path": "macros/adapters/columns.sql", "name": "default__get_columns_in_query", "macro_sql": "{% macro default__get_columns_in_query(select_sql) %}\n {% call statement('get_columns_in_query', fetch_result=True, auto_begin=False) -%}\n select * from (\n {{ select_sql }}\n ) as __dbt_sbq\n where false\n limit 0\n {% endcall %}\n\n {{ return(load_result('get_columns_in_query').table.columns | map(attribute='name') | list) }}\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.dbt.statement"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1641494961.841363}, "macro.dbt.alter_column_type": {"unique_id": "macro.dbt.alter_column_type", "package_name": "dbt", "root_path": "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages/dbt/include/global_project", "path": "macros/adapters/columns.sql", "original_file_path": "macros/adapters/columns.sql", "name": "alter_column_type", "macro_sql": "{% macro alter_column_type(relation, column_name, new_column_type) -%}\n {{ return(adapter.dispatch('alter_column_type', 'dbt')(relation, column_name, new_column_type)) }}\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.dbt_snowflake.snowflake__alter_column_type"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1641494961.8419719}, "macro.dbt.default__alter_column_type": {"unique_id": "macro.dbt.default__alter_column_type", "package_name": "dbt", "root_path": "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages/dbt/include/global_project", "path": "macros/adapters/columns.sql", "original_file_path": "macros/adapters/columns.sql", "name": "default__alter_column_type", "macro_sql": "{% macro default__alter_column_type(relation, column_name, new_column_type) -%}\n {#\n 1. Create a new column (w/ temp name and correct type)\n 2. Copy data over to it\n 3. Drop the existing column (cascade!)\n 4. Rename the new column to existing column\n #}\n {%- set tmp_column = column_name + \"__dbt_alter\" -%}\n\n {% call statement('alter_column_type') %}\n alter table {{ relation }} add column {{ adapter.quote(tmp_column) }} {{ new_column_type }};\n update {{ relation }} set {{ adapter.quote(tmp_column) }} = {{ adapter.quote(column_name) }};\n alter table {{ relation }} drop column {{ adapter.quote(column_name) }} cascade;\n alter table {{ relation }} rename column {{ adapter.quote(tmp_column) }} to {{ adapter.quote(column_name) }}\n {% endcall %}\n\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.dbt.statement"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1641494961.843286}, "macro.dbt.alter_relation_add_remove_columns": {"unique_id": "macro.dbt.alter_relation_add_remove_columns", "package_name": "dbt", "root_path": "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages/dbt/include/global_project", "path": "macros/adapters/columns.sql", "original_file_path": "macros/adapters/columns.sql", "name": "alter_relation_add_remove_columns", "macro_sql": "{% macro alter_relation_add_remove_columns(relation, add_columns = none, remove_columns = none) -%}\n {{ return(adapter.dispatch('alter_relation_add_remove_columns', 'dbt')(relation, add_columns, remove_columns)) }}\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.dbt_snowflake.snowflake__alter_relation_add_remove_columns"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1641494961.843841}, "macro.dbt.default__alter_relation_add_remove_columns": {"unique_id": "macro.dbt.default__alter_relation_add_remove_columns", "package_name": "dbt", "root_path": "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages/dbt/include/global_project", "path": "macros/adapters/columns.sql", "original_file_path": "macros/adapters/columns.sql", "name": "default__alter_relation_add_remove_columns", "macro_sql": "{% macro default__alter_relation_add_remove_columns(relation, add_columns, remove_columns) %}\n \n {% if add_columns is none %}\n {% set add_columns = [] %}\n {% endif %}\n {% if remove_columns is none %}\n {% set remove_columns = [] %}\n {% endif %}\n \n {% set sql -%}\n \n alter {{ relation.type }} {{ relation }}\n \n {% for column in add_columns %}\n add column {{ column.name }} {{ column.data_type }}{{ ',' if not loop.last }}\n {% endfor %}{{ ',' if add_columns and remove_columns }}\n \n {% for column in remove_columns %}\n drop column {{ column.name }}{{ ',' if not loop.last }}\n {% endfor %}\n \n {%- endset -%}\n\n {% do run_query(sql) %}\n\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.dbt.run_query"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1641494961.845542}, "macro.dbt.test_unique": {"unique_id": "macro.dbt.test_unique", "package_name": "dbt", "root_path": "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages/dbt/include/global_project", "path": "tests/generic/builtin.sql", "original_file_path": "tests/generic/builtin.sql", "name": "test_unique", "macro_sql": "{% test unique(model, column_name) %}\n {% set macro = adapter.dispatch('test_unique', 'dbt') %}\n {{ macro(model, column_name) }}\n{% endtest %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.dbt.default__test_unique"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1641494961.846615}, "macro.dbt.test_not_null": {"unique_id": "macro.dbt.test_not_null", "package_name": "dbt", "root_path": "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages/dbt/include/global_project", "path": "tests/generic/builtin.sql", "original_file_path": "tests/generic/builtin.sql", "name": "test_not_null", "macro_sql": "{% test not_null(model, column_name) %}\n {% set macro = adapter.dispatch('test_not_null', 'dbt') %}\n {{ macro(model, column_name) }}\n{% endtest %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.dbt.default__test_not_null"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1641494961.847127}, "macro.dbt.test_accepted_values": {"unique_id": "macro.dbt.test_accepted_values", "package_name": "dbt", "root_path": "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages/dbt/include/global_project", "path": "tests/generic/builtin.sql", "original_file_path": "tests/generic/builtin.sql", "name": "test_accepted_values", "macro_sql": "{% test accepted_values(model, column_name, values, quote=True) %}\n {% set macro = adapter.dispatch('test_accepted_values', 'dbt') %}\n {{ macro(model, column_name, values, quote) }}\n{% endtest %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.dbt.default__test_accepted_values"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1641494961.8477619}, "macro.dbt.test_relationships": {"unique_id": "macro.dbt.test_relationships", "package_name": "dbt", "root_path": "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages/dbt/include/global_project", "path": "tests/generic/builtin.sql", "original_file_path": "tests/generic/builtin.sql", "name": "test_relationships", "macro_sql": "{% test relationships(model, column_name, to, field) %}\n {% set macro = adapter.dispatch('test_relationships', 'dbt') %}\n {{ macro(model, column_name, to, field) }}\n{% endtest %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.dbt.default__test_relationships"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1641494961.848366}, "macro.dbt_utils.except": {"unique_id": "macro.dbt_utils.except", "package_name": "dbt_utils", "root_path": "/Users/renee.li/Documents/dbt/tiktok/develop/dbt_packages/dbt_utils", "path": "macros/cross_db_utils/except.sql", "original_file_path": "macros/cross_db_utils/except.sql", "name": "except", "macro_sql": "{% macro except() %}\n {{ return(adapter.dispatch('except', 'dbt_utils')()) }}\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.dbt_utils.default__except"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1641494961.849011}, "macro.dbt_utils.default__except": {"unique_id": "macro.dbt_utils.default__except", "package_name": "dbt_utils", "root_path": "/Users/renee.li/Documents/dbt/tiktok/develop/dbt_packages/dbt_utils", "path": "macros/cross_db_utils/except.sql", "original_file_path": "macros/cross_db_utils/except.sql", "name": "default__except", "macro_sql": "{% macro default__except() %}\n\n except\n\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1641494961.849181}, "macro.dbt_utils.bigquery__except": {"unique_id": "macro.dbt_utils.bigquery__except", "package_name": "dbt_utils", "root_path": "/Users/renee.li/Documents/dbt/tiktok/develop/dbt_packages/dbt_utils", "path": "macros/cross_db_utils/except.sql", "original_file_path": "macros/cross_db_utils/except.sql", "name": "bigquery__except", "macro_sql": "{% macro bigquery__except() %}\n\n except distinct\n\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1641494961.849345}, "macro.dbt_utils.replace": {"unique_id": "macro.dbt_utils.replace", "package_name": "dbt_utils", "root_path": "/Users/renee.li/Documents/dbt/tiktok/develop/dbt_packages/dbt_utils", "path": "macros/cross_db_utils/replace.sql", "original_file_path": "macros/cross_db_utils/replace.sql", "name": "replace", "macro_sql": "{% macro replace(field, old_chars, new_chars) -%}\n {{ return(adapter.dispatch('replace', 'dbt_utils') (field, old_chars, new_chars)) }}\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.dbt_utils.default__replace"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1641494961.850132}, "macro.dbt_utils.default__replace": {"unique_id": "macro.dbt_utils.default__replace", "package_name": "dbt_utils", "root_path": "/Users/renee.li/Documents/dbt/tiktok/develop/dbt_packages/dbt_utils", "path": "macros/cross_db_utils/replace.sql", "original_file_path": "macros/cross_db_utils/replace.sql", "name": "default__replace", "macro_sql": "{% macro default__replace(field, old_chars, new_chars) %}\n\n replace(\n {{ field }},\n {{ old_chars }},\n {{ new_chars }}\n )\n \n\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1641494961.850538}, "macro.dbt_utils.concat": {"unique_id": "macro.dbt_utils.concat", "package_name": "dbt_utils", "root_path": "/Users/renee.li/Documents/dbt/tiktok/develop/dbt_packages/dbt_utils", "path": "macros/cross_db_utils/concat.sql", "original_file_path": "macros/cross_db_utils/concat.sql", "name": "concat", "macro_sql": "{% macro concat(fields) -%}\n {{ return(adapter.dispatch('concat', 'dbt_utils')(fields)) }}\n{%- endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.dbt_utils.default__concat"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1641494961.851176}, "macro.dbt_utils.default__concat": {"unique_id": "macro.dbt_utils.default__concat", "package_name": "dbt_utils", "root_path": "/Users/renee.li/Documents/dbt/tiktok/develop/dbt_packages/dbt_utils", "path": "macros/cross_db_utils/concat.sql", "original_file_path": "macros/cross_db_utils/concat.sql", "name": "default__concat", "macro_sql": "{% macro default__concat(fields) -%}\n {{ fields|join(' || ') }}\n{%- endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1641494961.851457}, "macro.dbt_utils.type_string": {"unique_id": "macro.dbt_utils.type_string", "package_name": "dbt_utils", "root_path": "/Users/renee.li/Documents/dbt/tiktok/develop/dbt_packages/dbt_utils", "path": "macros/cross_db_utils/datatypes.sql", "original_file_path": "macros/cross_db_utils/datatypes.sql", "name": "type_string", "macro_sql": "\n\n{%- macro type_string() -%}\n {{ return(adapter.dispatch('type_string', 'dbt_utils')()) }}\n{%- endmacro -%}\n\n", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.dbt_utils.snowflake__type_string"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1641494961.852748}, "macro.dbt_utils.default__type_string": {"unique_id": "macro.dbt_utils.default__type_string", "package_name": "dbt_utils", "root_path": "/Users/renee.li/Documents/dbt/tiktok/develop/dbt_packages/dbt_utils", "path": "macros/cross_db_utils/datatypes.sql", "original_file_path": "macros/cross_db_utils/datatypes.sql", "name": "default__type_string", "macro_sql": "{% macro default__type_string() %}\n string\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1641494961.853025}, "macro.dbt_utils.redshift__type_string": {"unique_id": "macro.dbt_utils.redshift__type_string", "package_name": "dbt_utils", "root_path": "/Users/renee.li/Documents/dbt/tiktok/develop/dbt_packages/dbt_utils", "path": "macros/cross_db_utils/datatypes.sql", "original_file_path": "macros/cross_db_utils/datatypes.sql", "name": "redshift__type_string", "macro_sql": "\n\n{%- macro redshift__type_string() -%}\n varchar\n{%- endmacro -%}\n\n", "resource_type": "macro", "tags": [], "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1641494961.853191}, "macro.dbt_utils.postgres__type_string": {"unique_id": "macro.dbt_utils.postgres__type_string", "package_name": "dbt_utils", "root_path": "/Users/renee.li/Documents/dbt/tiktok/develop/dbt_packages/dbt_utils", "path": "macros/cross_db_utils/datatypes.sql", "original_file_path": "macros/cross_db_utils/datatypes.sql", "name": "postgres__type_string", "macro_sql": "{% macro postgres__type_string() %}\n varchar\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1641494961.8533518}, "macro.dbt_utils.snowflake__type_string": {"unique_id": "macro.dbt_utils.snowflake__type_string", "package_name": "dbt_utils", "root_path": "/Users/renee.li/Documents/dbt/tiktok/develop/dbt_packages/dbt_utils", "path": "macros/cross_db_utils/datatypes.sql", "original_file_path": "macros/cross_db_utils/datatypes.sql", "name": "snowflake__type_string", "macro_sql": "{% macro snowflake__type_string() %}\n varchar\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1641494961.8535109}, "macro.dbt_utils.type_timestamp": {"unique_id": "macro.dbt_utils.type_timestamp", "package_name": "dbt_utils", "root_path": "/Users/renee.li/Documents/dbt/tiktok/develop/dbt_packages/dbt_utils", "path": "macros/cross_db_utils/datatypes.sql", "original_file_path": "macros/cross_db_utils/datatypes.sql", "name": "type_timestamp", "macro_sql": "\n\n{%- macro type_timestamp() -%}\n {{ return(adapter.dispatch('type_timestamp', 'dbt_utils')()) }}\n{%- endmacro -%}\n\n", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.dbt_utils.snowflake__type_timestamp"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1641494961.853863}, "macro.dbt_utils.default__type_timestamp": {"unique_id": "macro.dbt_utils.default__type_timestamp", "package_name": "dbt_utils", "root_path": "/Users/renee.li/Documents/dbt/tiktok/develop/dbt_packages/dbt_utils", "path": "macros/cross_db_utils/datatypes.sql", "original_file_path": "macros/cross_db_utils/datatypes.sql", "name": "default__type_timestamp", "macro_sql": "{% macro default__type_timestamp() %}\n timestamp\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1641494961.854031}, "macro.dbt_utils.snowflake__type_timestamp": {"unique_id": "macro.dbt_utils.snowflake__type_timestamp", "package_name": "dbt_utils", "root_path": "/Users/renee.li/Documents/dbt/tiktok/develop/dbt_packages/dbt_utils", "path": "macros/cross_db_utils/datatypes.sql", "original_file_path": "macros/cross_db_utils/datatypes.sql", "name": "snowflake__type_timestamp", "macro_sql": "{% macro snowflake__type_timestamp() %}\n timestamp_ntz\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1641494961.854193}, "macro.dbt_utils.type_float": {"unique_id": "macro.dbt_utils.type_float", "package_name": "dbt_utils", "root_path": "/Users/renee.li/Documents/dbt/tiktok/develop/dbt_packages/dbt_utils", "path": "macros/cross_db_utils/datatypes.sql", "original_file_path": "macros/cross_db_utils/datatypes.sql", "name": "type_float", "macro_sql": "\n\n{%- macro type_float() -%}\n {{ return(adapter.dispatch('type_float', 'dbt_utils')()) }}\n{%- endmacro -%}\n\n", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.dbt_utils.default__type_float"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1641494961.854542}, "macro.dbt_utils.default__type_float": {"unique_id": "macro.dbt_utils.default__type_float", "package_name": "dbt_utils", "root_path": "/Users/renee.li/Documents/dbt/tiktok/develop/dbt_packages/dbt_utils", "path": "macros/cross_db_utils/datatypes.sql", "original_file_path": "macros/cross_db_utils/datatypes.sql", "name": "default__type_float", "macro_sql": "{% macro default__type_float() %}\n float\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1641494961.854707}, "macro.dbt_utils.bigquery__type_float": {"unique_id": "macro.dbt_utils.bigquery__type_float", "package_name": "dbt_utils", "root_path": "/Users/renee.li/Documents/dbt/tiktok/develop/dbt_packages/dbt_utils", "path": "macros/cross_db_utils/datatypes.sql", "original_file_path": "macros/cross_db_utils/datatypes.sql", "name": "bigquery__type_float", "macro_sql": "{% macro bigquery__type_float() %}\n float64\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1641494961.854869}, "macro.dbt_utils.type_numeric": {"unique_id": "macro.dbt_utils.type_numeric", "package_name": "dbt_utils", "root_path": "/Users/renee.li/Documents/dbt/tiktok/develop/dbt_packages/dbt_utils", "path": "macros/cross_db_utils/datatypes.sql", "original_file_path": "macros/cross_db_utils/datatypes.sql", "name": "type_numeric", "macro_sql": "\n\n{%- macro type_numeric() -%}\n {{ return(adapter.dispatch('type_numeric', 'dbt_utils')()) }}\n{%- endmacro -%}\n\n", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.dbt_utils.default__type_numeric"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1641494961.85522}, "macro.dbt_utils.default__type_numeric": {"unique_id": "macro.dbt_utils.default__type_numeric", "package_name": "dbt_utils", "root_path": "/Users/renee.li/Documents/dbt/tiktok/develop/dbt_packages/dbt_utils", "path": "macros/cross_db_utils/datatypes.sql", "original_file_path": "macros/cross_db_utils/datatypes.sql", "name": "default__type_numeric", "macro_sql": "{% macro default__type_numeric() %}\n numeric(28, 6)\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1641494961.855385}, "macro.dbt_utils.bigquery__type_numeric": {"unique_id": "macro.dbt_utils.bigquery__type_numeric", "package_name": "dbt_utils", "root_path": "/Users/renee.li/Documents/dbt/tiktok/develop/dbt_packages/dbt_utils", "path": "macros/cross_db_utils/datatypes.sql", "original_file_path": "macros/cross_db_utils/datatypes.sql", "name": "bigquery__type_numeric", "macro_sql": "{% macro bigquery__type_numeric() %}\n numeric\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1641494961.855545}, "macro.dbt_utils.type_bigint": {"unique_id": "macro.dbt_utils.type_bigint", "package_name": "dbt_utils", "root_path": "/Users/renee.li/Documents/dbt/tiktok/develop/dbt_packages/dbt_utils", "path": "macros/cross_db_utils/datatypes.sql", "original_file_path": "macros/cross_db_utils/datatypes.sql", "name": "type_bigint", "macro_sql": "\n\n{%- macro type_bigint() -%}\n {{ return(adapter.dispatch('type_bigint', 'dbt_utils')()) }}\n{%- endmacro -%}\n\n", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.dbt_utils.default__type_bigint"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1641494961.855892}, "macro.dbt_utils.default__type_bigint": {"unique_id": "macro.dbt_utils.default__type_bigint", "package_name": "dbt_utils", "root_path": "/Users/renee.li/Documents/dbt/tiktok/develop/dbt_packages/dbt_utils", "path": "macros/cross_db_utils/datatypes.sql", "original_file_path": "macros/cross_db_utils/datatypes.sql", "name": "default__type_bigint", "macro_sql": "{% macro default__type_bigint() %}\n bigint\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1641494961.856054}, "macro.dbt_utils.bigquery__type_bigint": {"unique_id": "macro.dbt_utils.bigquery__type_bigint", "package_name": "dbt_utils", "root_path": "/Users/renee.li/Documents/dbt/tiktok/develop/dbt_packages/dbt_utils", "path": "macros/cross_db_utils/datatypes.sql", "original_file_path": "macros/cross_db_utils/datatypes.sql", "name": "bigquery__type_bigint", "macro_sql": "{% macro bigquery__type_bigint() %}\n int64\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1641494961.856214}, "macro.dbt_utils.type_int": {"unique_id": "macro.dbt_utils.type_int", "package_name": "dbt_utils", "root_path": "/Users/renee.li/Documents/dbt/tiktok/develop/dbt_packages/dbt_utils", "path": "macros/cross_db_utils/datatypes.sql", "original_file_path": "macros/cross_db_utils/datatypes.sql", "name": "type_int", "macro_sql": "\n\n{%- macro type_int() -%}\n {{ return(adapter.dispatch('type_int', 'dbt_utils')()) }}\n{%- endmacro -%}\n\n", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.dbt_utils.default__type_int"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1641494961.856559}, "macro.dbt_utils.default__type_int": {"unique_id": "macro.dbt_utils.default__type_int", "package_name": "dbt_utils", "root_path": "/Users/renee.li/Documents/dbt/tiktok/develop/dbt_packages/dbt_utils", "path": "macros/cross_db_utils/datatypes.sql", "original_file_path": "macros/cross_db_utils/datatypes.sql", "name": "default__type_int", "macro_sql": "{% macro default__type_int() %}\n int\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1641494961.856724}, "macro.dbt_utils.bigquery__type_int": {"unique_id": "macro.dbt_utils.bigquery__type_int", "package_name": "dbt_utils", "root_path": "/Users/renee.li/Documents/dbt/tiktok/develop/dbt_packages/dbt_utils", "path": "macros/cross_db_utils/datatypes.sql", "original_file_path": "macros/cross_db_utils/datatypes.sql", "name": "bigquery__type_int", "macro_sql": "{% macro bigquery__type_int() %}\n int64\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1641494961.856883}, "macro.dbt_utils._is_relation": {"unique_id": "macro.dbt_utils._is_relation", "package_name": "dbt_utils", "root_path": "/Users/renee.li/Documents/dbt/tiktok/develop/dbt_packages/dbt_utils", "path": "macros/cross_db_utils/_is_relation.sql", "original_file_path": "macros/cross_db_utils/_is_relation.sql", "name": "_is_relation", "macro_sql": "{% macro _is_relation(obj, macro) %}\n {%- if not (obj is mapping and obj.get('metadata', {}).get('type', '').endswith('Relation')) -%}\n {%- do exceptions.raise_compiler_error(\"Macro \" ~ macro ~ \" expected a Relation but received the value: \" ~ obj) -%}\n {%- endif -%}\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1641494961.857928}, "macro.dbt_utils.length": {"unique_id": "macro.dbt_utils.length", "package_name": "dbt_utils", "root_path": "/Users/renee.li/Documents/dbt/tiktok/develop/dbt_packages/dbt_utils", "path": "macros/cross_db_utils/length.sql", "original_file_path": "macros/cross_db_utils/length.sql", "name": "length", "macro_sql": "{% macro length(expression) -%}\n {{ return(adapter.dispatch('length', 'dbt_utils') (expression)) }}\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.dbt_utils.default__length"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1641494961.8586502}, "macro.dbt_utils.default__length": {"unique_id": "macro.dbt_utils.default__length", "package_name": "dbt_utils", "root_path": "/Users/renee.li/Documents/dbt/tiktok/develop/dbt_packages/dbt_utils", "path": "macros/cross_db_utils/length.sql", "original_file_path": "macros/cross_db_utils/length.sql", "name": "default__length", "macro_sql": "{% macro default__length(expression) %}\n \n length(\n {{ expression }}\n )\n \n{%- endmacro -%}\n\n\n", "resource_type": "macro", "tags": [], "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1641494961.858887}, "macro.dbt_utils.redshift__length": {"unique_id": "macro.dbt_utils.redshift__length", "package_name": "dbt_utils", "root_path": "/Users/renee.li/Documents/dbt/tiktok/develop/dbt_packages/dbt_utils", "path": "macros/cross_db_utils/length.sql", "original_file_path": "macros/cross_db_utils/length.sql", "name": "redshift__length", "macro_sql": "{% macro redshift__length(expression) %}\n\n len(\n {{ expression }}\n )\n \n{%- endmacro -%}", "resource_type": "macro", "tags": [], "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1641494961.859117}, "macro.dbt_utils.dateadd": {"unique_id": "macro.dbt_utils.dateadd", "package_name": "dbt_utils", "root_path": "/Users/renee.li/Documents/dbt/tiktok/develop/dbt_packages/dbt_utils", "path": "macros/cross_db_utils/dateadd.sql", "original_file_path": "macros/cross_db_utils/dateadd.sql", "name": "dateadd", "macro_sql": "{% macro dateadd(datepart, interval, from_date_or_timestamp) %}\n {{ return(adapter.dispatch('dateadd', 'dbt_utils')(datepart, interval, from_date_or_timestamp)) }}\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.dbt_utils.default__dateadd"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1641494961.8602371}, "macro.dbt_utils.default__dateadd": {"unique_id": "macro.dbt_utils.default__dateadd", "package_name": "dbt_utils", "root_path": "/Users/renee.li/Documents/dbt/tiktok/develop/dbt_packages/dbt_utils", "path": "macros/cross_db_utils/dateadd.sql", "original_file_path": "macros/cross_db_utils/dateadd.sql", "name": "default__dateadd", "macro_sql": "{% macro default__dateadd(datepart, interval, from_date_or_timestamp) %}\n\n dateadd(\n {{ datepart }},\n {{ interval }},\n {{ from_date_or_timestamp }}\n )\n\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1641494961.860717}, "macro.dbt_utils.bigquery__dateadd": {"unique_id": "macro.dbt_utils.bigquery__dateadd", "package_name": "dbt_utils", "root_path": "/Users/renee.li/Documents/dbt/tiktok/develop/dbt_packages/dbt_utils", "path": "macros/cross_db_utils/dateadd.sql", "original_file_path": "macros/cross_db_utils/dateadd.sql", "name": "bigquery__dateadd", "macro_sql": "{% macro bigquery__dateadd(datepart, interval, from_date_or_timestamp) %}\n\n datetime_add(\n cast( {{ from_date_or_timestamp }} as datetime),\n interval {{ interval }} {{ datepart }}\n )\n\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1641494961.861093}, "macro.dbt_utils.postgres__dateadd": {"unique_id": "macro.dbt_utils.postgres__dateadd", "package_name": "dbt_utils", "root_path": "/Users/renee.li/Documents/dbt/tiktok/develop/dbt_packages/dbt_utils", "path": "macros/cross_db_utils/dateadd.sql", "original_file_path": "macros/cross_db_utils/dateadd.sql", "name": "postgres__dateadd", "macro_sql": "{% macro postgres__dateadd(datepart, interval, from_date_or_timestamp) %}\n\n {{ from_date_or_timestamp }} + ((interval '1 {{ datepart }}') * ({{ interval }}))\n\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1641494961.86145}, "macro.dbt_utils.redshift__dateadd": {"unique_id": "macro.dbt_utils.redshift__dateadd", "package_name": "dbt_utils", "root_path": "/Users/renee.li/Documents/dbt/tiktok/develop/dbt_packages/dbt_utils", "path": "macros/cross_db_utils/dateadd.sql", "original_file_path": "macros/cross_db_utils/dateadd.sql", "name": "redshift__dateadd", "macro_sql": "{% macro redshift__dateadd(datepart, interval, from_date_or_timestamp) %}\n\n {{ return(dbt_utils.default__dateadd(datepart, interval, from_date_or_timestamp)) }}\n\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.dbt_utils.default__dateadd"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1641494961.861877}, "macro.dbt_utils.intersect": {"unique_id": "macro.dbt_utils.intersect", "package_name": "dbt_utils", "root_path": "/Users/renee.li/Documents/dbt/tiktok/develop/dbt_packages/dbt_utils", "path": "macros/cross_db_utils/intersect.sql", "original_file_path": "macros/cross_db_utils/intersect.sql", "name": "intersect", "macro_sql": "{% macro intersect() %}\n {{ return(adapter.dispatch('intersect', 'dbt_utils')()) }}\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.dbt_utils.default__intersect"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1641494961.8625169}, "macro.dbt_utils.default__intersect": {"unique_id": "macro.dbt_utils.default__intersect", "package_name": "dbt_utils", "root_path": "/Users/renee.li/Documents/dbt/tiktok/develop/dbt_packages/dbt_utils", "path": "macros/cross_db_utils/intersect.sql", "original_file_path": "macros/cross_db_utils/intersect.sql", "name": "default__intersect", "macro_sql": "{% macro default__intersect() %}\n\n intersect\n\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1641494961.862688}, "macro.dbt_utils.bigquery__intersect": {"unique_id": "macro.dbt_utils.bigquery__intersect", "package_name": "dbt_utils", "root_path": "/Users/renee.li/Documents/dbt/tiktok/develop/dbt_packages/dbt_utils", "path": "macros/cross_db_utils/intersect.sql", "original_file_path": "macros/cross_db_utils/intersect.sql", "name": "bigquery__intersect", "macro_sql": "{% macro bigquery__intersect() %}\n\n intersect distinct\n\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1641494961.862852}, "macro.dbt_utils.right": {"unique_id": "macro.dbt_utils.right", "package_name": "dbt_utils", "root_path": "/Users/renee.li/Documents/dbt/tiktok/develop/dbt_packages/dbt_utils", "path": "macros/cross_db_utils/right.sql", "original_file_path": "macros/cross_db_utils/right.sql", "name": "right", "macro_sql": "{% macro right(string_text, length_expression) -%}\n {{ return(adapter.dispatch('right', 'dbt_utils') (string_text, length_expression)) }}\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.dbt_utils.snowflake__right"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1641494961.8639228}, "macro.dbt_utils.default__right": {"unique_id": "macro.dbt_utils.default__right", "package_name": "dbt_utils", "root_path": "/Users/renee.li/Documents/dbt/tiktok/develop/dbt_packages/dbt_utils", "path": "macros/cross_db_utils/right.sql", "original_file_path": "macros/cross_db_utils/right.sql", "name": "default__right", "macro_sql": "{% macro default__right(string_text, length_expression) %}\n\n right(\n {{ string_text }},\n {{ length_expression }}\n )\n \n{%- endmacro -%}\n\n", "resource_type": "macro", "tags": [], "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1641494961.864384}, "macro.dbt_utils.bigquery__right": {"unique_id": "macro.dbt_utils.bigquery__right", "package_name": "dbt_utils", "root_path": "/Users/renee.li/Documents/dbt/tiktok/develop/dbt_packages/dbt_utils", "path": "macros/cross_db_utils/right.sql", "original_file_path": "macros/cross_db_utils/right.sql", "name": "bigquery__right", "macro_sql": "{% macro bigquery__right(string_text, length_expression) %}\n\n case when {{ length_expression }} = 0 \n then ''\n else \n substr(\n {{ string_text }},\n -1 * ({{ length_expression }})\n )\n end\n\n{%- endmacro -%}\n\n", "resource_type": "macro", "tags": [], "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1641494961.8647308}, "macro.dbt_utils.snowflake__right": {"unique_id": "macro.dbt_utils.snowflake__right", "package_name": "dbt_utils", "root_path": "/Users/renee.li/Documents/dbt/tiktok/develop/dbt_packages/dbt_utils", "path": "macros/cross_db_utils/right.sql", "original_file_path": "macros/cross_db_utils/right.sql", "name": "snowflake__right", "macro_sql": "{% macro snowflake__right(string_text, length_expression) %}\n\n case when {{ length_expression }} = 0 \n then ''\n else \n right(\n {{ string_text }},\n {{ length_expression }}\n )\n end\n\n{%- endmacro -%}", "resource_type": "macro", "tags": [], "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1641494961.865079}, "macro.dbt_utils.datediff": {"unique_id": "macro.dbt_utils.datediff", "package_name": "dbt_utils", "root_path": "/Users/renee.li/Documents/dbt/tiktok/develop/dbt_packages/dbt_utils", "path": "macros/cross_db_utils/datediff.sql", "original_file_path": "macros/cross_db_utils/datediff.sql", "name": "datediff", "macro_sql": "{% macro datediff(first_date, second_date, datepart) %}\n {{ return(adapter.dispatch('datediff', 'dbt_utils')(first_date, second_date, datepart)) }}\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.dbt_utils.default__datediff"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1641494961.8691049}, "macro.dbt_utils.default__datediff": {"unique_id": "macro.dbt_utils.default__datediff", "package_name": "dbt_utils", "root_path": "/Users/renee.li/Documents/dbt/tiktok/develop/dbt_packages/dbt_utils", "path": "macros/cross_db_utils/datediff.sql", "original_file_path": "macros/cross_db_utils/datediff.sql", "name": "default__datediff", "macro_sql": "{% macro default__datediff(first_date, second_date, datepart) %}\n\n datediff(\n {{ datepart }},\n {{ first_date }},\n {{ second_date }}\n )\n\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1641494961.869471}, "macro.dbt_utils.bigquery__datediff": {"unique_id": "macro.dbt_utils.bigquery__datediff", "package_name": "dbt_utils", "root_path": "/Users/renee.li/Documents/dbt/tiktok/develop/dbt_packages/dbt_utils", "path": "macros/cross_db_utils/datediff.sql", "original_file_path": "macros/cross_db_utils/datediff.sql", "name": "bigquery__datediff", "macro_sql": "{% macro bigquery__datediff(first_date, second_date, datepart) %}\n\n datetime_diff(\n cast({{second_date}} as datetime),\n cast({{first_date}} as datetime),\n {{datepart}}\n )\n\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1641494961.869826}, "macro.dbt_utils.postgres__datediff": {"unique_id": "macro.dbt_utils.postgres__datediff", "package_name": "dbt_utils", "root_path": "/Users/renee.li/Documents/dbt/tiktok/develop/dbt_packages/dbt_utils", "path": "macros/cross_db_utils/datediff.sql", "original_file_path": "macros/cross_db_utils/datediff.sql", "name": "postgres__datediff", "macro_sql": "{% macro postgres__datediff(first_date, second_date, datepart) %}\n\n {% if datepart == 'year' %}\n (date_part('year', ({{second_date}})::date) - date_part('year', ({{first_date}})::date))\n {% elif datepart == 'quarter' %}\n ({{ dbt_utils.datediff(first_date, second_date, 'year') }} * 4 + date_part('quarter', ({{second_date}})::date) - date_part('quarter', ({{first_date}})::date))\n {% elif datepart == 'month' %}\n ({{ dbt_utils.datediff(first_date, second_date, 'year') }} * 12 + date_part('month', ({{second_date}})::date) - date_part('month', ({{first_date}})::date))\n {% elif datepart == 'day' %}\n (({{second_date}})::date - ({{first_date}})::date)\n {% elif datepart == 'week' %}\n ({{ dbt_utils.datediff(first_date, second_date, 'day') }} / 7 + case\n when date_part('dow', ({{first_date}})::timestamp) <= date_part('dow', ({{second_date}})::timestamp) then\n case when {{first_date}} <= {{second_date}} then 0 else -1 end\n else\n case when {{first_date}} <= {{second_date}} then 1 else 0 end\n end)\n {% elif datepart == 'hour' %}\n ({{ dbt_utils.datediff(first_date, second_date, 'day') }} * 24 + date_part('hour', ({{second_date}})::timestamp) - date_part('hour', ({{first_date}})::timestamp))\n {% elif datepart == 'minute' %}\n ({{ dbt_utils.datediff(first_date, second_date, 'hour') }} * 60 + date_part('minute', ({{second_date}})::timestamp) - date_part('minute', ({{first_date}})::timestamp))\n {% elif datepart == 'second' %}\n ({{ dbt_utils.datediff(first_date, second_date, 'minute') }} * 60 + floor(date_part('second', ({{second_date}})::timestamp)) - floor(date_part('second', ({{first_date}})::timestamp)))\n {% elif datepart == 'millisecond' %}\n ({{ dbt_utils.datediff(first_date, second_date, 'minute') }} * 60000 + floor(date_part('millisecond', ({{second_date}})::timestamp)) - floor(date_part('millisecond', ({{first_date}})::timestamp)))\n {% elif datepart == 'microsecond' %}\n ({{ dbt_utils.datediff(first_date, second_date, 'minute') }} * 60000000 + floor(date_part('microsecond', ({{second_date}})::timestamp)) - floor(date_part('microsecond', ({{first_date}})::timestamp)))\n {% else %}\n {{ exceptions.raise_compiler_error(\"Unsupported datepart for macro datediff in postgres: {!r}\".format(datepart)) }}\n {% endif %}\n\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.dbt_utils.datediff"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1641494961.873712}, "macro.dbt_utils.redshift__datediff": {"unique_id": "macro.dbt_utils.redshift__datediff", "package_name": "dbt_utils", "root_path": "/Users/renee.li/Documents/dbt/tiktok/develop/dbt_packages/dbt_utils", "path": "macros/cross_db_utils/datediff.sql", "original_file_path": "macros/cross_db_utils/datediff.sql", "name": "redshift__datediff", "macro_sql": "{% macro redshift__datediff(first_date, second_date, datepart) %}\n\n {{ return(dbt_utils.default__datediff(first_date, second_date, datepart)) }}\n\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.dbt_utils.default__datediff"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1641494961.874159}, "macro.dbt_utils.safe_cast": {"unique_id": "macro.dbt_utils.safe_cast", "package_name": "dbt_utils", "root_path": "/Users/renee.li/Documents/dbt/tiktok/develop/dbt_packages/dbt_utils", "path": "macros/cross_db_utils/safe_cast.sql", "original_file_path": "macros/cross_db_utils/safe_cast.sql", "name": "safe_cast", "macro_sql": "{% macro safe_cast(field, type) %}\n {{ return(adapter.dispatch('safe_cast', 'dbt_utils') (field, type)) }}\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.dbt_utils.snowflake__safe_cast"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1641494961.874988}, "macro.dbt_utils.default__safe_cast": {"unique_id": "macro.dbt_utils.default__safe_cast", "package_name": "dbt_utils", "root_path": "/Users/renee.li/Documents/dbt/tiktok/develop/dbt_packages/dbt_utils", "path": "macros/cross_db_utils/safe_cast.sql", "original_file_path": "macros/cross_db_utils/safe_cast.sql", "name": "default__safe_cast", "macro_sql": "{% macro default__safe_cast(field, type) %}\n {# most databases don't support this function yet\n so we just need to use cast #}\n cast({{field}} as {{type}})\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1641494961.875296}, "macro.dbt_utils.snowflake__safe_cast": {"unique_id": "macro.dbt_utils.snowflake__safe_cast", "package_name": "dbt_utils", "root_path": "/Users/renee.li/Documents/dbt/tiktok/develop/dbt_packages/dbt_utils", "path": "macros/cross_db_utils/safe_cast.sql", "original_file_path": "macros/cross_db_utils/safe_cast.sql", "name": "snowflake__safe_cast", "macro_sql": "{% macro snowflake__safe_cast(field, type) %}\n try_cast({{field}} as {{type}})\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1641494961.8755798}, "macro.dbt_utils.bigquery__safe_cast": {"unique_id": "macro.dbt_utils.bigquery__safe_cast", "package_name": "dbt_utils", "root_path": "/Users/renee.li/Documents/dbt/tiktok/develop/dbt_packages/dbt_utils", "path": "macros/cross_db_utils/safe_cast.sql", "original_file_path": "macros/cross_db_utils/safe_cast.sql", "name": "bigquery__safe_cast", "macro_sql": "{% macro bigquery__safe_cast(field, type) %}\n safe_cast({{field}} as {{type}})\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1641494961.8758621}, "macro.dbt_utils.hash": {"unique_id": "macro.dbt_utils.hash", "package_name": "dbt_utils", "root_path": "/Users/renee.li/Documents/dbt/tiktok/develop/dbt_packages/dbt_utils", "path": "macros/cross_db_utils/hash.sql", "original_file_path": "macros/cross_db_utils/hash.sql", "name": "hash", "macro_sql": "{% macro hash(field) -%}\n {{ return(adapter.dispatch('hash', 'dbt_utils') (field)) }}\n{%- endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.dbt_utils.default__hash"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1641494961.87656}, "macro.dbt_utils.default__hash": {"unique_id": "macro.dbt_utils.default__hash", "package_name": "dbt_utils", "root_path": "/Users/renee.li/Documents/dbt/tiktok/develop/dbt_packages/dbt_utils", "path": "macros/cross_db_utils/hash.sql", "original_file_path": "macros/cross_db_utils/hash.sql", "name": "default__hash", "macro_sql": "{% macro default__hash(field) -%}\n md5(cast({{field}} as {{dbt_utils.type_string()}}))\n{%- endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.dbt_utils.type_string"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1641494961.8768692}, "macro.dbt_utils.bigquery__hash": {"unique_id": "macro.dbt_utils.bigquery__hash", "package_name": "dbt_utils", "root_path": "/Users/renee.li/Documents/dbt/tiktok/develop/dbt_packages/dbt_utils", "path": "macros/cross_db_utils/hash.sql", "original_file_path": "macros/cross_db_utils/hash.sql", "name": "bigquery__hash", "macro_sql": "{% macro bigquery__hash(field) -%}\n to_hex({{dbt_utils.default__hash(field)}})\n{%- endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.dbt_utils.default__hash"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1641494961.877155}, "macro.dbt_utils.cast_bool_to_text": {"unique_id": "macro.dbt_utils.cast_bool_to_text", "package_name": "dbt_utils", "root_path": "/Users/renee.li/Documents/dbt/tiktok/develop/dbt_packages/dbt_utils", "path": "macros/cross_db_utils/cast_bool_to_text.sql", "original_file_path": "macros/cross_db_utils/cast_bool_to_text.sql", "name": "cast_bool_to_text", "macro_sql": "{% macro cast_bool_to_text(field) %}\n {{ adapter.dispatch('cast_bool_to_text', 'dbt_utils') (field) }}\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.dbt_utils.default__cast_bool_to_text"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1641494961.87788}, "macro.dbt_utils.default__cast_bool_to_text": {"unique_id": "macro.dbt_utils.default__cast_bool_to_text", "package_name": "dbt_utils", "root_path": "/Users/renee.li/Documents/dbt/tiktok/develop/dbt_packages/dbt_utils", "path": "macros/cross_db_utils/cast_bool_to_text.sql", "original_file_path": "macros/cross_db_utils/cast_bool_to_text.sql", "name": "default__cast_bool_to_text", "macro_sql": "{% macro default__cast_bool_to_text(field) %}\n cast({{ field }} as {{ dbt_utils.type_string() }})\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.dbt_utils.type_string"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1641494961.8781939}, "macro.dbt_utils.redshift__cast_bool_to_text": {"unique_id": "macro.dbt_utils.redshift__cast_bool_to_text", "package_name": "dbt_utils", "root_path": "/Users/renee.li/Documents/dbt/tiktok/develop/dbt_packages/dbt_utils", "path": "macros/cross_db_utils/cast_bool_to_text.sql", "original_file_path": "macros/cross_db_utils/cast_bool_to_text.sql", "name": "redshift__cast_bool_to_text", "macro_sql": "{% macro redshift__cast_bool_to_text(field) %}\n case\n when {{ field }} is true then 'true'\n when {{ field }} is false then 'false'\n end::text\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1641494961.878473}, "macro.dbt_utils.identifier": {"unique_id": "macro.dbt_utils.identifier", "package_name": "dbt_utils", "root_path": "/Users/renee.li/Documents/dbt/tiktok/develop/dbt_packages/dbt_utils", "path": "macros/cross_db_utils/identifier.sql", "original_file_path": "macros/cross_db_utils/identifier.sql", "name": "identifier", "macro_sql": "{% macro identifier(value) %}\t\n {%- set error_message = '\n Warning: the `identifier` macro is no longer supported and will be deprecated in a future release of dbt-utils. \\\n Use `adapter.quote` instead. The {}.{} model triggered this warning. \\\n '.format(model.package_name, model.name) -%}\n {%- do exceptions.warn(error_message) -%}\n {{ return(adapter.dispatch('identifier', 'dbt_utils') (value)) }}\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.dbt_utils.default__identifier"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1641494961.8795362}, "macro.dbt_utils.default__identifier": {"unique_id": "macro.dbt_utils.default__identifier", "package_name": "dbt_utils", "root_path": "/Users/renee.li/Documents/dbt/tiktok/develop/dbt_packages/dbt_utils", "path": "macros/cross_db_utils/identifier.sql", "original_file_path": "macros/cross_db_utils/identifier.sql", "name": "default__identifier", "macro_sql": "{% macro default__identifier(value) -%}\t\n \"{{ value }}\"\t\n{%- endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1641494961.879772}, "macro.dbt_utils.bigquery__identifier": {"unique_id": "macro.dbt_utils.bigquery__identifier", "package_name": "dbt_utils", "root_path": "/Users/renee.li/Documents/dbt/tiktok/develop/dbt_packages/dbt_utils", "path": "macros/cross_db_utils/identifier.sql", "original_file_path": "macros/cross_db_utils/identifier.sql", "name": "bigquery__identifier", "macro_sql": "{% macro bigquery__identifier(value) -%}\t\n `{{ value }}`\t\n{%- endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1641494961.879998}, "macro.dbt_utils.position": {"unique_id": "macro.dbt_utils.position", "package_name": "dbt_utils", "root_path": "/Users/renee.li/Documents/dbt/tiktok/develop/dbt_packages/dbt_utils", "path": "macros/cross_db_utils/position.sql", "original_file_path": "macros/cross_db_utils/position.sql", "name": "position", "macro_sql": "{% macro position(substring_text, string_text) -%}\n {{ return(adapter.dispatch('position', 'dbt_utils') (substring_text, string_text)) }}\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.dbt_utils.default__position"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1641494961.880818}, "macro.dbt_utils.default__position": {"unique_id": "macro.dbt_utils.default__position", "package_name": "dbt_utils", "root_path": "/Users/renee.li/Documents/dbt/tiktok/develop/dbt_packages/dbt_utils", "path": "macros/cross_db_utils/position.sql", "original_file_path": "macros/cross_db_utils/position.sql", "name": "default__position", "macro_sql": "{% macro default__position(substring_text, string_text) %}\n\n position(\n {{ substring_text }} in {{ string_text }}\n )\n \n{%- endmacro -%}\n\n", "resource_type": "macro", "tags": [], "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1641494961.881119}, "macro.dbt_utils.bigquery__position": {"unique_id": "macro.dbt_utils.bigquery__position", "package_name": "dbt_utils", "root_path": "/Users/renee.li/Documents/dbt/tiktok/develop/dbt_packages/dbt_utils", "path": "macros/cross_db_utils/position.sql", "original_file_path": "macros/cross_db_utils/position.sql", "name": "bigquery__position", "macro_sql": "{% macro bigquery__position(substring_text, string_text) %}\n\n strpos(\n {{ string_text }},\n {{ substring_text }}\n \n )\n \n{%- endmacro -%}", "resource_type": "macro", "tags": [], "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1641494961.8814158}, "macro.dbt_utils.string_literal": {"unique_id": "macro.dbt_utils.string_literal", "package_name": "dbt_utils", "root_path": "/Users/renee.li/Documents/dbt/tiktok/develop/dbt_packages/dbt_utils", "path": "macros/cross_db_utils/literal.sql", "original_file_path": "macros/cross_db_utils/literal.sql", "name": "string_literal", "macro_sql": "{%- macro string_literal(value) -%}\n {{ return(adapter.dispatch('string_literal', 'dbt_utils') (value)) }}\n{%- endmacro -%}\n\n", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.dbt_utils.default__string_literal"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1641494961.8820531}, "macro.dbt_utils.default__string_literal": {"unique_id": "macro.dbt_utils.default__string_literal", "package_name": "dbt_utils", "root_path": "/Users/renee.li/Documents/dbt/tiktok/develop/dbt_packages/dbt_utils", "path": "macros/cross_db_utils/literal.sql", "original_file_path": "macros/cross_db_utils/literal.sql", "name": "default__string_literal", "macro_sql": "{% macro default__string_literal(value) -%}\n '{{ value }}'\n{%- endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1641494961.882284}, "macro.dbt_utils.current_timestamp": {"unique_id": "macro.dbt_utils.current_timestamp", "package_name": "dbt_utils", "root_path": "/Users/renee.li/Documents/dbt/tiktok/develop/dbt_packages/dbt_utils", "path": "macros/cross_db_utils/current_timestamp.sql", "original_file_path": "macros/cross_db_utils/current_timestamp.sql", "name": "current_timestamp", "macro_sql": "{% macro current_timestamp() -%}\n {{ return(adapter.dispatch('current_timestamp', 'dbt_utils')()) }}\n{%- endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.dbt_utils.default__current_timestamp"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1641494961.8833761}, "macro.dbt_utils.default__current_timestamp": {"unique_id": "macro.dbt_utils.default__current_timestamp", "package_name": "dbt_utils", "root_path": "/Users/renee.li/Documents/dbt/tiktok/develop/dbt_packages/dbt_utils", "path": "macros/cross_db_utils/current_timestamp.sql", "original_file_path": "macros/cross_db_utils/current_timestamp.sql", "name": "default__current_timestamp", "macro_sql": "{% macro default__current_timestamp() %}\n current_timestamp::{{dbt_utils.type_timestamp()}}\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.dbt_utils.type_timestamp"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1641494961.883633}, "macro.dbt_utils.redshift__current_timestamp": {"unique_id": "macro.dbt_utils.redshift__current_timestamp", "package_name": "dbt_utils", "root_path": "/Users/renee.li/Documents/dbt/tiktok/develop/dbt_packages/dbt_utils", "path": "macros/cross_db_utils/current_timestamp.sql", "original_file_path": "macros/cross_db_utils/current_timestamp.sql", "name": "redshift__current_timestamp", "macro_sql": "{% macro redshift__current_timestamp() %}\n getdate()\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1641494961.8837981}, "macro.dbt_utils.bigquery__current_timestamp": {"unique_id": "macro.dbt_utils.bigquery__current_timestamp", "package_name": "dbt_utils", "root_path": "/Users/renee.li/Documents/dbt/tiktok/develop/dbt_packages/dbt_utils", "path": "macros/cross_db_utils/current_timestamp.sql", "original_file_path": "macros/cross_db_utils/current_timestamp.sql", "name": "bigquery__current_timestamp", "macro_sql": "{% macro bigquery__current_timestamp() %}\n current_timestamp\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1641494961.883966}, "macro.dbt_utils.current_timestamp_in_utc": {"unique_id": "macro.dbt_utils.current_timestamp_in_utc", "package_name": "dbt_utils", "root_path": "/Users/renee.li/Documents/dbt/tiktok/develop/dbt_packages/dbt_utils", "path": "macros/cross_db_utils/current_timestamp.sql", "original_file_path": "macros/cross_db_utils/current_timestamp.sql", "name": "current_timestamp_in_utc", "macro_sql": "{% macro current_timestamp_in_utc() -%}\n {{ return(adapter.dispatch('current_timestamp_in_utc', 'dbt_utils')()) }}\n{%- endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.dbt_utils.snowflake__current_timestamp_in_utc"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1641494961.8844202}, "macro.dbt_utils.default__current_timestamp_in_utc": {"unique_id": "macro.dbt_utils.default__current_timestamp_in_utc", "package_name": "dbt_utils", "root_path": "/Users/renee.li/Documents/dbt/tiktok/develop/dbt_packages/dbt_utils", "path": "macros/cross_db_utils/current_timestamp.sql", "original_file_path": "macros/cross_db_utils/current_timestamp.sql", "name": "default__current_timestamp_in_utc", "macro_sql": "{% macro default__current_timestamp_in_utc() %}\n {{dbt_utils.current_timestamp()}}\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.dbt_utils.current_timestamp"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1641494961.884667}, "macro.dbt_utils.snowflake__current_timestamp_in_utc": {"unique_id": "macro.dbt_utils.snowflake__current_timestamp_in_utc", "package_name": "dbt_utils", "root_path": "/Users/renee.li/Documents/dbt/tiktok/develop/dbt_packages/dbt_utils", "path": "macros/cross_db_utils/current_timestamp.sql", "original_file_path": "macros/cross_db_utils/current_timestamp.sql", "name": "snowflake__current_timestamp_in_utc", "macro_sql": "{% macro snowflake__current_timestamp_in_utc() %}\n convert_timezone('UTC', {{dbt_utils.current_timestamp()}})::{{dbt_utils.type_timestamp()}}\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.dbt_utils.current_timestamp", "macro.dbt_utils.type_timestamp"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1641494961.884989}, "macro.dbt_utils.postgres__current_timestamp_in_utc": {"unique_id": "macro.dbt_utils.postgres__current_timestamp_in_utc", "package_name": "dbt_utils", "root_path": "/Users/renee.li/Documents/dbt/tiktok/develop/dbt_packages/dbt_utils", "path": "macros/cross_db_utils/current_timestamp.sql", "original_file_path": "macros/cross_db_utils/current_timestamp.sql", "name": "postgres__current_timestamp_in_utc", "macro_sql": "{% macro postgres__current_timestamp_in_utc() %}\n (current_timestamp at time zone 'utc')::{{dbt_utils.type_timestamp()}}\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.dbt_utils.type_timestamp"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1641494961.8852348}, "macro.dbt_utils.redshift__current_timestamp_in_utc": {"unique_id": "macro.dbt_utils.redshift__current_timestamp_in_utc", "package_name": "dbt_utils", "root_path": "/Users/renee.li/Documents/dbt/tiktok/develop/dbt_packages/dbt_utils", "path": "macros/cross_db_utils/current_timestamp.sql", "original_file_path": "macros/cross_db_utils/current_timestamp.sql", "name": "redshift__current_timestamp_in_utc", "macro_sql": "{% macro redshift__current_timestamp_in_utc() %}\n {{ return(dbt_utils.default__current_timestamp_in_utc()) }}\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.dbt_utils.default__current_timestamp_in_utc"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1641494961.8855228}, "macro.dbt_utils.width_bucket": {"unique_id": "macro.dbt_utils.width_bucket", "package_name": "dbt_utils", "root_path": "/Users/renee.li/Documents/dbt/tiktok/develop/dbt_packages/dbt_utils", "path": "macros/cross_db_utils/width_bucket.sql", "original_file_path": "macros/cross_db_utils/width_bucket.sql", "name": "width_bucket", "macro_sql": "{% macro width_bucket(expr, min_value, max_value, num_buckets) %}\n {{ return(adapter.dispatch('width_bucket', 'dbt_utils') (expr, min_value, max_value, num_buckets)) }}\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.dbt_utils.snowflake__width_bucket"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1641494961.887796}, "macro.dbt_utils.default__width_bucket": {"unique_id": "macro.dbt_utils.default__width_bucket", "package_name": "dbt_utils", "root_path": "/Users/renee.li/Documents/dbt/tiktok/develop/dbt_packages/dbt_utils", "path": "macros/cross_db_utils/width_bucket.sql", "original_file_path": "macros/cross_db_utils/width_bucket.sql", "name": "default__width_bucket", "macro_sql": "{% macro default__width_bucket(expr, min_value, max_value, num_buckets) -%}\n\n {% set bin_size -%}\n (( {{ max_value }} - {{ min_value }} ) / {{ num_buckets }} )\n {%- endset %}\n (\n -- to break ties when the amount is eaxtly at the bucket egde\n case\n when\n mod(\n {{ dbt_utils.safe_cast(expr, dbt_utils.type_numeric() ) }},\n {{ dbt_utils.safe_cast(bin_size, dbt_utils.type_numeric() ) }}\n ) = 0\n then 1\n else 0\n end\n ) +\n -- Anything over max_value goes the N+1 bucket\n least(\n ceil(\n ({{ expr }} - {{ min_value }})/{{ bin_size }}\n ),\n {{ num_buckets }} + 1\n )\n{%- endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.dbt_utils.safe_cast", "macro.dbt_utils.type_numeric"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1641494961.888801}, "macro.dbt_utils.redshift__width_bucket": {"unique_id": "macro.dbt_utils.redshift__width_bucket", "package_name": "dbt_utils", "root_path": "/Users/renee.li/Documents/dbt/tiktok/develop/dbt_packages/dbt_utils", "path": "macros/cross_db_utils/width_bucket.sql", "original_file_path": "macros/cross_db_utils/width_bucket.sql", "name": "redshift__width_bucket", "macro_sql": "{% macro redshift__width_bucket(expr, min_value, max_value, num_buckets) -%}\n\n {% set bin_size -%}\n (( {{ max_value }} - {{ min_value }} ) / {{ num_buckets }} )\n {%- endset %}\n (\n -- to break ties when the amount is exactly at the bucket edge\n case\n when\n {{ dbt_utils.safe_cast(expr, dbt_utils.type_numeric() ) }} %\n {{ dbt_utils.safe_cast(bin_size, dbt_utils.type_numeric() ) }}\n = 0\n then 1\n else 0\n end\n ) +\n -- Anything over max_value goes the N+1 bucket\n least(\n ceil(\n ({{ expr }} - {{ min_value }})/{{ bin_size }}\n ),\n {{ num_buckets }} + 1\n )\n{%- endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.dbt_utils.safe_cast", "macro.dbt_utils.type_numeric"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1641494961.889808}, "macro.dbt_utils.snowflake__width_bucket": {"unique_id": "macro.dbt_utils.snowflake__width_bucket", "package_name": "dbt_utils", "root_path": "/Users/renee.li/Documents/dbt/tiktok/develop/dbt_packages/dbt_utils", "path": "macros/cross_db_utils/width_bucket.sql", "original_file_path": "macros/cross_db_utils/width_bucket.sql", "name": "snowflake__width_bucket", "macro_sql": "{% macro snowflake__width_bucket(expr, min_value, max_value, num_buckets) %}\n width_bucket({{ expr }}, {{ min_value }}, {{ max_value }}, {{ num_buckets }} )\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1641494961.89023}, "macro.dbt_utils.last_day": {"unique_id": "macro.dbt_utils.last_day", "package_name": "dbt_utils", "root_path": "/Users/renee.li/Documents/dbt/tiktok/develop/dbt_packages/dbt_utils", "path": "macros/cross_db_utils/last_day.sql", "original_file_path": "macros/cross_db_utils/last_day.sql", "name": "last_day", "macro_sql": "{% macro last_day(date, datepart) %}\n {{ return(adapter.dispatch('last_day', 'dbt_utils') (date, datepart)) }}\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.dbt_utils.default__last_day"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1641494961.89135}, "macro.dbt_utils.default_last_day": {"unique_id": "macro.dbt_utils.default_last_day", "package_name": "dbt_utils", "root_path": "/Users/renee.li/Documents/dbt/tiktok/develop/dbt_packages/dbt_utils", "path": "macros/cross_db_utils/last_day.sql", "original_file_path": "macros/cross_db_utils/last_day.sql", "name": "default_last_day", "macro_sql": "\n\n\n{%- macro default_last_day(date, datepart) -%}\n cast(\n {{dbt_utils.dateadd('day', '-1',\n dbt_utils.dateadd(datepart, '1', dbt_utils.date_trunc(datepart, date))\n )}}\n as date)\n{%- endmacro -%}\n\n\n", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.dbt_utils.dateadd", "macro.dbt_utils.date_trunc"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1641494961.891926}, "macro.dbt_utils.default__last_day": {"unique_id": "macro.dbt_utils.default__last_day", "package_name": "dbt_utils", "root_path": "/Users/renee.li/Documents/dbt/tiktok/develop/dbt_packages/dbt_utils", "path": "macros/cross_db_utils/last_day.sql", "original_file_path": "macros/cross_db_utils/last_day.sql", "name": "default__last_day", "macro_sql": "{% macro default__last_day(date, datepart) -%}\n {{dbt_utils.default_last_day(date, datepart)}}\n{%- endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.dbt_utils.default_last_day"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1641494961.892249}, "macro.dbt_utils.postgres__last_day": {"unique_id": "macro.dbt_utils.postgres__last_day", "package_name": "dbt_utils", "root_path": "/Users/renee.li/Documents/dbt/tiktok/develop/dbt_packages/dbt_utils", "path": "macros/cross_db_utils/last_day.sql", "original_file_path": "macros/cross_db_utils/last_day.sql", "name": "postgres__last_day", "macro_sql": "{% macro postgres__last_day(date, datepart) -%}\n\n {%- if datepart == 'quarter' -%}\n -- postgres dateadd does not support quarter interval.\n cast(\n {{dbt_utils.dateadd('day', '-1',\n dbt_utils.dateadd('month', '3', dbt_utils.date_trunc(datepart, date))\n )}}\n as date)\n {%- else -%}\n {{dbt_utils.default_last_day(date, datepart)}}\n {%- endif -%}\n\n{%- endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.dbt_utils.dateadd", "macro.dbt_utils.date_trunc", "macro.dbt_utils.default_last_day"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1641494961.8931022}, "macro.dbt_utils.redshift__last_day": {"unique_id": "macro.dbt_utils.redshift__last_day", "package_name": "dbt_utils", "root_path": "/Users/renee.li/Documents/dbt/tiktok/develop/dbt_packages/dbt_utils", "path": "macros/cross_db_utils/last_day.sql", "original_file_path": "macros/cross_db_utils/last_day.sql", "name": "redshift__last_day", "macro_sql": "{% macro redshift__last_day(date, datepart) %}\n\n {{ return(dbt_utils.default__last_day(date, datepart)) }}\n\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.dbt_utils.default__last_day"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1641494961.893485}, "macro.dbt_utils.split_part": {"unique_id": "macro.dbt_utils.split_part", "package_name": "dbt_utils", "root_path": "/Users/renee.li/Documents/dbt/tiktok/develop/dbt_packages/dbt_utils", "path": "macros/cross_db_utils/split_part.sql", "original_file_path": "macros/cross_db_utils/split_part.sql", "name": "split_part", "macro_sql": "{% macro split_part(string_text, delimiter_text, part_number) %}\n {{ return(adapter.dispatch('split_part', 'dbt_utils') (string_text, delimiter_text, part_number)) }}\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.dbt_utils.default__split_part"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1641494961.894419}, "macro.dbt_utils.default__split_part": {"unique_id": "macro.dbt_utils.default__split_part", "package_name": "dbt_utils", "root_path": "/Users/renee.li/Documents/dbt/tiktok/develop/dbt_packages/dbt_utils", "path": "macros/cross_db_utils/split_part.sql", "original_file_path": "macros/cross_db_utils/split_part.sql", "name": "default__split_part", "macro_sql": "{% macro default__split_part(string_text, delimiter_text, part_number) %}\n\n split_part(\n {{ string_text }},\n {{ delimiter_text }},\n {{ part_number }}\n )\n\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1641494961.8948312}, "macro.dbt_utils.bigquery__split_part": {"unique_id": "macro.dbt_utils.bigquery__split_part", "package_name": "dbt_utils", "root_path": "/Users/renee.li/Documents/dbt/tiktok/develop/dbt_packages/dbt_utils", "path": "macros/cross_db_utils/split_part.sql", "original_file_path": "macros/cross_db_utils/split_part.sql", "name": "bigquery__split_part", "macro_sql": "{% macro bigquery__split_part(string_text, delimiter_text, part_number) %}\n\n split(\n {{ string_text }},\n {{ delimiter_text }}\n )[safe_offset({{ part_number - 1 }})]\n\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1641494961.895217}, "macro.dbt_utils.date_trunc": {"unique_id": "macro.dbt_utils.date_trunc", "package_name": "dbt_utils", "root_path": "/Users/renee.li/Documents/dbt/tiktok/develop/dbt_packages/dbt_utils", "path": "macros/cross_db_utils/date_trunc.sql", "original_file_path": "macros/cross_db_utils/date_trunc.sql", "name": "date_trunc", "macro_sql": "{% macro date_trunc(datepart, date) -%}\n {{ return(adapter.dispatch('date_trunc', 'dbt_utils') (datepart, date)) }}\n{%- endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.dbt_utils.default__date_trunc"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1641494961.8959942}, "macro.dbt_utils.default__date_trunc": {"unique_id": "macro.dbt_utils.default__date_trunc", "package_name": "dbt_utils", "root_path": "/Users/renee.li/Documents/dbt/tiktok/develop/dbt_packages/dbt_utils", "path": "macros/cross_db_utils/date_trunc.sql", "original_file_path": "macros/cross_db_utils/date_trunc.sql", "name": "default__date_trunc", "macro_sql": "{% macro default__date_trunc(datepart, date) %}\n date_trunc('{{datepart}}', {{date}})\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1641494961.896287}, "macro.dbt_utils.bigquery__date_trunc": {"unique_id": "macro.dbt_utils.bigquery__date_trunc", "package_name": "dbt_utils", "root_path": "/Users/renee.li/Documents/dbt/tiktok/develop/dbt_packages/dbt_utils", "path": "macros/cross_db_utils/date_trunc.sql", "original_file_path": "macros/cross_db_utils/date_trunc.sql", "name": "bigquery__date_trunc", "macro_sql": "{% macro bigquery__date_trunc(datepart, date) %}\n timestamp_trunc(\n cast({{date}} as timestamp),\n {{datepart}}\n )\n\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1641494961.896579}, "macro.dbt_utils._is_ephemeral": {"unique_id": "macro.dbt_utils._is_ephemeral", "package_name": "dbt_utils", "root_path": "/Users/renee.li/Documents/dbt/tiktok/develop/dbt_packages/dbt_utils", "path": "macros/cross_db_utils/_is_ephemeral.sql", "original_file_path": "macros/cross_db_utils/_is_ephemeral.sql", "name": "_is_ephemeral", "macro_sql": "{% macro _is_ephemeral(obj, macro) %}\n {%- if obj.is_cte -%}\n {% set ephemeral_prefix = api.Relation.add_ephemeral_prefix('') %}\n {% if obj.name.startswith(ephemeral_prefix) %}\n {% set model_name = obj.name[(ephemeral_prefix|length):] %}\n {% else %}\n {% set model_name = obj.name %}\n {%- endif -%}\n {% set error_message %}\nThe `{{ macro }}` macro cannot be used with ephemeral models, as it relies on the information schema.\n\n`{{ model_name }}` is an ephemeral model. Consider making it a view or table instead.\n {% endset %}\n {%- do exceptions.raise_compiler_error(error_message) -%}\n {%- endif -%}\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1641494961.8983319}, "macro.dbt_utils.get_period_boundaries": {"unique_id": "macro.dbt_utils.get_period_boundaries", "package_name": "dbt_utils", "root_path": "/Users/renee.li/Documents/dbt/tiktok/develop/dbt_packages/dbt_utils", "path": "macros/materializations/insert_by_period_materialization.sql", "original_file_path": "macros/materializations/insert_by_period_materialization.sql", "name": "get_period_boundaries", "macro_sql": "{% macro get_period_boundaries(target_schema, target_table, timestamp_field, start_date, stop_date, period) -%}\n {{ return(adapter.dispatch('get_period_boundaries', 'dbt_utils')(target_schema, target_table, timestamp_field, start_date, stop_date, period)) }}\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.dbt_utils.default__get_period_boundaries"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1641494961.907077}, "macro.dbt_utils.default__get_period_boundaries": {"unique_id": "macro.dbt_utils.default__get_period_boundaries", "package_name": "dbt_utils", "root_path": "/Users/renee.li/Documents/dbt/tiktok/develop/dbt_packages/dbt_utils", "path": "macros/materializations/insert_by_period_materialization.sql", "original_file_path": "macros/materializations/insert_by_period_materialization.sql", "name": "default__get_period_boundaries", "macro_sql": "{% macro default__get_period_boundaries(target_schema, target_table, timestamp_field, start_date, stop_date, period) -%}\n\n {% call statement('period_boundaries', fetch_result=True) -%}\n with data as (\n select\n coalesce(max(\"{{timestamp_field}}\"), '{{start_date}}')::timestamp as start_timestamp,\n coalesce(\n {{dbt_utils.dateadd('millisecond',\n -1,\n \"nullif('\" ~ stop_date ~ \"','')::timestamp\")}},\n {{dbt_utils.current_timestamp()}}\n ) as stop_timestamp\n from \"{{target_schema}}\".\"{{target_table}}\"\n )\n\n select\n start_timestamp,\n stop_timestamp,\n {{dbt_utils.datediff('start_timestamp',\n 'stop_timestamp',\n period)}} + 1 as num_periods\n from data\n {%- endcall %}\n\n{%- endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.dbt.statement", "macro.dbt_utils.dateadd", "macro.dbt_utils.current_timestamp", "macro.dbt_utils.datediff"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1641494961.908303}, "macro.dbt_utils.get_period_sql": {"unique_id": "macro.dbt_utils.get_period_sql", "package_name": "dbt_utils", "root_path": "/Users/renee.li/Documents/dbt/tiktok/develop/dbt_packages/dbt_utils", "path": "macros/materializations/insert_by_period_materialization.sql", "original_file_path": "macros/materializations/insert_by_period_materialization.sql", "name": "get_period_sql", "macro_sql": "{% macro get_period_sql(target_cols_csv, sql, timestamp_field, period, start_timestamp, stop_timestamp, offset) -%}\n {{ return(adapter.dispatch('get_period_sql', 'dbt_utils')(target_cols_csv, sql, timestamp_field, period, start_timestamp, stop_timestamp, offset)) }}\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.dbt_utils.default__get_period_sql"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1641494961.908992}, "macro.dbt_utils.default__get_period_sql": {"unique_id": "macro.dbt_utils.default__get_period_sql", "package_name": "dbt_utils", "root_path": "/Users/renee.li/Documents/dbt/tiktok/develop/dbt_packages/dbt_utils", "path": "macros/materializations/insert_by_period_materialization.sql", "original_file_path": "macros/materializations/insert_by_period_materialization.sql", "name": "default__get_period_sql", "macro_sql": "{% macro default__get_period_sql(target_cols_csv, sql, timestamp_field, period, start_timestamp, stop_timestamp, offset) -%}\n\n {%- set period_filter -%}\n (\"{{timestamp_field}}\" > '{{start_timestamp}}'::timestamp + interval '{{offset}} {{period}}' and\n \"{{timestamp_field}}\" <= '{{start_timestamp}}'::timestamp + interval '{{offset}} {{period}}' + interval '1 {{period}}' and\n \"{{timestamp_field}}\" < '{{stop_timestamp}}'::timestamp)\n {%- endset -%}\n\n {%- set filtered_sql = sql | replace(\"__PERIOD_FILTER__\", period_filter) -%}\n\n select\n {{target_cols_csv}}\n from (\n {{filtered_sql}}\n )\n\n{%- endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1641494961.910096}, "macro.dbt_utils.materialization_insert_by_period_default": {"unique_id": "macro.dbt_utils.materialization_insert_by_period_default", "package_name": "dbt_utils", "root_path": "/Users/renee.li/Documents/dbt/tiktok/develop/dbt_packages/dbt_utils", "path": "macros/materializations/insert_by_period_materialization.sql", "original_file_path": "macros/materializations/insert_by_period_materialization.sql", "name": "materialization_insert_by_period_default", "macro_sql": "{% materialization insert_by_period, default -%}\n {%- set timestamp_field = config.require('timestamp_field') -%}\n {%- set start_date = config.require('start_date') -%}\n {%- set stop_date = config.get('stop_date') or '' -%}}\n {%- set period = config.get('period') or 'week' -%}\n\n {%- if sql.find('__PERIOD_FILTER__') == -1 -%}\n {%- set error_message -%}\n Model '{{ model.unique_id }}' does not include the required string '__PERIOD_FILTER__' in its sql\n {%- endset -%}\n {{ exceptions.raise_compiler_error(error_message) }}\n {%- endif -%}\n\n {%- set identifier = model['name'] -%}\n\n {%- set old_relation = adapter.get_relation(database=database, schema=schema, identifier=identifier) -%}\n {%- set target_relation = api.Relation.create(identifier=identifier, schema=schema, type='table') -%}\n\n {%- set non_destructive_mode = (flags.NON_DESTRUCTIVE == True) -%}\n {%- set full_refresh_mode = (flags.FULL_REFRESH == True) -%}\n\n {%- set exists_as_table = (old_relation is not none and old_relation.is_table) -%}\n {%- set exists_not_as_table = (old_relation is not none and not old_relation.is_table) -%}\n\n {%- set should_truncate = (non_destructive_mode and full_refresh_mode and exists_as_table) -%}\n {%- set should_drop = (not should_truncate and (full_refresh_mode or exists_not_as_table)) -%}\n {%- set force_create = (flags.FULL_REFRESH and not flags.NON_DESTRUCTIVE) -%}\n\n -- setup\n {% if old_relation is none -%}\n -- noop\n {%- elif should_truncate -%}\n {{adapter.truncate_relation(old_relation)}}\n {%- elif should_drop -%}\n {{adapter.drop_relation(old_relation)}}\n {%- set old_relation = none -%}\n {%- endif %}\n\n {{run_hooks(pre_hooks, inside_transaction=False)}}\n\n -- `begin` happens here, so `commit` after it to finish the transaction\n {{run_hooks(pre_hooks, inside_transaction=True)}}\n {% call statement() -%}\n begin; -- make extra sure we've closed out the transaction\n commit;\n {%- endcall %}\n\n -- build model\n {% if force_create or old_relation is none -%}\n {# Create an empty target table -#}\n {% call statement('main') -%}\n {%- set empty_sql = sql | replace(\"__PERIOD_FILTER__\", 'false') -%}\n {{create_table_as(False, target_relation, empty_sql)}}\n {%- endcall %}\n {%- endif %}\n\n {% set _ = dbt_utils.get_period_boundaries(schema,\n identifier,\n timestamp_field,\n start_date,\n stop_date,\n period) %}\n {%- set start_timestamp = load_result('period_boundaries')['data'][0][0] | string -%}\n {%- set stop_timestamp = load_result('period_boundaries')['data'][0][1] | string -%}\n {%- set num_periods = load_result('period_boundaries')['data'][0][2] | int -%}\n\n {% set target_columns = adapter.get_columns_in_relation(target_relation) %}\n {%- set target_cols_csv = target_columns | map(attribute='quoted') | join(', ') -%}\n {%- set loop_vars = {'sum_rows_inserted': 0} -%}\n\n -- commit each period as a separate transaction\n {% for i in range(num_periods) -%}\n {%- set msg = \"Running for \" ~ period ~ \" \" ~ (i + 1) ~ \" of \" ~ (num_periods) -%}\n {{ dbt_utils.log_info(msg) }}\n\n {%- set tmp_identifier = model['name'] ~ '__dbt_incremental_period' ~ i ~ '_tmp' -%}\n {%- set tmp_relation = api.Relation.create(identifier=tmp_identifier,\n schema=schema, type='table') -%}\n {% call statement() -%}\n {% set tmp_table_sql = dbt_utils.get_period_sql(target_cols_csv,\n sql,\n timestamp_field,\n period,\n start_timestamp,\n stop_timestamp,\n i) %}\n {{dbt.create_table_as(True, tmp_relation, tmp_table_sql)}}\n {%- endcall %}\n\n {{adapter.expand_target_column_types(from_relation=tmp_relation,\n to_relation=target_relation)}}\n {%- set name = 'main-' ~ i -%}\n {% call statement(name, fetch_result=True) -%}\n insert into {{target_relation}} ({{target_cols_csv}})\n (\n select\n {{target_cols_csv}}\n from {{tmp_relation.include(schema=False)}}\n );\n {%- endcall %}\n {% set result = load_result('main-' ~ i) %}\n {% if 'response' in result.keys() %} {# added in v0.19.0 #}\n {% set rows_inserted = result['response']['rows_affected'] %}\n {% else %} {# older versions #}\n {% set rows_inserted = result['status'].split(\" \")[2] | int %}\n {% endif %}\n \n {%- set sum_rows_inserted = loop_vars['sum_rows_inserted'] + rows_inserted -%}\n {%- if loop_vars.update({'sum_rows_inserted': sum_rows_inserted}) %} {% endif -%}\n\n {%- set msg = \"Ran for \" ~ period ~ \" \" ~ (i + 1) ~ \" of \" ~ (num_periods) ~ \"; \" ~ rows_inserted ~ \" records inserted\" -%}\n {{ dbt_utils.log_info(msg) }}\n\n {%- endfor %}\n\n {% call statement() -%}\n begin;\n {%- endcall %}\n\n {{run_hooks(post_hooks, inside_transaction=True)}}\n\n {% call statement() -%}\n commit;\n {%- endcall %}\n\n {{run_hooks(post_hooks, inside_transaction=False)}}\n\n {%- set status_string = \"INSERT \" ~ loop_vars['sum_rows_inserted'] -%}\n\n {% call noop_statement('main', status_string) -%}\n -- no-op\n {%- endcall %}\n\n -- Return the relations created in this materialization\n {{ return({'relations': [target_relation]}) }} \n\n{%- endmaterialization %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.dbt.run_hooks", "macro.dbt.statement", "macro.dbt.create_table_as", "macro.dbt_utils.get_period_boundaries", "macro.dbt_utils.log_info", "macro.dbt_utils.get_period_sql", "macro.dbt.noop_statement"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1641494961.921243}, "macro.dbt_utils.get_url_host": {"unique_id": "macro.dbt_utils.get_url_host", "package_name": "dbt_utils", "root_path": "/Users/renee.li/Documents/dbt/tiktok/develop/dbt_packages/dbt_utils", "path": "macros/web/get_url_host.sql", "original_file_path": "macros/web/get_url_host.sql", "name": "get_url_host", "macro_sql": "{% macro get_url_host(field) -%}\n {{ return(adapter.dispatch('get_url_host', 'dbt_utils')(field)) }}\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.dbt_utils.default__get_url_host"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1641494961.933612}, "macro.dbt_utils.default__get_url_host": {"unique_id": "macro.dbt_utils.default__get_url_host", "package_name": "dbt_utils", "root_path": "/Users/renee.li/Documents/dbt/tiktok/develop/dbt_packages/dbt_utils", "path": "macros/web/get_url_host.sql", "original_file_path": "macros/web/get_url_host.sql", "name": "default__get_url_host", "macro_sql": "{% macro default__get_url_host(field) -%}\n\n{%- set parsed =\n dbt_utils.split_part(\n dbt_utils.split_part(\n dbt_utils.replace(\n dbt_utils.replace(\n dbt_utils.replace(field, \"'android-app://'\", \"''\"\n ), \"'http://'\", \"''\"\n ), \"'https://'\", \"''\"\n ), \"'/'\", 1\n ), \"'?'\", 1\n )\n\n-%}\n\n\n {{ dbt_utils.safe_cast(\n parsed,\n dbt_utils.type_string()\n )}}\n\n{%- endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.dbt_utils.split_part", "macro.dbt_utils.replace", "macro.dbt_utils.safe_cast", "macro.dbt_utils.type_string"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1641494961.935704}, "macro.dbt_utils.get_url_path": {"unique_id": "macro.dbt_utils.get_url_path", "package_name": "dbt_utils", "root_path": "/Users/renee.li/Documents/dbt/tiktok/develop/dbt_packages/dbt_utils", "path": "macros/web/get_url_path.sql", "original_file_path": "macros/web/get_url_path.sql", "name": "get_url_path", "macro_sql": "{% macro get_url_path(field) -%}\n {{ return(adapter.dispatch('get_url_path', 'dbt_utils')(field)) }}\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.dbt_utils.default__get_url_path"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1641494961.937442}, "macro.dbt_utils.default__get_url_path": {"unique_id": "macro.dbt_utils.default__get_url_path", "package_name": "dbt_utils", "root_path": "/Users/renee.li/Documents/dbt/tiktok/develop/dbt_packages/dbt_utils", "path": "macros/web/get_url_path.sql", "original_file_path": "macros/web/get_url_path.sql", "name": "default__get_url_path", "macro_sql": "{% macro default__get_url_path(field) -%}\n\n {%- set stripped_url = \n dbt_utils.replace(\n dbt_utils.replace(field, \"'http://'\", \"''\"), \"'https://'\", \"''\")\n -%}\n\n {%- set first_slash_pos -%}\n coalesce(\n nullif({{dbt_utils.position(\"'/'\", stripped_url)}}, 0),\n {{dbt_utils.position(\"'?'\", stripped_url)}} - 1\n )\n {%- endset -%}\n\n {%- set parsed_path =\n dbt_utils.split_part(\n dbt_utils.right(\n stripped_url, \n dbt_utils.length(stripped_url) ~ \"-\" ~ first_slash_pos\n ), \n \"'?'\", 1\n )\n -%}\n\n {{ dbt_utils.safe_cast(\n parsed_path,\n dbt_utils.type_string()\n )}}\n \n{%- endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.dbt_utils.replace", "macro.dbt_utils.position", "macro.dbt_utils.split_part", "macro.dbt_utils.right", "macro.dbt_utils.length", "macro.dbt_utils.safe_cast", "macro.dbt_utils.type_string"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1641494961.939594}, "macro.dbt_utils.get_url_parameter": {"unique_id": "macro.dbt_utils.get_url_parameter", "package_name": "dbt_utils", "root_path": "/Users/renee.li/Documents/dbt/tiktok/develop/dbt_packages/dbt_utils", "path": "macros/web/get_url_parameter.sql", "original_file_path": "macros/web/get_url_parameter.sql", "name": "get_url_parameter", "macro_sql": "{% macro get_url_parameter(field, url_parameter) -%}\n {{ return(adapter.dispatch('get_url_parameter', 'dbt_utils')(field, url_parameter)) }}\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.dbt_utils.default__get_url_parameter"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1641494961.940662}, "macro.dbt_utils.default__get_url_parameter": {"unique_id": "macro.dbt_utils.default__get_url_parameter", "package_name": "dbt_utils", "root_path": "/Users/renee.li/Documents/dbt/tiktok/develop/dbt_packages/dbt_utils", "path": "macros/web/get_url_parameter.sql", "original_file_path": "macros/web/get_url_parameter.sql", "name": "default__get_url_parameter", "macro_sql": "{% macro default__get_url_parameter(field, url_parameter) -%}\n\n{%- set formatted_url_parameter = \"'\" + url_parameter + \"='\" -%}\n\n{%- set split = dbt_utils.split_part(dbt_utils.split_part(field, formatted_url_parameter, 2), \"'&'\", 1) -%}\n\nnullif({{ split }},'')\n\n{%- endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.dbt_utils.split_part"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1641494961.941629}, "macro.dbt_utils.pretty_log_format": {"unique_id": "macro.dbt_utils.pretty_log_format", "package_name": "dbt_utils", "root_path": "/Users/renee.li/Documents/dbt/tiktok/develop/dbt_packages/dbt_utils", "path": "macros/jinja_helpers/pretty_log_format.sql", "original_file_path": "macros/jinja_helpers/pretty_log_format.sql", "name": "pretty_log_format", "macro_sql": "{% macro pretty_log_format(message) %}\n {{ return(adapter.dispatch('pretty_log_format', 'dbt_utils')(message)) }}\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.dbt_utils.default__pretty_log_format"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1641494961.942548}, "macro.dbt_utils.default__pretty_log_format": {"unique_id": "macro.dbt_utils.default__pretty_log_format", "package_name": "dbt_utils", "root_path": "/Users/renee.li/Documents/dbt/tiktok/develop/dbt_packages/dbt_utils", "path": "macros/jinja_helpers/pretty_log_format.sql", "original_file_path": "macros/jinja_helpers/pretty_log_format.sql", "name": "default__pretty_log_format", "macro_sql": "{% macro default__pretty_log_format(message) %}\n {{ return( dbt_utils.pretty_time() ~ ' + ' ~ message) }}\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.dbt_utils.pretty_time"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1641494961.943052}, "macro.dbt_utils.pretty_time": {"unique_id": "macro.dbt_utils.pretty_time", "package_name": "dbt_utils", "root_path": "/Users/renee.li/Documents/dbt/tiktok/develop/dbt_packages/dbt_utils", "path": "macros/jinja_helpers/pretty_time.sql", "original_file_path": "macros/jinja_helpers/pretty_time.sql", "name": "pretty_time", "macro_sql": "{% macro pretty_time(format='%H:%M:%S') %}\n {{ return(adapter.dispatch('pretty_time', 'dbt_utils')(format)) }}\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.dbt_utils.default__pretty_time"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1641494961.943883}, "macro.dbt_utils.default__pretty_time": {"unique_id": "macro.dbt_utils.default__pretty_time", "package_name": "dbt_utils", "root_path": "/Users/renee.li/Documents/dbt/tiktok/develop/dbt_packages/dbt_utils", "path": "macros/jinja_helpers/pretty_time.sql", "original_file_path": "macros/jinja_helpers/pretty_time.sql", "name": "default__pretty_time", "macro_sql": "{% macro default__pretty_time(format='%H:%M:%S') %}\n {{ return(modules.datetime.datetime.now().strftime(format)) }}\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1641494961.9443898}, "macro.dbt_utils.log_info": {"unique_id": "macro.dbt_utils.log_info", "package_name": "dbt_utils", "root_path": "/Users/renee.li/Documents/dbt/tiktok/develop/dbt_packages/dbt_utils", "path": "macros/jinja_helpers/log_info.sql", "original_file_path": "macros/jinja_helpers/log_info.sql", "name": "log_info", "macro_sql": "{% macro log_info(message) %}\n {{ return(adapter.dispatch('log_info', 'dbt_utils')(message)) }}\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.dbt_utils.default__log_info"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1641494961.9451709}, "macro.dbt_utils.default__log_info": {"unique_id": "macro.dbt_utils.default__log_info", "package_name": "dbt_utils", "root_path": "/Users/renee.li/Documents/dbt/tiktok/develop/dbt_packages/dbt_utils", "path": "macros/jinja_helpers/log_info.sql", "original_file_path": "macros/jinja_helpers/log_info.sql", "name": "default__log_info", "macro_sql": "{% macro default__log_info(message) %}\n {{ log(dbt_utils.pretty_log_format(message), info=True) }}\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.dbt_utils.pretty_log_format"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1641494961.945623}, "macro.dbt_utils.slugify": {"unique_id": "macro.dbt_utils.slugify", "package_name": "dbt_utils", "root_path": "/Users/renee.li/Documents/dbt/tiktok/develop/dbt_packages/dbt_utils", "path": "macros/jinja_helpers/slugify.sql", "original_file_path": "macros/jinja_helpers/slugify.sql", "name": "slugify", "macro_sql": "{% macro slugify(string) %}\n\n{#- Lower case the string -#}\n{% set string = string | lower %}\n{#- Replace spaces and dashes with underscores -#}\n{% set string = modules.re.sub('[ -]+', '_', string) %}\n{#- Only take letters, numbers, and underscores -#}\n{% set string = modules.re.sub('[^a-z0-9_]+', '', string) %}\n\n{{ return(string) }}\n\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1641494961.946931}, "macro.dbt_utils.test_fewer_rows_than": {"unique_id": "macro.dbt_utils.test_fewer_rows_than", "package_name": "dbt_utils", "root_path": "/Users/renee.li/Documents/dbt/tiktok/develop/dbt_packages/dbt_utils", "path": "macros/schema_tests/fewer_rows_than.sql", "original_file_path": "macros/schema_tests/fewer_rows_than.sql", "name": "test_fewer_rows_than", "macro_sql": "{% test fewer_rows_than(model, compare_model) %}\n {{ return(adapter.dispatch('test_fewer_rows_than', 'dbt_utils')(model, compare_model)) }}\n{% endtest %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.dbt_utils.default__test_fewer_rows_than"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1641494961.948168}, "macro.dbt_utils.default__test_fewer_rows_than": {"unique_id": "macro.dbt_utils.default__test_fewer_rows_than", "package_name": "dbt_utils", "root_path": "/Users/renee.li/Documents/dbt/tiktok/develop/dbt_packages/dbt_utils", "path": "macros/schema_tests/fewer_rows_than.sql", "original_file_path": "macros/schema_tests/fewer_rows_than.sql", "name": "default__test_fewer_rows_than", "macro_sql": "{% macro default__test_fewer_rows_than(model, compare_model) %}\n\n{{ config(fail_calc = 'coalesce(row_count_delta, 0)') }}\n\nwith a as (\n\n select count(*) as count_our_model from {{ model }}\n\n),\nb as (\n\n select count(*) as count_comparison_model from {{ compare_model }}\n\n),\ncounts as (\n\n select\n count_our_model,\n count_comparison_model\n from a\n cross join b\n\n),\nfinal as (\n\n select *,\n case\n -- fail the test if we have more rows than the reference model and return the row count delta\n when count_our_model > count_comparison_model then (count_our_model - count_comparison_model)\n -- fail the test if they are the same number\n when count_our_model = count_comparison_model then 1\n -- pass the test if the delta is positive (i.e. return the number 0)\n else 0\n end as row_count_delta\n from counts\n\n)\n\nselect * from final\n\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1641494961.94874}, "macro.dbt_utils.test_equal_rowcount": {"unique_id": "macro.dbt_utils.test_equal_rowcount", "package_name": "dbt_utils", "root_path": "/Users/renee.li/Documents/dbt/tiktok/develop/dbt_packages/dbt_utils", "path": "macros/schema_tests/equal_rowcount.sql", "original_file_path": "macros/schema_tests/equal_rowcount.sql", "name": "test_equal_rowcount", "macro_sql": "{% test equal_rowcount(model, compare_model) %}\n {{ return(adapter.dispatch('test_equal_rowcount', 'dbt_utils')(model, compare_model)) }}\n{% endtest %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.dbt_utils.default__test_equal_rowcount"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1641494961.9497752}, "macro.dbt_utils.default__test_equal_rowcount": {"unique_id": "macro.dbt_utils.default__test_equal_rowcount", "package_name": "dbt_utils", "root_path": "/Users/renee.li/Documents/dbt/tiktok/develop/dbt_packages/dbt_utils", "path": "macros/schema_tests/equal_rowcount.sql", "original_file_path": "macros/schema_tests/equal_rowcount.sql", "name": "default__test_equal_rowcount", "macro_sql": "{% macro default__test_equal_rowcount(model, compare_model) %}\n\n{#-- Needs to be set at parse time, before we return '' below --#}\n{{ config(fail_calc = 'coalesce(diff_count, 0)') }}\n\n{#-- Prevent querying of db in parsing mode. This works because this macro does not create any new refs. #}\n{%- if not execute -%}\n {{ return('') }}\n{% endif %}\n\nwith a as (\n\n select count(*) as count_a from {{ model }}\n\n),\nb as (\n\n select count(*) as count_b from {{ compare_model }}\n\n),\nfinal as (\n\n select\n count_a,\n count_b,\n abs(count_a - count_b) as diff_count\n from a\n cross join b\n\n)\n\nselect * from final\n\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1641494961.95053}, "macro.dbt_utils.test_relationships_where": {"unique_id": "macro.dbt_utils.test_relationships_where", "package_name": "dbt_utils", "root_path": "/Users/renee.li/Documents/dbt/tiktok/develop/dbt_packages/dbt_utils", "path": "macros/schema_tests/relationships_where.sql", "original_file_path": "macros/schema_tests/relationships_where.sql", "name": "test_relationships_where", "macro_sql": "{% test relationships_where(model, column_name, to, field, from_condition=\"1=1\", to_condition=\"1=1\") %}\n {{ return(adapter.dispatch('test_relationships_where', 'dbt_utils')(model, column_name, to, field, from_condition, to_condition)) }}\n{% endtest %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.dbt_utils.default__test_relationships_where"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1641494961.9520729}, "macro.dbt_utils.default__test_relationships_where": {"unique_id": "macro.dbt_utils.default__test_relationships_where", "package_name": "dbt_utils", "root_path": "/Users/renee.li/Documents/dbt/tiktok/develop/dbt_packages/dbt_utils", "path": "macros/schema_tests/relationships_where.sql", "original_file_path": "macros/schema_tests/relationships_where.sql", "name": "default__test_relationships_where", "macro_sql": "{% macro default__test_relationships_where(model, column_name, to, field, from_condition=\"1=1\", to_condition=\"1=1\") %}\n\n{# T-SQL has no boolean data type so we use 1=1 which returns TRUE #}\n{# ref https://stackoverflow.com/a/7170753/3842610 #}\n\nwith left_table as (\n\n select\n {{column_name}} as id\n\n from {{model}}\n\n where {{column_name}} is not null\n and {{from_condition}}\n\n),\n\nright_table as (\n\n select\n {{field}} as id\n\n from {{to}}\n\n where {{field}} is not null\n and {{to_condition}}\n\n),\n\nexceptions as (\n\n select\n left_table.id,\n right_table.id as right_id\n\n from left_table\n\n left join right_table\n on left_table.id = right_table.id\n\n where right_table.id is null\n\n)\n\nselect * from exceptions\n\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1641494961.9529521}, "macro.dbt_utils.test_recency": {"unique_id": "macro.dbt_utils.test_recency", "package_name": "dbt_utils", "root_path": "/Users/renee.li/Documents/dbt/tiktok/develop/dbt_packages/dbt_utils", "path": "macros/schema_tests/recency.sql", "original_file_path": "macros/schema_tests/recency.sql", "name": "test_recency", "macro_sql": "{% test recency(model, field, datepart, interval) %}\n {{ return(adapter.dispatch('test_recency', 'dbt_utils')(model, field, datepart, interval)) }}\n{% endtest %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.dbt_utils.default__test_recency"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1641494961.9540448}, "macro.dbt_utils.default__test_recency": {"unique_id": "macro.dbt_utils.default__test_recency", "package_name": "dbt_utils", "root_path": "/Users/renee.li/Documents/dbt/tiktok/develop/dbt_packages/dbt_utils", "path": "macros/schema_tests/recency.sql", "original_file_path": "macros/schema_tests/recency.sql", "name": "default__test_recency", "macro_sql": "{% macro default__test_recency(model, field, datepart, interval) %}\n\n{% set threshold = dbt_utils.dateadd(datepart, interval * -1, dbt_utils.current_timestamp()) %}\n\nwith recency as (\n\n select max({{field}}) as most_recent\n from {{ model }}\n\n)\n\nselect\n\n most_recent,\n {{ threshold }} as threshold\n\nfrom recency\nwhere most_recent < {{ threshold }}\n\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.dbt_utils.dateadd", "macro.dbt_utils.current_timestamp"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1641494961.9550369}, "macro.dbt_utils.test_not_constant": {"unique_id": "macro.dbt_utils.test_not_constant", "package_name": "dbt_utils", "root_path": "/Users/renee.li/Documents/dbt/tiktok/develop/dbt_packages/dbt_utils", "path": "macros/schema_tests/not_constant.sql", "original_file_path": "macros/schema_tests/not_constant.sql", "name": "test_not_constant", "macro_sql": "{% test not_constant(model, column_name) %}\n {{ return(adapter.dispatch('test_not_constant', 'dbt_utils')(model, column_name)) }}\n{% endtest %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.dbt_utils.default__test_not_constant"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1641494961.9559429}, "macro.dbt_utils.default__test_not_constant": {"unique_id": "macro.dbt_utils.default__test_not_constant", "package_name": "dbt_utils", "root_path": "/Users/renee.li/Documents/dbt/tiktok/develop/dbt_packages/dbt_utils", "path": "macros/schema_tests/not_constant.sql", "original_file_path": "macros/schema_tests/not_constant.sql", "name": "default__test_not_constant", "macro_sql": "{% macro default__test_not_constant(model, column_name) %}\n\n\nselect\n {# In TSQL, subquery aggregate columns need aliases #}\n {# thus: a filler col name, 'filler_column' #}\n count(distinct {{ column_name }}) as filler_column\n\nfrom {{ model }}\n\nhaving count(distinct {{ column_name }}) = 1\n\n\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1641494961.9564002}, "macro.dbt_utils.test_accepted_range": {"unique_id": "macro.dbt_utils.test_accepted_range", "package_name": "dbt_utils", "root_path": "/Users/renee.li/Documents/dbt/tiktok/develop/dbt_packages/dbt_utils", "path": "macros/schema_tests/accepted_range.sql", "original_file_path": "macros/schema_tests/accepted_range.sql", "name": "test_accepted_range", "macro_sql": "{% test accepted_range(model, column_name, min_value=none, max_value=none, inclusive=true) %}\n {{ return(adapter.dispatch('test_accepted_range', 'dbt_utils')(model, column_name, min_value, max_value, inclusive)) }}\n{% endtest %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.dbt_utils.default__test_accepted_range"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1641494961.957793}, "macro.dbt_utils.default__test_accepted_range": {"unique_id": "macro.dbt_utils.default__test_accepted_range", "package_name": "dbt_utils", "root_path": "/Users/renee.li/Documents/dbt/tiktok/develop/dbt_packages/dbt_utils", "path": "macros/schema_tests/accepted_range.sql", "original_file_path": "macros/schema_tests/accepted_range.sql", "name": "default__test_accepted_range", "macro_sql": "{% macro default__test_accepted_range(model, column_name, min_value=none, max_value=none, inclusive=true) %}\n\nwith meet_condition as(\n select *\n from {{ model }}\n),\n\nvalidation_errors as (\n select *\n from meet_condition\n where\n -- never true, defaults to an empty result set. Exists to ensure any combo of the `or` clauses below succeeds\n 1 = 2\n\n {%- if min_value is not none %}\n -- records with a value >= min_value are permitted. The `not` flips this to find records that don't meet the rule.\n or not {{ column_name }} > {{- \"=\" if inclusive }} {{ min_value }}\n {%- endif %}\n\n {%- if max_value is not none %}\n -- records with a value <= max_value are permitted. The `not` flips this to find records that don't meet the rule.\n or not {{ column_name }} < {{- \"=\" if inclusive }} {{ max_value }}\n {%- endif %}\n)\n\nselect *\nfrom validation_errors\n\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1641494961.958914}, "macro.dbt_utils.test_not_accepted_values": {"unique_id": "macro.dbt_utils.test_not_accepted_values", "package_name": "dbt_utils", "root_path": "/Users/renee.li/Documents/dbt/tiktok/develop/dbt_packages/dbt_utils", "path": "macros/schema_tests/not_accepted_values.sql", "original_file_path": "macros/schema_tests/not_accepted_values.sql", "name": "test_not_accepted_values", "macro_sql": "{% test not_accepted_values(model, column_name, values, quote=True) %}\n {{ return(adapter.dispatch('test_not_accepted_values', 'dbt_utils')(model, column_name, values, quote)) }}\n{% endtest %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.dbt_utils.default__test_not_accepted_values"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1641494961.9601028}, "macro.dbt_utils.default__test_not_accepted_values": {"unique_id": "macro.dbt_utils.default__test_not_accepted_values", "package_name": "dbt_utils", "root_path": "/Users/renee.li/Documents/dbt/tiktok/develop/dbt_packages/dbt_utils", "path": "macros/schema_tests/not_accepted_values.sql", "original_file_path": "macros/schema_tests/not_accepted_values.sql", "name": "default__test_not_accepted_values", "macro_sql": "{% macro default__test_not_accepted_values(model, column_name, values, quote=True) %}\nwith all_values as (\n\n select distinct\n {{ column_name }} as value_field\n\n from {{ model }}\n\n),\n\nvalidation_errors as (\n\n select\n value_field\n\n from all_values\n where value_field in (\n {% for value in values -%}\n {% if quote -%}\n '{{ value }}'\n {%- else -%}\n {{ value }}\n {%- endif -%}\n {%- if not loop.last -%},{%- endif %}\n {%- endfor %}\n )\n\n)\n\nselect *\nfrom validation_errors\n\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1641494961.960972}, "macro.dbt_utils.test_unique_where": {"unique_id": "macro.dbt_utils.test_unique_where", "package_name": "dbt_utils", "root_path": "/Users/renee.li/Documents/dbt/tiktok/develop/dbt_packages/dbt_utils", "path": "macros/schema_tests/test_unique_where.sql", "original_file_path": "macros/schema_tests/test_unique_where.sql", "name": "test_unique_where", "macro_sql": "{% test unique_where(model, column_name) %}\r\n {%- set deprecation_warning = '\r\n Warning: `dbt_utils.unique_where` is no longer supported.\r\n Starting in dbt v0.20.0, the built-in `unique` test supports a `where` config.\r\n ' -%}\r\n {%- do exceptions.warn(deprecation_warning) -%}\r\n {{ return(adapter.dispatch('test_unique_where', 'dbt_utils')(model, column_name)) }}\r\n{% endtest %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.dbt_utils.default__test_unique_where"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1641494961.961955}, "macro.dbt_utils.default__test_unique_where": {"unique_id": "macro.dbt_utils.default__test_unique_where", "package_name": "dbt_utils", "root_path": "/Users/renee.li/Documents/dbt/tiktok/develop/dbt_packages/dbt_utils", "path": "macros/schema_tests/test_unique_where.sql", "original_file_path": "macros/schema_tests/test_unique_where.sql", "name": "default__test_unique_where", "macro_sql": "{% macro default__test_unique_where(model, column_name) %}\r\n {{ return(test_unique(model, column_name)) }}\r\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.dbt.test_unique"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1641494961.962324}, "macro.dbt_utils.test_at_least_one": {"unique_id": "macro.dbt_utils.test_at_least_one", "package_name": "dbt_utils", "root_path": "/Users/renee.li/Documents/dbt/tiktok/develop/dbt_packages/dbt_utils", "path": "macros/schema_tests/at_least_one.sql", "original_file_path": "macros/schema_tests/at_least_one.sql", "name": "test_at_least_one", "macro_sql": "{% test at_least_one(model, column_name) %}\n {{ return(adapter.dispatch('test_at_least_one', 'dbt_utils')(model, column_name)) }}\n{% endtest %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.dbt_utils.default__test_at_least_one"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1641494961.963095}, "macro.dbt_utils.default__test_at_least_one": {"unique_id": "macro.dbt_utils.default__test_at_least_one", "package_name": "dbt_utils", "root_path": "/Users/renee.li/Documents/dbt/tiktok/develop/dbt_packages/dbt_utils", "path": "macros/schema_tests/at_least_one.sql", "original_file_path": "macros/schema_tests/at_least_one.sql", "name": "default__test_at_least_one", "macro_sql": "{% macro default__test_at_least_one(model, column_name) %}\n\nselect *\nfrom (\n select\n {# In TSQL, subquery aggregate columns need aliases #}\n {# thus: a filler col name, 'filler_column' #}\n count({{ column_name }}) as filler_column\n\n from {{ model }}\n\n having count({{ column_name }}) = 0\n\n) validation_errors\n\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1641494961.9634829}, "macro.dbt_utils.test_unique_combination_of_columns": {"unique_id": "macro.dbt_utils.test_unique_combination_of_columns", "package_name": "dbt_utils", "root_path": "/Users/renee.li/Documents/dbt/tiktok/develop/dbt_packages/dbt_utils", "path": "macros/schema_tests/unique_combination_of_columns.sql", "original_file_path": "macros/schema_tests/unique_combination_of_columns.sql", "name": "test_unique_combination_of_columns", "macro_sql": "{% test unique_combination_of_columns(model, combination_of_columns, quote_columns=false) %}\n {{ return(adapter.dispatch('test_unique_combination_of_columns', 'dbt_utils')(model, combination_of_columns, quote_columns)) }}\n{% endtest %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.dbt_utils.default__test_unique_combination_of_columns"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1641494961.96469}, "macro.dbt_utils.default__test_unique_combination_of_columns": {"unique_id": "macro.dbt_utils.default__test_unique_combination_of_columns", "package_name": "dbt_utils", "root_path": "/Users/renee.li/Documents/dbt/tiktok/develop/dbt_packages/dbt_utils", "path": "macros/schema_tests/unique_combination_of_columns.sql", "original_file_path": "macros/schema_tests/unique_combination_of_columns.sql", "name": "default__test_unique_combination_of_columns", "macro_sql": "{% macro default__test_unique_combination_of_columns(model, combination_of_columns, quote_columns=false) %}\n\n{% if not quote_columns %}\n {%- set column_list=combination_of_columns %}\n{% elif quote_columns %}\n {%- set column_list=[] %}\n {% for column in combination_of_columns -%}\n {% set column_list = column_list.append( adapter.quote(column) ) %}\n {%- endfor %}\n{% else %}\n {{ exceptions.raise_compiler_error(\n \"`quote_columns` argument for unique_combination_of_columns test must be one of [True, False] Got: '\" ~ quote ~\"'.'\"\n ) }}\n{% endif %}\n\n{%- set columns_csv=column_list | join(', ') %}\n\n\nwith validation_errors as (\n\n select\n {{ columns_csv }}\n from {{ model }}\n group by {{ columns_csv }}\n having count(*) > 1\n\n)\n\nselect *\nfrom validation_errors\n\n\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1641494961.966076}, "macro.dbt_utils.test_cardinality_equality": {"unique_id": "macro.dbt_utils.test_cardinality_equality", "package_name": "dbt_utils", "root_path": "/Users/renee.li/Documents/dbt/tiktok/develop/dbt_packages/dbt_utils", "path": "macros/schema_tests/cardinality_equality.sql", "original_file_path": "macros/schema_tests/cardinality_equality.sql", "name": "test_cardinality_equality", "macro_sql": "{% test cardinality_equality(model, column_name, to, field) %}\n {{ return(adapter.dispatch('test_cardinality_equality', 'dbt_utils')(model, column_name, to, field)) }}\n{% endtest %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.dbt_utils.default__test_cardinality_equality"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1641494961.9671721}, "macro.dbt_utils.default__test_cardinality_equality": {"unique_id": "macro.dbt_utils.default__test_cardinality_equality", "package_name": "dbt_utils", "root_path": "/Users/renee.li/Documents/dbt/tiktok/develop/dbt_packages/dbt_utils", "path": "macros/schema_tests/cardinality_equality.sql", "original_file_path": "macros/schema_tests/cardinality_equality.sql", "name": "default__test_cardinality_equality", "macro_sql": "{% macro default__test_cardinality_equality(model, column_name, to, field) %}\n\n{# T-SQL does not let you use numbers as aliases for columns #}\n{# Thus, no \"GROUP BY 1\" #}\n\nwith table_a as (\nselect\n {{ column_name }},\n count(*) as num_rows\nfrom {{ model }}\ngroup by {{ column_name }}\n),\n\ntable_b as (\nselect\n {{ field }},\n count(*) as num_rows\nfrom {{ to }}\ngroup by {{ field }}\n),\n\nexcept_a as (\n select *\n from table_a\n {{ dbt_utils.except() }}\n select *\n from table_b\n),\n\nexcept_b as (\n select *\n from table_b\n {{ dbt_utils.except() }}\n select *\n from table_a\n),\n\nunioned as (\n select *\n from except_a\n union all\n select *\n from except_b\n)\n\nselect *\nfrom unioned\n\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.dbt_utils.except"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1641494961.967909}, "macro.dbt_utils.test_expression_is_true": {"unique_id": "macro.dbt_utils.test_expression_is_true", "package_name": "dbt_utils", "root_path": "/Users/renee.li/Documents/dbt/tiktok/develop/dbt_packages/dbt_utils", "path": "macros/schema_tests/expression_is_true.sql", "original_file_path": "macros/schema_tests/expression_is_true.sql", "name": "test_expression_is_true", "macro_sql": "{% test expression_is_true(model, expression, column_name=None, condition='1=1') %}\n{# T-SQL has no boolean data type so we use 1=1 which returns TRUE #}\n{# ref https://stackoverflow.com/a/7170753/3842610 #}\n {{ return(adapter.dispatch('test_expression_is_true', 'dbt_utils')(model, expression, column_name, condition)) }}\n{% endtest %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.dbt_utils.default__test_expression_is_true"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1641494961.96894}, "macro.dbt_utils.default__test_expression_is_true": {"unique_id": "macro.dbt_utils.default__test_expression_is_true", "package_name": "dbt_utils", "root_path": "/Users/renee.li/Documents/dbt/tiktok/develop/dbt_packages/dbt_utils", "path": "macros/schema_tests/expression_is_true.sql", "original_file_path": "macros/schema_tests/expression_is_true.sql", "name": "default__test_expression_is_true", "macro_sql": "{% macro default__test_expression_is_true(model, expression, column_name, condition) %}\n\nwith meet_condition as (\n select * from {{ model }} where {{ condition }}\n)\n\nselect\n *\nfrom meet_condition\n{% if column_name is none %}\nwhere not({{ expression }})\n{%- else %}\nwhere not({{ column_name }} {{ expression }})\n{%- endif %}\n\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1641494961.969579}, "macro.dbt_utils.test_not_null_proportion": {"unique_id": "macro.dbt_utils.test_not_null_proportion", "package_name": "dbt_utils", "root_path": "/Users/renee.li/Documents/dbt/tiktok/develop/dbt_packages/dbt_utils", "path": "macros/schema_tests/not_null_proportion.sql", "original_file_path": "macros/schema_tests/not_null_proportion.sql", "name": "test_not_null_proportion", "macro_sql": "{% macro test_not_null_proportion(model) %}\n {{ return(adapter.dispatch('test_not_null_proportion', 'dbt_utils')(model, **kwargs)) }}\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.dbt_utils.default__test_not_null_proportion"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1641494961.9704902}, "macro.dbt_utils.default__test_not_null_proportion": {"unique_id": "macro.dbt_utils.default__test_not_null_proportion", "package_name": "dbt_utils", "root_path": "/Users/renee.li/Documents/dbt/tiktok/develop/dbt_packages/dbt_utils", "path": "macros/schema_tests/not_null_proportion.sql", "original_file_path": "macros/schema_tests/not_null_proportion.sql", "name": "default__test_not_null_proportion", "macro_sql": "{% macro default__test_not_null_proportion(model) %}\n\n{% set column_name = kwargs.get('column_name', kwargs.get('arg')) %}\n{% set at_least = kwargs.get('at_least', kwargs.get('arg')) %}\n{% set at_most = kwargs.get('at_most', kwargs.get('arg', 1)) %}\n\nwith validation as (\n select\n sum(case when {{ column_name }} is null then 0 else 1 end) / cast(count(*) as numeric) as not_null_proportion\n from {{ model }}\n),\nvalidation_errors as (\n select\n not_null_proportion\n from validation\n where not_null_proportion < {{ at_least }} or not_null_proportion > {{ at_most }}\n)\nselect\n *\nfrom validation_errors\n\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1641494961.971614}, "macro.dbt_utils.test_sequential_values": {"unique_id": "macro.dbt_utils.test_sequential_values", "package_name": "dbt_utils", "root_path": "/Users/renee.li/Documents/dbt/tiktok/develop/dbt_packages/dbt_utils", "path": "macros/schema_tests/sequential_values.sql", "original_file_path": "macros/schema_tests/sequential_values.sql", "name": "test_sequential_values", "macro_sql": "{% test sequential_values(model, column_name, interval=1, datepart=None) %}\n\n {{ return(adapter.dispatch('test_sequential_values', 'dbt_utils')(model, column_name, interval, datepart)) }}\n\n{% endtest %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.dbt_utils.default__test_sequential_values"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1641494961.972857}, "macro.dbt_utils.default__test_sequential_values": {"unique_id": "macro.dbt_utils.default__test_sequential_values", "package_name": "dbt_utils", "root_path": "/Users/renee.li/Documents/dbt/tiktok/develop/dbt_packages/dbt_utils", "path": "macros/schema_tests/sequential_values.sql", "original_file_path": "macros/schema_tests/sequential_values.sql", "name": "default__test_sequential_values", "macro_sql": "{% macro default__test_sequential_values(model, column_name, interval=1, datepart=None) %}\n\nwith windowed as (\n\n select\n {{ column_name }},\n lag({{ column_name }}) over (\n order by {{ column_name }}\n ) as previous_{{ column_name }}\n from {{ model }}\n),\n\nvalidation_errors as (\n select\n *\n from windowed\n {% if datepart %}\n where not(cast({{ column_name }} as {{ dbt_utils.type_timestamp() }})= cast({{ dbt_utils.dateadd(datepart, interval, 'previous_' + column_name) }} as {{ dbt_utils.type_timestamp() }}))\n {% else %}\n where not({{ column_name }} = previous_{{ column_name }} + {{ interval }})\n {% endif %}\n)\n\nselect *\nfrom validation_errors\n\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.dbt_utils.type_timestamp", "macro.dbt_utils.dateadd"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1641494961.974164}, "macro.dbt_utils.test_not_null_where": {"unique_id": "macro.dbt_utils.test_not_null_where", "package_name": "dbt_utils", "root_path": "/Users/renee.li/Documents/dbt/tiktok/develop/dbt_packages/dbt_utils", "path": "macros/schema_tests/test_not_null_where.sql", "original_file_path": "macros/schema_tests/test_not_null_where.sql", "name": "test_not_null_where", "macro_sql": "{% test not_null_where(model, column_name) %}\r\n {%- set deprecation_warning = '\r\n Warning: `dbt_utils.not_null_where` is no longer supported.\r\n Starting in dbt v0.20.0, the built-in `not_null` test supports a `where` config.\r\n ' -%}\r\n {%- do exceptions.warn(deprecation_warning) -%}\r\n {{ return(adapter.dispatch('test_not_null_where', 'dbt_utils')(model, column_name)) }}\r\n{% endtest %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.dbt_utils.default__test_not_null_where"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1641494961.97513}, "macro.dbt_utils.default__test_not_null_where": {"unique_id": "macro.dbt_utils.default__test_not_null_where", "package_name": "dbt_utils", "root_path": "/Users/renee.li/Documents/dbt/tiktok/develop/dbt_packages/dbt_utils", "path": "macros/schema_tests/test_not_null_where.sql", "original_file_path": "macros/schema_tests/test_not_null_where.sql", "name": "default__test_not_null_where", "macro_sql": "{% macro default__test_not_null_where(model, column_name) %}\r\n {{ return(test_not_null(model, column_name)) }}\r\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.dbt.test_not_null"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1641494961.975497}, "macro.dbt_utils.test_equality": {"unique_id": "macro.dbt_utils.test_equality", "package_name": "dbt_utils", "root_path": "/Users/renee.li/Documents/dbt/tiktok/develop/dbt_packages/dbt_utils", "path": "macros/schema_tests/equality.sql", "original_file_path": "macros/schema_tests/equality.sql", "name": "test_equality", "macro_sql": "{% test equality(model, compare_model, compare_columns=None) %}\n {{ return(adapter.dispatch('test_equality', 'dbt_utils')(model, compare_model, compare_columns)) }}\n{% endtest %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.dbt_utils.default__test_equality"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1641494961.9769}, "macro.dbt_utils.default__test_equality": {"unique_id": "macro.dbt_utils.default__test_equality", "package_name": "dbt_utils", "root_path": "/Users/renee.li/Documents/dbt/tiktok/develop/dbt_packages/dbt_utils", "path": "macros/schema_tests/equality.sql", "original_file_path": "macros/schema_tests/equality.sql", "name": "default__test_equality", "macro_sql": "{% macro default__test_equality(model, compare_model, compare_columns=None) %}\n\n{% set set_diff %}\n count(*) + coalesce(abs(\n sum(case when which_diff = 'a_minus_b' then 1 else 0 end) -\n sum(case when which_diff = 'b_minus_a' then 1 else 0 end)\n ), 0)\n{% endset %}\n\n{#-- Needs to be set at parse time, before we return '' below --#}\n{{ config(fail_calc = set_diff) }}\n\n{#-- Prevent querying of db in parsing mode. This works because this macro does not create any new refs. #}\n{%- if not execute -%}\n {{ return('') }}\n{% endif %}\n\n-- setup\n{%- do dbt_utils._is_relation(model, 'test_equality') -%}\n\n{#-\nIf the compare_cols arg is provided, we can run this test without querying the\ninformation schema\u00a0\u2014 this allows the model to be an ephemeral model\n-#}\n\n{%- if not compare_columns -%}\n {%- do dbt_utils._is_ephemeral(model, 'test_equality') -%}\n {%- set compare_columns = adapter.get_columns_in_relation(model) | map(attribute='quoted') -%}\n{%- endif -%}\n\n{% set compare_cols_csv = compare_columns | join(', ') %}\n\nwith a as (\n\n select * from {{ model }}\n\n),\n\nb as (\n\n select * from {{ compare_model }}\n\n),\n\na_minus_b as (\n\n select {{compare_cols_csv}} from a\n {{ dbt_utils.except() }}\n select {{compare_cols_csv}} from b\n\n),\n\nb_minus_a as (\n\n select {{compare_cols_csv}} from b\n {{ dbt_utils.except() }}\n select {{compare_cols_csv}} from a\n\n),\n\nunioned as (\n\n select 'a_minus_b' as which_diff, a_minus_b.* from a_minus_b\n union all\n select 'b_minus_a' as which_diff, b_minus_a.* from b_minus_a\n\n)\n\nselect * from unioned\n\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.dbt_utils._is_relation", "macro.dbt_utils._is_ephemeral", "macro.dbt_utils.except"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1641494961.978962}, "macro.dbt_utils.test_mutually_exclusive_ranges": {"unique_id": "macro.dbt_utils.test_mutually_exclusive_ranges", "package_name": "dbt_utils", "root_path": "/Users/renee.li/Documents/dbt/tiktok/develop/dbt_packages/dbt_utils", "path": "macros/schema_tests/mutually_exclusive_ranges.sql", "original_file_path": "macros/schema_tests/mutually_exclusive_ranges.sql", "name": "test_mutually_exclusive_ranges", "macro_sql": "{% test mutually_exclusive_ranges(model, lower_bound_column, upper_bound_column, partition_by=None, gaps='allowed', zero_length_range_allowed=False) %}\n {{ return(adapter.dispatch('test_mutually_exclusive_ranges', 'dbt_utils')(model, lower_bound_column, upper_bound_column, partition_by, gaps, zero_length_range_allowed)) }}\n{% endtest %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.dbt_utils.default__test_mutually_exclusive_ranges"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1641494961.9837189}, "macro.dbt_utils.default__test_mutually_exclusive_ranges": {"unique_id": "macro.dbt_utils.default__test_mutually_exclusive_ranges", "package_name": "dbt_utils", "root_path": "/Users/renee.li/Documents/dbt/tiktok/develop/dbt_packages/dbt_utils", "path": "macros/schema_tests/mutually_exclusive_ranges.sql", "original_file_path": "macros/schema_tests/mutually_exclusive_ranges.sql", "name": "default__test_mutually_exclusive_ranges", "macro_sql": "{% macro default__test_mutually_exclusive_ranges(model, lower_bound_column, upper_bound_column, partition_by=None, gaps='allowed', zero_length_range_allowed=False) %}\n{% if gaps == 'not_allowed' %}\n {% set allow_gaps_operator='=' %}\n {% set allow_gaps_operator_in_words='equal_to' %}\n{% elif gaps == 'allowed' %}\n {% set allow_gaps_operator='<=' %}\n {% set allow_gaps_operator_in_words='less_than_or_equal_to' %}\n{% elif gaps == 'required' %}\n {% set allow_gaps_operator='<' %}\n {% set allow_gaps_operator_in_words='less_than' %}\n{% else %}\n {{ exceptions.raise_compiler_error(\n \"`gaps` argument for mutually_exclusive_ranges test must be one of ['not_allowed', 'allowed', 'required'] Got: '\" ~ gaps ~\"'.'\"\n ) }}\n{% endif %}\n{% if not zero_length_range_allowed %}\n {% set allow_zero_length_operator='<' %}\n {% set allow_zero_length_operator_in_words='less_than' %}\n{% elif zero_length_range_allowed %}\n {% set allow_zero_length_operator='<=' %}\n {% set allow_zero_length_operator_in_words='less_than_or_equal_to' %}\n{% else %}\n {{ exceptions.raise_compiler_error(\n \"`zero_length_range_allowed` argument for mutually_exclusive_ranges test must be one of [true, false] Got: '\" ~ zero_length_range_allowed ~\"'.'\"\n ) }}\n{% endif %}\n\n{% set partition_clause=\"partition by \" ~ partition_by if partition_by else '' %}\n\nwith window_functions as (\n\n select\n {% if partition_by %}\n {{ partition_by }} as partition_by_col,\n {% endif %}\n {{ lower_bound_column }} as lower_bound,\n {{ upper_bound_column }} as upper_bound,\n\n lead({{ lower_bound_column }}) over (\n {{ partition_clause }}\n order by {{ lower_bound_column }}\n ) as next_lower_bound,\n\n row_number() over (\n {{ partition_clause }}\n order by {{ lower_bound_column }} desc\n ) = 1 as is_last_record\n\n from {{ model }}\n\n),\n\ncalc as (\n -- We want to return records where one of our assumptions fails, so we'll use\n -- the `not` function with `and` statements so we can write our assumptions nore cleanly\n select\n *,\n\n -- For each record: lower_bound should be < upper_bound.\n -- Coalesce it to return an error on the null case (implicit assumption\n -- these columns are not_null)\n coalesce(\n lower_bound {{ allow_zero_length_operator }} upper_bound,\n false\n ) as lower_bound_{{ allow_zero_length_operator_in_words }}_upper_bound,\n\n -- For each record: upper_bound {{ allow_gaps_operator }} the next lower_bound.\n -- Coalesce it to handle null cases for the last record.\n coalesce(\n upper_bound {{ allow_gaps_operator }} next_lower_bound,\n is_last_record,\n false\n ) as upper_bound_{{ allow_gaps_operator_in_words }}_next_lower_bound\n\n from window_functions\n\n),\n\nvalidation_errors as (\n\n select\n *\n from calc\n\n where not(\n -- THE FOLLOWING SHOULD BE TRUE --\n lower_bound_{{ allow_zero_length_operator_in_words }}_upper_bound\n and upper_bound_{{ allow_gaps_operator_in_words }}_next_lower_bound\n )\n)\n\nselect * from validation_errors\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1641494961.986977}, "macro.dbt_utils.get_intervals_between": {"unique_id": "macro.dbt_utils.get_intervals_between", "package_name": "dbt_utils", "root_path": "/Users/renee.li/Documents/dbt/tiktok/develop/dbt_packages/dbt_utils", "path": "macros/sql/date_spine.sql", "original_file_path": "macros/sql/date_spine.sql", "name": "get_intervals_between", "macro_sql": "{% macro get_intervals_between(start_date, end_date, datepart) -%}\n {{ return(adapter.dispatch('get_intervals_between', 'dbt_utils')(start_date, end_date, datepart)) }}\n{%- endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.dbt_utils.default__get_intervals_between"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1641494961.98869}, "macro.dbt_utils.default__get_intervals_between": {"unique_id": "macro.dbt_utils.default__get_intervals_between", "package_name": "dbt_utils", "root_path": "/Users/renee.li/Documents/dbt/tiktok/develop/dbt_packages/dbt_utils", "path": "macros/sql/date_spine.sql", "original_file_path": "macros/sql/date_spine.sql", "name": "default__get_intervals_between", "macro_sql": "{% macro default__get_intervals_between(start_date, end_date, datepart) -%}\n {%- call statement('get_intervals_between', fetch_result=True) %}\n\n select {{dbt_utils.datediff(start_date, end_date, datepart)}}\n\n {%- endcall -%}\n\n {%- set value_list = load_result('get_intervals_between') -%}\n\n {%- if value_list and value_list['data'] -%}\n {%- set values = value_list['data'] | map(attribute=0) | list %}\n {{ return(values[0]) }}\n {%- else -%}\n {{ return(1) }}\n {%- endif -%}\n\n{%- endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.dbt.statement", "macro.dbt_utils.datediff"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1641494961.989983}, "macro.dbt_utils.date_spine": {"unique_id": "macro.dbt_utils.date_spine", "package_name": "dbt_utils", "root_path": "/Users/renee.li/Documents/dbt/tiktok/develop/dbt_packages/dbt_utils", "path": "macros/sql/date_spine.sql", "original_file_path": "macros/sql/date_spine.sql", "name": "date_spine", "macro_sql": "{% macro date_spine(datepart, start_date, end_date) %}\n {{ return(adapter.dispatch('date_spine', 'dbt_utils')(datepart, start_date, end_date)) }}\n{%- endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.dbt_utils.default__date_spine"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1641494961.9904928}, "macro.dbt_utils.default__date_spine": {"unique_id": "macro.dbt_utils.default__date_spine", "package_name": "dbt_utils", "root_path": "/Users/renee.li/Documents/dbt/tiktok/develop/dbt_packages/dbt_utils", "path": "macros/sql/date_spine.sql", "original_file_path": "macros/sql/date_spine.sql", "name": "default__date_spine", "macro_sql": "{% macro default__date_spine(datepart, start_date, end_date) %}\n\n/*\ncall as follows:\n\ndate_spine(\n \"day\",\n \"to_date('01/01/2016', 'mm/dd/yyyy')\",\n \"dateadd(week, 1, current_date)\"\n)\n\n*/\n\nwith rawdata as (\n\n {{dbt_utils.generate_series(\n dbt_utils.get_intervals_between(start_date, end_date, datepart)\n )}}\n\n),\n\nall_periods as (\n\n select (\n {{\n dbt_utils.dateadd(\n datepart,\n \"row_number() over (order by 1) - 1\",\n start_date\n )\n }}\n ) as date_{{datepart}}\n from rawdata\n\n),\n\nfiltered as (\n\n select *\n from all_periods\n where date_{{datepart}} <= {{ end_date }}\n\n)\n\nselect * from filtered\n\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.dbt_utils.generate_series", "macro.dbt_utils.get_intervals_between", "macro.dbt_utils.dateadd"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1641494961.991271}, "macro.dbt_utils.nullcheck_table": {"unique_id": "macro.dbt_utils.nullcheck_table", "package_name": "dbt_utils", "root_path": "/Users/renee.li/Documents/dbt/tiktok/develop/dbt_packages/dbt_utils", "path": "macros/sql/nullcheck_table.sql", "original_file_path": "macros/sql/nullcheck_table.sql", "name": "nullcheck_table", "macro_sql": "{% macro nullcheck_table(relation) %}\n {{ return(adapter.dispatch('nullcheck_table', 'dbt_utils')(relation)) }}\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.dbt_utils.default__nullcheck_table"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1641494961.992032}, "macro.dbt_utils.default__nullcheck_table": {"unique_id": "macro.dbt_utils.default__nullcheck_table", "package_name": "dbt_utils", "root_path": "/Users/renee.li/Documents/dbt/tiktok/develop/dbt_packages/dbt_utils", "path": "macros/sql/nullcheck_table.sql", "original_file_path": "macros/sql/nullcheck_table.sql", "name": "default__nullcheck_table", "macro_sql": "{% macro default__nullcheck_table(relation) %}\n\n {%- do dbt_utils._is_relation(relation, 'nullcheck_table') -%}\n {%- do dbt_utils._is_ephemeral(relation, 'nullcheck_table') -%}\n {% set cols = adapter.get_columns_in_relation(relation) %}\n\n select {{ dbt_utils.nullcheck(cols) }}\n from {{relation}}\n\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.dbt_utils._is_relation", "macro.dbt_utils._is_ephemeral", "macro.dbt_utils.nullcheck"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1641494961.992791}, "macro.dbt_utils.get_relations_by_pattern": {"unique_id": "macro.dbt_utils.get_relations_by_pattern", "package_name": "dbt_utils", "root_path": "/Users/renee.li/Documents/dbt/tiktok/develop/dbt_packages/dbt_utils", "path": "macros/sql/get_relations_by_pattern.sql", "original_file_path": "macros/sql/get_relations_by_pattern.sql", "name": "get_relations_by_pattern", "macro_sql": "{% macro get_relations_by_pattern(schema_pattern, table_pattern, exclude='', database=target.database) %}\n {{ return(adapter.dispatch('get_relations_by_pattern', 'dbt_utils')(schema_pattern, table_pattern, exclude, database)) }}\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.dbt_utils.default__get_relations_by_pattern"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1641494961.9941351}, "macro.dbt_utils.default__get_relations_by_pattern": {"unique_id": "macro.dbt_utils.default__get_relations_by_pattern", "package_name": "dbt_utils", "root_path": "/Users/renee.li/Documents/dbt/tiktok/develop/dbt_packages/dbt_utils", "path": "macros/sql/get_relations_by_pattern.sql", "original_file_path": "macros/sql/get_relations_by_pattern.sql", "name": "default__get_relations_by_pattern", "macro_sql": "{% macro default__get_relations_by_pattern(schema_pattern, table_pattern, exclude='', database=target.database) %}\n\n {%- call statement('get_tables', fetch_result=True) %}\n\n {{ dbt_utils.get_tables_by_pattern_sql(schema_pattern, table_pattern, exclude, database) }}\n\n {%- endcall -%}\n\n {%- set table_list = load_result('get_tables') -%}\n\n {%- if table_list and table_list['table'] -%}\n {%- set tbl_relations = [] -%}\n {%- for row in table_list['table'] -%}\n {%- set tbl_relation = api.Relation.create(\n database=database,\n schema=row.table_schema,\n identifier=row.table_name,\n type=row.table_type\n ) -%}\n {%- do tbl_relations.append(tbl_relation) -%}\n {%- endfor -%}\n\n {{ return(tbl_relations) }}\n {%- else -%}\n {{ return([]) }}\n {%- endif -%}\n\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.dbt.statement", "macro.dbt_utils.get_tables_by_pattern_sql"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1641494961.9959848}, "macro.dbt_utils.get_powers_of_two": {"unique_id": "macro.dbt_utils.get_powers_of_two", "package_name": "dbt_utils", "root_path": "/Users/renee.li/Documents/dbt/tiktok/develop/dbt_packages/dbt_utils", "path": "macros/sql/generate_series.sql", "original_file_path": "macros/sql/generate_series.sql", "name": "get_powers_of_two", "macro_sql": "{% macro get_powers_of_two(upper_bound) %}\n {{ return(adapter.dispatch('get_powers_of_two', 'dbt_utils')(upper_bound)) }}\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.dbt_utils.default__get_powers_of_two"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1641494961.997452}, "macro.dbt_utils.default__get_powers_of_two": {"unique_id": "macro.dbt_utils.default__get_powers_of_two", "package_name": "dbt_utils", "root_path": "/Users/renee.li/Documents/dbt/tiktok/develop/dbt_packages/dbt_utils", "path": "macros/sql/generate_series.sql", "original_file_path": "macros/sql/generate_series.sql", "name": "default__get_powers_of_two", "macro_sql": "{% macro default__get_powers_of_two(upper_bound) %}\n\n {% if upper_bound <= 0 %}\n {{ exceptions.raise_compiler_error(\"upper bound must be positive\") }}\n {% endif %}\n\n {% for _ in range(1, 100) %}\n {% if upper_bound <= 2 ** loop.index %}{{ return(loop.index) }}{% endif %}\n {% endfor %}\n\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1641494961.998357}, "macro.dbt_utils.generate_series": {"unique_id": "macro.dbt_utils.generate_series", "package_name": "dbt_utils", "root_path": "/Users/renee.li/Documents/dbt/tiktok/develop/dbt_packages/dbt_utils", "path": "macros/sql/generate_series.sql", "original_file_path": "macros/sql/generate_series.sql", "name": "generate_series", "macro_sql": "{% macro generate_series(upper_bound) %}\n {{ return(adapter.dispatch('generate_series', 'dbt_utils')(upper_bound)) }}\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.dbt_utils.default__generate_series"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1641494961.998768}, "macro.dbt_utils.default__generate_series": {"unique_id": "macro.dbt_utils.default__generate_series", "package_name": "dbt_utils", "root_path": "/Users/renee.li/Documents/dbt/tiktok/develop/dbt_packages/dbt_utils", "path": "macros/sql/generate_series.sql", "original_file_path": "macros/sql/generate_series.sql", "name": "default__generate_series", "macro_sql": "{% macro default__generate_series(upper_bound) %}\n\n {% set n = dbt_utils.get_powers_of_two(upper_bound) %}\n\n with p as (\n select 0 as generated_number union all select 1\n ), unioned as (\n\n select\n\n {% for i in range(n) %}\n p{{i}}.generated_number * power(2, {{i}})\n {% if not loop.last %} + {% endif %}\n {% endfor %}\n + 1\n as generated_number\n\n from\n\n {% for i in range(n) %}\n p as p{{i}}\n {% if not loop.last %} cross join {% endif %}\n {% endfor %}\n\n )\n\n select *\n from unioned\n where generated_number <= {{upper_bound}}\n order by generated_number\n\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.dbt_utils.get_powers_of_two"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1641494961.9999092}, "macro.dbt_utils.get_relations_by_prefix": {"unique_id": "macro.dbt_utils.get_relations_by_prefix", "package_name": "dbt_utils", "root_path": "/Users/renee.li/Documents/dbt/tiktok/develop/dbt_packages/dbt_utils", "path": "macros/sql/get_relations_by_prefix.sql", "original_file_path": "macros/sql/get_relations_by_prefix.sql", "name": "get_relations_by_prefix", "macro_sql": "{% macro get_relations_by_prefix(schema, prefix, exclude='', database=target.database) %}\n {{ return(adapter.dispatch('get_relations_by_prefix', 'dbt_utils')(schema, prefix, exclude, database)) }}\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.dbt_utils.default__get_relations_by_prefix"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1641494962.0012548}, "macro.dbt_utils.default__get_relations_by_prefix": {"unique_id": "macro.dbt_utils.default__get_relations_by_prefix", "package_name": "dbt_utils", "root_path": "/Users/renee.li/Documents/dbt/tiktok/develop/dbt_packages/dbt_utils", "path": "macros/sql/get_relations_by_prefix.sql", "original_file_path": "macros/sql/get_relations_by_prefix.sql", "name": "default__get_relations_by_prefix", "macro_sql": "{% macro default__get_relations_by_prefix(schema, prefix, exclude='', database=target.database) %}\n\n {%- call statement('get_tables', fetch_result=True) %}\n\n {{ dbt_utils.get_tables_by_prefix_sql(schema, prefix, exclude, database) }}\n\n {%- endcall -%}\n\n {%- set table_list = load_result('get_tables') -%}\n\n {%- if table_list and table_list['table'] -%}\n {%- set tbl_relations = [] -%}\n {%- for row in table_list['table'] -%}\n {%- set tbl_relation = api.Relation.create(\n database=database,\n schema=row.table_schema,\n identifier=row.table_name,\n type=row.table_type\n ) -%}\n {%- do tbl_relations.append(tbl_relation) -%}\n {%- endfor -%}\n\n {{ return(tbl_relations) }}\n {%- else -%}\n {{ return([]) }}\n {%- endif -%}\n\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.dbt.statement", "macro.dbt_utils.get_tables_by_prefix_sql"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1641494962.0034492}, "macro.dbt_utils.get_tables_by_prefix_sql": {"unique_id": "macro.dbt_utils.get_tables_by_prefix_sql", "package_name": "dbt_utils", "root_path": "/Users/renee.li/Documents/dbt/tiktok/develop/dbt_packages/dbt_utils", "path": "macros/sql/get_tables_by_prefix_sql.sql", "original_file_path": "macros/sql/get_tables_by_prefix_sql.sql", "name": "get_tables_by_prefix_sql", "macro_sql": "{% macro get_tables_by_prefix_sql(schema, prefix, exclude='', database=target.database) %}\n {{ return(adapter.dispatch('get_tables_by_prefix_sql', 'dbt_utils')(schema, prefix, exclude, database)) }}\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.dbt_utils.default__get_tables_by_prefix_sql"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1641494962.0043929}, "macro.dbt_utils.default__get_tables_by_prefix_sql": {"unique_id": "macro.dbt_utils.default__get_tables_by_prefix_sql", "package_name": "dbt_utils", "root_path": "/Users/renee.li/Documents/dbt/tiktok/develop/dbt_packages/dbt_utils", "path": "macros/sql/get_tables_by_prefix_sql.sql", "original_file_path": "macros/sql/get_tables_by_prefix_sql.sql", "name": "default__get_tables_by_prefix_sql", "macro_sql": "{% macro default__get_tables_by_prefix_sql(schema, prefix, exclude='', database=target.database) %}\n\n {{ dbt_utils.get_tables_by_pattern_sql(\n schema_pattern = schema,\n table_pattern = prefix ~ '%',\n exclude = exclude,\n database = database\n ) }}\n \n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.dbt_utils.get_tables_by_pattern_sql"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1641494962.005013}, "macro.dbt_utils.star": {"unique_id": "macro.dbt_utils.star", "package_name": "dbt_utils", "root_path": "/Users/renee.li/Documents/dbt/tiktok/develop/dbt_packages/dbt_utils", "path": "macros/sql/star.sql", "original_file_path": "macros/sql/star.sql", "name": "star", "macro_sql": "{% macro star(from, relation_alias=False, except=[], prefix='', suffix='') -%}\n {{ return(adapter.dispatch('star', 'dbt_utils')(from, relation_alias, except, prefix, suffix)) }}\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.dbt_utils.default__star"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1641494962.006465}, "macro.dbt_utils.default__star": {"unique_id": "macro.dbt_utils.default__star", "package_name": "dbt_utils", "root_path": "/Users/renee.li/Documents/dbt/tiktok/develop/dbt_packages/dbt_utils", "path": "macros/sql/star.sql", "original_file_path": "macros/sql/star.sql", "name": "default__star", "macro_sql": "{% macro default__star(from, relation_alias=False, except=[], prefix='', suffix='') -%}\n {%- do dbt_utils._is_relation(from, 'star') -%}\n {%- do dbt_utils._is_ephemeral(from, 'star') -%}\n\n {#-- Prevent querying of db in parsing mode. This works because this macro does not create any new refs. #}\n {%- if not execute -%}\n {{ return('') }}\n {% endif %}\n\n {%- set include_cols = [] %}\n {%- set cols = adapter.get_columns_in_relation(from) -%}\n {%- set except = except | map(\"lower\") | list %}\n {%- for col in cols -%}\n\n {%- if col.column|lower not in except -%}\n {% do include_cols.append(col.column) %}\n\n {%- endif %}\n {%- endfor %}\n\n {%- for col in include_cols %}\n\n {%- if relation_alias %}{{ relation_alias }}.{% else %}{%- endif -%}{{ adapter.quote(col)|trim }} as {{ adapter.quote(prefix ~ col ~ suffix)|trim }}\n {%- if not loop.last %},{{ '\\n ' }}{% endif %}\n\n {%- endfor -%}\n{%- endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.dbt_utils._is_relation", "macro.dbt_utils._is_ephemeral"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1641494962.008851}, "macro.dbt_utils.unpivot": {"unique_id": "macro.dbt_utils.unpivot", "package_name": "dbt_utils", "root_path": "/Users/renee.li/Documents/dbt/tiktok/develop/dbt_packages/dbt_utils", "path": "macros/sql/unpivot.sql", "original_file_path": "macros/sql/unpivot.sql", "name": "unpivot", "macro_sql": "{% macro unpivot(relation=none, cast_to='varchar', exclude=none, remove=none, field_name='field_name', value_name='value', table=none) -%}\n {{ return(adapter.dispatch('unpivot', 'dbt_utils')(relation, cast_to, exclude, remove, field_name, value_name, table)) }}\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.dbt_utils.default__unpivot"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1641494962.011826}, "macro.dbt_utils.default__unpivot": {"unique_id": "macro.dbt_utils.default__unpivot", "package_name": "dbt_utils", "root_path": "/Users/renee.li/Documents/dbt/tiktok/develop/dbt_packages/dbt_utils", "path": "macros/sql/unpivot.sql", "original_file_path": "macros/sql/unpivot.sql", "name": "default__unpivot", "macro_sql": "{% macro default__unpivot(relation=none, cast_to='varchar', exclude=none, remove=none, field_name='field_name', value_name='value', table=none) -%}\n\n {% if table %}\n {%- set error_message = '\n Warning: the `unpivot` macro no longer accepts a `table` parameter. \\\n This parameter will be deprecated in a future release of dbt-utils. Use the `relation` parameter instead. \\\n The {}.{} model triggered this warning. \\\n '.format(model.package_name, model.name) -%}\n {%- do exceptions.warn(error_message) -%}\n {% endif %}\n\n {% if relation and table %}\n {{ exceptions.raise_compiler_error(\"Error: both the `relation` and `table` parameters were provided to `unpivot` macro. Choose one only (we recommend `relation`).\") }}\n {% elif not relation and table %}\n {% set relation=table %}\n {% elif not relation and not table %}\n {{ exceptions.raise_compiler_error(\"Error: argument `relation` is required for `unpivot` macro.\") }}\n {% endif %}\n\n {%- set exclude = exclude if exclude is not none else [] %}\n {%- set remove = remove if remove is not none else [] %}\n\n {%- set include_cols = [] %}\n\n {%- set table_columns = {} %}\n\n {%- do table_columns.update({relation: []}) %}\n\n {%- do dbt_utils._is_relation(relation, 'unpivot') -%}\n {%- do dbt_utils._is_ephemeral(relation, 'unpivot') -%}\n {%- set cols = adapter.get_columns_in_relation(relation) %}\n\n {%- for col in cols -%}\n {%- if col.column.lower() not in remove|map('lower') and col.column.lower() not in exclude|map('lower') -%}\n {% do include_cols.append(col) %}\n {%- endif %}\n {%- endfor %}\n\n\n {%- for col in include_cols -%}\n select\n {%- for exclude_col in exclude %}\n {{ exclude_col }},\n {%- endfor %}\n\n cast('{{ col.column }}' as {{ dbt_utils.type_string() }}) as {{ field_name }},\n cast( {% if col.data_type == 'boolean' %}\n {{ dbt_utils.cast_bool_to_text(col.column) }}\n {% else %}\n {{ col.column }}\n {% endif %}\n as {{ cast_to }}) as {{ value_name }}\n\n from {{ relation }}\n\n {% if not loop.last -%}\n union all\n {% endif -%}\n {%- endfor -%}\n\n{%- endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.dbt_utils._is_relation", "macro.dbt_utils._is_ephemeral", "macro.dbt_utils.type_string", "macro.dbt_utils.cast_bool_to_text"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1641494962.016304}, "macro.dbt_utils.union_relations": {"unique_id": "macro.dbt_utils.union_relations", "package_name": "dbt_utils", "root_path": "/Users/renee.li/Documents/dbt/tiktok/develop/dbt_packages/dbt_utils", "path": "macros/sql/union.sql", "original_file_path": "macros/sql/union.sql", "name": "union_relations", "macro_sql": "{%- macro union_relations(relations, column_override=none, include=[], exclude=[], source_column_name='_dbt_source_relation') -%}\n {{ return(adapter.dispatch('union_relations', 'dbt_utils')(relations, column_override, include, exclude, source_column_name)) }}\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.dbt_utils.default__union_relations"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1641494962.018937}, "macro.dbt_utils.default__union_relations": {"unique_id": "macro.dbt_utils.default__union_relations", "package_name": "dbt_utils", "root_path": "/Users/renee.li/Documents/dbt/tiktok/develop/dbt_packages/dbt_utils", "path": "macros/sql/union.sql", "original_file_path": "macros/sql/union.sql", "name": "default__union_relations", "macro_sql": "\n\n{%- macro default__union_relations(relations, column_override=none, include=[], exclude=[], source_column_name='_dbt_source_relation') -%}\n\n {%- if exclude and include -%}\n {{ exceptions.raise_compiler_error(\"Both an exclude and include list were provided to the `union` macro. Only one is allowed\") }}\n {%- endif -%}\n\n {#-- Prevent querying of db in parsing mode. This works because this macro does not create any new refs. -#}\n {%- if not execute %}\n {{ return('') }}\n {% endif -%}\n\n {%- set column_override = column_override if column_override is not none else {} -%}\n\n {%- set relation_columns = {} -%}\n {%- set column_superset = {} -%}\n\n {%- for relation in relations -%}\n\n {%- do relation_columns.update({relation: []}) -%}\n\n {%- do dbt_utils._is_relation(relation, 'union_relations') -%}\n {%- do dbt_utils._is_ephemeral(relation, 'union_relations') -%}\n {%- set cols = adapter.get_columns_in_relation(relation) -%}\n {%- for col in cols -%}\n\n {#- If an exclude list was provided and the column is in the list, do nothing -#}\n {%- if exclude and col.column in exclude -%}\n\n {#- If an include list was provided and the column is not in the list, do nothing -#}\n {%- elif include and col.column not in include -%}\n\n {#- Otherwise add the column to the column superset -#}\n {%- else -%}\n\n {#- update the list of columns in this relation -#}\n {%- do relation_columns[relation].append(col.column) -%}\n\n {%- if col.column in column_superset -%}\n\n {%- set stored = column_superset[col.column] -%}\n {%- if col.is_string() and stored.is_string() and col.string_size() > stored.string_size() -%}\n\n {%- do column_superset.update({col.column: col}) -%}\n\n {%- endif %}\n\n {%- else -%}\n\n {%- do column_superset.update({col.column: col}) -%}\n\n {%- endif -%}\n\n {%- endif -%}\n\n {%- endfor -%}\n {%- endfor -%}\n\n {%- set ordered_column_names = column_superset.keys() -%}\n\n {%- for relation in relations %}\n\n (\n select\n\n cast({{ dbt_utils.string_literal(relation) }} as {{ dbt_utils.type_string() }}) as {{ source_column_name }},\n {% for col_name in ordered_column_names -%}\n\n {%- set col = column_superset[col_name] %}\n {%- set col_type = column_override.get(col.column, col.data_type) %}\n {%- set col_name = adapter.quote(col_name) if col_name in relation_columns[relation] else 'null' %}\n cast({{ col_name }} as {{ col_type }}) as {{ col.quoted }} {% if not loop.last %},{% endif -%}\n\n {%- endfor %}\n\n from {{ relation }}\n )\n\n {% if not loop.last -%}\n union all\n {% endif -%}\n\n {%- endfor -%}\n\n{%- endmacro -%}", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.dbt_utils._is_relation", "macro.dbt_utils._is_ephemeral", "macro.dbt_utils.string_literal", "macro.dbt_utils.type_string"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1641494962.0240781}, "macro.dbt_utils.group_by": {"unique_id": "macro.dbt_utils.group_by", "package_name": "dbt_utils", "root_path": "/Users/renee.li/Documents/dbt/tiktok/develop/dbt_packages/dbt_utils", "path": "macros/sql/groupby.sql", "original_file_path": "macros/sql/groupby.sql", "name": "group_by", "macro_sql": "{%- macro group_by(n) -%}\n {{ return(adapter.dispatch('group_by', 'dbt_utils')(n)) }}\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.dbt_utils.default__group_by"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1641494962.0247948}, "macro.dbt_utils.default__group_by": {"unique_id": "macro.dbt_utils.default__group_by", "package_name": "dbt_utils", "root_path": "/Users/renee.li/Documents/dbt/tiktok/develop/dbt_packages/dbt_utils", "path": "macros/sql/groupby.sql", "original_file_path": "macros/sql/groupby.sql", "name": "default__group_by", "macro_sql": "\n\n{%- macro default__group_by(n) -%}\n\n group by {% for i in range(1, n + 1) -%}\n {{ i }}{{ ',' if not loop.last }} \n {%- endfor -%}\n\n{%- endmacro -%}", "resource_type": "macro", "tags": [], "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1641494962.025343}, "macro.dbt_utils.surrogate_key": {"unique_id": "macro.dbt_utils.surrogate_key", "package_name": "dbt_utils", "root_path": "/Users/renee.li/Documents/dbt/tiktok/develop/dbt_packages/dbt_utils", "path": "macros/sql/surrogate_key.sql", "original_file_path": "macros/sql/surrogate_key.sql", "name": "surrogate_key", "macro_sql": "{%- macro surrogate_key(field_list) -%}\n {# needed for safe_add to allow for non-keyword arguments see SO post #}\n {# https://stackoverflow.com/questions/13944751/args-kwargs-in-jinja2-macros #}\n {% set frustrating_jinja_feature = varargs %}\n {{ return(adapter.dispatch('surrogate_key', 'dbt_utils')(field_list, *varargs)) }}\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.dbt_utils.default__surrogate_key"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1641494962.0265422}, "macro.dbt_utils.default__surrogate_key": {"unique_id": "macro.dbt_utils.default__surrogate_key", "package_name": "dbt_utils", "root_path": "/Users/renee.li/Documents/dbt/tiktok/develop/dbt_packages/dbt_utils", "path": "macros/sql/surrogate_key.sql", "original_file_path": "macros/sql/surrogate_key.sql", "name": "default__surrogate_key", "macro_sql": "\n\n{%- macro default__surrogate_key(field_list) -%}\n\n{%- if varargs|length >= 1 or field_list is string %}\n\n{%- set error_message = '\nWarning: the `surrogate_key` macro now takes a single list argument instead of \\\nmultiple string arguments. Support for multiple string arguments will be \\\ndeprecated in a future release of dbt-utils. The {}.{} model triggered this warning. \\\n'.format(model.package_name, model.name) -%}\n\n{%- do exceptions.warn(error_message) -%}\n\n{# first argument is not included in varargs, so add first element to field_list_xf #}\n{%- set field_list_xf = [field_list] -%}\n\n{%- for field in varargs %}\n{%- set _ = field_list_xf.append(field) -%}\n{%- endfor -%}\n\n{%- else -%}\n\n{# if using list, just set field_list_xf as field_list #}\n{%- set field_list_xf = field_list -%}\n\n{%- endif -%}\n\n\n{%- set fields = [] -%}\n\n{%- for field in field_list_xf -%}\n\n {%- set _ = fields.append(\n \"coalesce(cast(\" ~ field ~ \" as \" ~ dbt_utils.type_string() ~ \"), '')\"\n ) -%}\n\n {%- if not loop.last %}\n {%- set _ = fields.append(\"'-'\") -%}\n {%- endif -%}\n\n{%- endfor -%}\n\n{{dbt_utils.hash(dbt_utils.concat(fields))}}\n\n{%- endmacro -%}", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.dbt_utils.type_string", "macro.dbt_utils.hash", "macro.dbt_utils.concat"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1641494962.0285592}, "macro.dbt_utils.safe_add": {"unique_id": "macro.dbt_utils.safe_add", "package_name": "dbt_utils", "root_path": "/Users/renee.li/Documents/dbt/tiktok/develop/dbt_packages/dbt_utils", "path": "macros/sql/safe_add.sql", "original_file_path": "macros/sql/safe_add.sql", "name": "safe_add", "macro_sql": "{%- macro safe_add() -%}\n {# needed for safe_add to allow for non-keyword arguments see SO post #}\n {# https://stackoverflow.com/questions/13944751/args-kwargs-in-jinja2-macros #}\n {% set frustrating_jinja_feature = varargs %}\n {{ return(adapter.dispatch('safe_add', 'dbt_utils')(*varargs)) }}\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.dbt_utils.default__safe_add"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1641494962.029501}, "macro.dbt_utils.default__safe_add": {"unique_id": "macro.dbt_utils.default__safe_add", "package_name": "dbt_utils", "root_path": "/Users/renee.li/Documents/dbt/tiktok/develop/dbt_packages/dbt_utils", "path": "macros/sql/safe_add.sql", "original_file_path": "macros/sql/safe_add.sql", "name": "default__safe_add", "macro_sql": "\n\n{%- macro default__safe_add() -%}\n\n{% set fields = [] %}\n\n{%- for field in varargs -%}\n\n {% do fields.append(\"coalesce(\" ~ field ~ \", 0)\") %}\n\n{%- endfor -%}\n\n{{ fields|join(' +\\n ') }}\n\n{%- endmacro -%}", "resource_type": "macro", "tags": [], "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1641494962.030127}, "macro.dbt_utils.nullcheck": {"unique_id": "macro.dbt_utils.nullcheck", "package_name": "dbt_utils", "root_path": "/Users/renee.li/Documents/dbt/tiktok/develop/dbt_packages/dbt_utils", "path": "macros/sql/nullcheck.sql", "original_file_path": "macros/sql/nullcheck.sql", "name": "nullcheck", "macro_sql": "{% macro nullcheck(cols) %}\n {{ return(adapter.dispatch('nullcheck', 'dbt_utils')(cols)) }}\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.dbt_utils.default__nullcheck"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1641494962.030918}, "macro.dbt_utils.default__nullcheck": {"unique_id": "macro.dbt_utils.default__nullcheck", "package_name": "dbt_utils", "root_path": "/Users/renee.li/Documents/dbt/tiktok/develop/dbt_packages/dbt_utils", "path": "macros/sql/nullcheck.sql", "original_file_path": "macros/sql/nullcheck.sql", "name": "default__nullcheck", "macro_sql": "{% macro default__nullcheck(cols) %}\n{%- for col in cols %}\n\n {% if col.is_string() -%}\n\n nullif({{col.name}},'') as {{col.name}}\n\n {%- else -%}\n\n {{col.name}}\n\n {%- endif -%}\n\n{%- if not loop.last -%} , {%- endif -%}\n\n{%- endfor -%}\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1641494962.03172}, "macro.dbt_utils.get_tables_by_pattern_sql": {"unique_id": "macro.dbt_utils.get_tables_by_pattern_sql", "package_name": "dbt_utils", "root_path": "/Users/renee.li/Documents/dbt/tiktok/develop/dbt_packages/dbt_utils", "path": "macros/sql/get_tables_by_pattern_sql.sql", "original_file_path": "macros/sql/get_tables_by_pattern_sql.sql", "name": "get_tables_by_pattern_sql", "macro_sql": "{% macro get_tables_by_pattern_sql(schema_pattern, table_pattern, exclude='', database=target.database) %}\n {{ return(adapter.dispatch('get_tables_by_pattern_sql', 'dbt_utils')\n (schema_pattern, table_pattern, exclude, database)) }}\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.dbt_utils.default__get_tables_by_pattern_sql"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1641494962.034324}, "macro.dbt_utils.default__get_tables_by_pattern_sql": {"unique_id": "macro.dbt_utils.default__get_tables_by_pattern_sql", "package_name": "dbt_utils", "root_path": "/Users/renee.li/Documents/dbt/tiktok/develop/dbt_packages/dbt_utils", "path": "macros/sql/get_tables_by_pattern_sql.sql", "original_file_path": "macros/sql/get_tables_by_pattern_sql.sql", "name": "default__get_tables_by_pattern_sql", "macro_sql": "{% macro default__get_tables_by_pattern_sql(schema_pattern, table_pattern, exclude='', database=target.database) %}\n\n select distinct\n table_schema as \"table_schema\",\n table_name as \"table_name\",\n case table_type\n when 'BASE TABLE' then 'table'\n when 'EXTERNAL TABLE' then 'external'\n when 'MATERIALIZED VIEW' then 'materializedview'\n else lower(table_type)\n end as \"table_type\"\n from {{ database }}.information_schema.tables\n where table_schema ilike '{{ schema_pattern }}'\n and table_name ilike '{{ table_pattern }}'\n and table_name not ilike '{{ exclude }}'\n\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1641494962.0348601}, "macro.dbt_utils.bigquery__get_tables_by_pattern_sql": {"unique_id": "macro.dbt_utils.bigquery__get_tables_by_pattern_sql", "package_name": "dbt_utils", "root_path": "/Users/renee.li/Documents/dbt/tiktok/develop/dbt_packages/dbt_utils", "path": "macros/sql/get_tables_by_pattern_sql.sql", "original_file_path": "macros/sql/get_tables_by_pattern_sql.sql", "name": "bigquery__get_tables_by_pattern_sql", "macro_sql": "{% macro bigquery__get_tables_by_pattern_sql(schema_pattern, table_pattern, exclude='', database=target.database) %}\n\n {% if '%' in schema_pattern %}\n {% set schemata=dbt_utils._bigquery__get_matching_schemata(schema_pattern, database) %}\n {% else %}\n {% set schemata=[schema_pattern] %}\n {% endif %}\n\n {% set sql %}\n {% for schema in schemata %}\n select distinct\n table_schema,\n table_name,\n case table_type\n when 'BASE TABLE' then 'table'\n else lower(table_type)\n end as table_type\n\n from {{ adapter.quote(database) }}.{{ schema }}.INFORMATION_SCHEMA.TABLES\n where lower(table_name) like lower ('{{ table_pattern }}')\n and lower(table_name) not like lower ('{{ exclude }}')\n\n {% if not loop.last %} union all {% endif %}\n\n {% endfor %}\n {% endset %}\n\n {{ return(sql) }}\n\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.dbt_utils._bigquery__get_matching_schemata"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1641494962.036375}, "macro.dbt_utils._bigquery__get_matching_schemata": {"unique_id": "macro.dbt_utils._bigquery__get_matching_schemata", "package_name": "dbt_utils", "root_path": "/Users/renee.li/Documents/dbt/tiktok/develop/dbt_packages/dbt_utils", "path": "macros/sql/get_tables_by_pattern_sql.sql", "original_file_path": "macros/sql/get_tables_by_pattern_sql.sql", "name": "_bigquery__get_matching_schemata", "macro_sql": "{% macro _bigquery__get_matching_schemata(schema_pattern, database) %}\n {% if execute %}\n\n {% set sql %}\n select schema_name from {{ adapter.quote(database) }}.INFORMATION_SCHEMA.SCHEMATA\n where lower(schema_name) like lower('{{ schema_pattern }}')\n {% endset %}\n\n {% set results=run_query(sql) %}\n\n {% set schemata=results.columns['schema_name'].values() %}\n\n {{ return(schemata) }}\n\n {% else %}\n\n {{ return([]) }}\n\n {% endif %}\n\n\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.dbt.run_query"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1641494962.0375}, "macro.dbt_utils.get_column_values": {"unique_id": "macro.dbt_utils.get_column_values", "package_name": "dbt_utils", "root_path": "/Users/renee.li/Documents/dbt/tiktok/develop/dbt_packages/dbt_utils", "path": "macros/sql/get_column_values.sql", "original_file_path": "macros/sql/get_column_values.sql", "name": "get_column_values", "macro_sql": "{% macro get_column_values(table, column, order_by='count(*) desc', max_records=none, default=none) -%}\n {{ return(adapter.dispatch('get_column_values', 'dbt_utils')(table, column, order_by, max_records, default)) }}\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.dbt_utils.default__get_column_values"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1641494962.039326}, "macro.dbt_utils.default__get_column_values": {"unique_id": "macro.dbt_utils.default__get_column_values", "package_name": "dbt_utils", "root_path": "/Users/renee.li/Documents/dbt/tiktok/develop/dbt_packages/dbt_utils", "path": "macros/sql/get_column_values.sql", "original_file_path": "macros/sql/get_column_values.sql", "name": "default__get_column_values", "macro_sql": "{% macro default__get_column_values(table, column, order_by='count(*) desc', max_records=none, default=none) -%}\n{% if default is none %}\n {% set default = [] %}\n{% endif %}\n {#-- Prevent querying of db in parsing mode. This works because this macro does not create any new refs. #}\n {%- if not execute -%}\n {{ return(default) }}\n {% endif %}\n\n {# Not all relations are tables. Renaming for internal clarity without breaking functionality for anyone using named arguments #}\n {# TODO: Change the method signature in a future 0.x.0 release #}\n {%- set target_relation = table -%}\n\n {# adapter.load_relation is a convenience wrapper to avoid building a Relation when we already have one #}\n {% set relation_exists = (load_relation(target_relation)) is not none %}\n\n {%- call statement('get_column_values', fetch_result=true) %}\n\n {%- if not relation_exists and default is none -%}\n\n {{ exceptions.raise_compiler_error(\"In get_column_values(): relation \" ~ target_relation ~ \" does not exist and no default value was provided.\") }}\n\n {%- elif not relation_exists and default is not none -%}\n\n {{ log(\"Relation \" ~ target_relation ~ \" does not exist. Returning the default value: \" ~ default) }}\n\n {{ return(default) }}\n\n {%- else -%}\n\n\n select\n {{ column }} as value\n\n from {{ target_relation }}\n group by {{ column }}\n order by {{ order_by }}\n\n {% if max_records is not none %}\n limit {{ max_records }}\n {% endif %}\n\n {% endif %}\n\n {%- endcall -%}\n\n {%- set value_list = load_result('get_column_values') -%}\n\n {%- if value_list and value_list['data'] -%}\n {%- set values = value_list['data'] | map(attribute=0) | list %}\n {{ return(values) }}\n {%- else -%}\n {{ return(default) }}\n {%- endif -%}\n\n{%- endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.dbt.load_relation", "macro.dbt.statement"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1641494962.04244}, "macro.dbt_utils.pivot": {"unique_id": "macro.dbt_utils.pivot", "package_name": "dbt_utils", "root_path": "/Users/renee.li/Documents/dbt/tiktok/develop/dbt_packages/dbt_utils", "path": "macros/sql/pivot.sql", "original_file_path": "macros/sql/pivot.sql", "name": "pivot", "macro_sql": "{% macro pivot(column,\n values,\n alias=True,\n agg='sum',\n cmp='=',\n prefix='',\n suffix='',\n then_value=1,\n else_value=0,\n quote_identifiers=True,\n distinct=False) %}\n {{ return(adapter.dispatch('pivot', 'dbt_utils')(column, values, alias, agg, cmp, prefix, suffix, then_value, else_value, quote_identifiers, distinct)) }}\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.dbt_utils.default__pivot"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1641494962.044468}, "macro.dbt_utils.default__pivot": {"unique_id": "macro.dbt_utils.default__pivot", "package_name": "dbt_utils", "root_path": "/Users/renee.li/Documents/dbt/tiktok/develop/dbt_packages/dbt_utils", "path": "macros/sql/pivot.sql", "original_file_path": "macros/sql/pivot.sql", "name": "default__pivot", "macro_sql": "{% macro default__pivot(column,\n values,\n alias=True,\n agg='sum',\n cmp='=',\n prefix='',\n suffix='',\n then_value=1,\n else_value=0,\n quote_identifiers=True,\n distinct=False) %}\n {% for v in values %}\n {{ agg }}(\n {% if distinct %} distinct {% endif %}\n case\n when {{ column }} {{ cmp }} '{{ v }}'\n then {{ then_value }}\n else {{ else_value }}\n end\n )\n {% if alias %}\n {% if quote_identifiers %}\n as {{ adapter.quote(prefix ~ v ~ suffix) }}\n {% else %}\n as {{ dbt_utils.slugify(prefix ~ v ~ suffix) }}\n {% endif %}\n {% endif %}\n {% if not loop.last %},{% endif %}\n {% endfor %}\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.dbt_utils.slugify"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1641494962.046277}, "macro.dbt_utils.get_query_results_as_dict": {"unique_id": "macro.dbt_utils.get_query_results_as_dict", "package_name": "dbt_utils", "root_path": "/Users/renee.li/Documents/dbt/tiktok/develop/dbt_packages/dbt_utils", "path": "macros/sql/get_query_results_as_dict.sql", "original_file_path": "macros/sql/get_query_results_as_dict.sql", "name": "get_query_results_as_dict", "macro_sql": "{% macro get_query_results_as_dict(query) %}\n {{ return(adapter.dispatch('get_query_results_as_dict', 'dbt_utils')(query)) }}\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.dbt_utils.default__get_query_results_as_dict"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1641494962.047146}, "macro.dbt_utils.default__get_query_results_as_dict": {"unique_id": "macro.dbt_utils.default__get_query_results_as_dict", "package_name": "dbt_utils", "root_path": "/Users/renee.li/Documents/dbt/tiktok/develop/dbt_packages/dbt_utils", "path": "macros/sql/get_query_results_as_dict.sql", "original_file_path": "macros/sql/get_query_results_as_dict.sql", "name": "default__get_query_results_as_dict", "macro_sql": "{% macro default__get_query_results_as_dict(query) %}\n\n{# This macro returns a dictionary of the form {column_name: (tuple_of_results)} #}\n\n {%- call statement('get_query_results', fetch_result=True,auto_begin=false) -%}\n\n {{ query }}\n\n {%- endcall -%}\n\n {% set sql_results={} %}\n\n {%- if execute -%}\n {% set sql_results_table = load_result('get_query_results').table.columns %}\n {% for column_name, column in sql_results_table.items() %}\n {% do sql_results.update({column_name: column.values()}) %}\n {% endfor %}\n {%- endif -%}\n\n {{ return(sql_results) }}\n\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.dbt.statement"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1641494962.048436}, "macro.dbt_utils.degrees_to_radians": {"unique_id": "macro.dbt_utils.degrees_to_radians", "package_name": "dbt_utils", "root_path": "/Users/renee.li/Documents/dbt/tiktok/develop/dbt_packages/dbt_utils", "path": "macros/sql/haversine_distance.sql", "original_file_path": "macros/sql/haversine_distance.sql", "name": "degrees_to_radians", "macro_sql": "{% macro degrees_to_radians(degrees) -%}\n acos(-1) * {{degrees}} / 180\n{%- endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1641494962.050187}, "macro.dbt_utils.haversine_distance": {"unique_id": "macro.dbt_utils.haversine_distance", "package_name": "dbt_utils", "root_path": "/Users/renee.li/Documents/dbt/tiktok/develop/dbt_packages/dbt_utils", "path": "macros/sql/haversine_distance.sql", "original_file_path": "macros/sql/haversine_distance.sql", "name": "haversine_distance", "macro_sql": "{% macro haversine_distance(lat1, lon1, lat2, lon2, unit='mi') -%}\n {{ return(adapter.dispatch('haversine_distance', 'dbt_utils')(lat1,lon1,lat2,lon2,unit)) }}\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.dbt_utils.default__haversine_distance"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1641494962.050804}, "macro.dbt_utils.default__haversine_distance": {"unique_id": "macro.dbt_utils.default__haversine_distance", "package_name": "dbt_utils", "root_path": "/Users/renee.li/Documents/dbt/tiktok/develop/dbt_packages/dbt_utils", "path": "macros/sql/haversine_distance.sql", "original_file_path": "macros/sql/haversine_distance.sql", "name": "default__haversine_distance", "macro_sql": "{% macro default__haversine_distance(lat1, lon1, lat2, lon2, unit='mi') -%}\n{%- if unit == 'mi' %}\n {% set conversion_rate = 1 %}\n{% elif unit == 'km' %}\n {% set conversion_rate = 1.60934 %}\n{% else %}\n {{ exceptions.raise_compiler_error(\"unit input must be one of 'mi' or 'km'. Got \" ~ unit) }}\n{% endif %}\n\n 2 * 3961 * asin(sqrt(power((sin(radians(({{ lat2 }} - {{ lat1 }}) / 2))), 2) +\n cos(radians({{lat1}})) * cos(radians({{lat2}})) *\n power((sin(radians(({{ lon2 }} - {{ lon1 }}) / 2))), 2))) * {{ conversion_rate }}\n\n{%- endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1641494962.0520802}, "macro.dbt_utils.bigquery__haversine_distance": {"unique_id": "macro.dbt_utils.bigquery__haversine_distance", "package_name": "dbt_utils", "root_path": "/Users/renee.li/Documents/dbt/tiktok/develop/dbt_packages/dbt_utils", "path": "macros/sql/haversine_distance.sql", "original_file_path": "macros/sql/haversine_distance.sql", "name": "bigquery__haversine_distance", "macro_sql": "{% macro bigquery__haversine_distance(lat1, lon1, lat2, lon2, unit='mi') -%}\n{% set radians_lat1 = dbt_utils.degrees_to_radians(lat1) %}\n{% set radians_lat2 = dbt_utils.degrees_to_radians(lat2) %}\n{% set radians_lon1 = dbt_utils.degrees_to_radians(lon1) %}\n{% set radians_lon2 = dbt_utils.degrees_to_radians(lon2) %}\n{%- if unit == 'mi' %}\n {% set conversion_rate = 1 %}\n{% elif unit == 'km' %}\n {% set conversion_rate = 1.60934 %}\n{% else %}\n {{ exceptions.raise_compiler_error(\"unit input must be one of 'mi' or 'km'. Got \" ~ unit) }}\n{% endif %}\n 2 * 3961 * asin(sqrt(power(sin(({{ radians_lat2 }} - {{ radians_lat1 }}) / 2), 2) +\n cos({{ radians_lat1 }}) * cos({{ radians_lat2 }}) *\n power(sin(({{ radians_lon2 }} - {{ radians_lon1 }}) / 2), 2))) * {{ conversion_rate }}\n\n{%- endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.dbt_utils.degrees_to_radians"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1641494962.053854}, "macro.spark_utils.get_tables": {"unique_id": "macro.spark_utils.get_tables", "package_name": "spark_utils", "root_path": "/Users/renee.li/Documents/dbt/tiktok/develop/dbt_packages/spark_utils", "path": "macros/maintenance_operation.sql", "original_file_path": "macros/maintenance_operation.sql", "name": "get_tables", "macro_sql": "{% macro get_tables(table_regex_pattern='.*') %}\n\n {% set tables = [] %}\n {% for database in spark__list_schemas('not_used') %}\n {% for table in spark__list_relations_without_caching(database[0]) %}\n {% set db_tablename = database[0] ~ \".\" ~ table[1] %}\n {% set is_match = modules.re.match(table_regex_pattern, db_tablename) %}\n {% if is_match %}\n {% call statement('table_detail', fetch_result=True) -%}\n describe extended {{ db_tablename }}\n {% endcall %}\n\n {% set table_type = load_result('table_detail').table|reverse|selectattr(0, 'in', ('type', 'TYPE', 'Type'))|first %}\n {% if table_type[1]|lower != 'view' %}\n {{ tables.append(db_tablename) }}\n {% endif %}\n {% endif %}\n {% endfor %}\n {% endfor %}\n {{ return(tables) }}\n\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.dbt.statement"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1641494962.062049}, "macro.spark_utils.get_delta_tables": {"unique_id": "macro.spark_utils.get_delta_tables", "package_name": "spark_utils", "root_path": "/Users/renee.li/Documents/dbt/tiktok/develop/dbt_packages/spark_utils", "path": "macros/maintenance_operation.sql", "original_file_path": "macros/maintenance_operation.sql", "name": "get_delta_tables", "macro_sql": "{% macro get_delta_tables(table_regex_pattern='.*') %}\n\n {% set delta_tables = [] %}\n {% for db_tablename in get_tables(table_regex_pattern) %}\n {% call statement('table_detail', fetch_result=True) -%}\n describe extended {{ db_tablename }}\n {% endcall %}\n\n {% set table_type = load_result('table_detail').table|reverse|selectattr(0, 'in', ('provider', 'PROVIDER', 'Provider'))|first %}\n {% if table_type[1]|lower == 'delta' %}\n {{ delta_tables.append(db_tablename) }}\n {% endif %}\n {% endfor %}\n {{ return(delta_tables) }}\n\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.spark_utils.get_tables", "macro.dbt.statement"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1641494962.063662}, "macro.spark_utils.get_statistic_columns": {"unique_id": "macro.spark_utils.get_statistic_columns", "package_name": "spark_utils", "root_path": "/Users/renee.li/Documents/dbt/tiktok/develop/dbt_packages/spark_utils", "path": "macros/maintenance_operation.sql", "original_file_path": "macros/maintenance_operation.sql", "name": "get_statistic_columns", "macro_sql": "{% macro get_statistic_columns(table) %}\n\n {% call statement('input_columns', fetch_result=True) %}\n SHOW COLUMNS IN {{ table }}\n {% endcall %}\n {% set input_columns = load_result('input_columns').table %}\n\n {% set output_columns = [] %}\n {% for column in input_columns %}\n {% call statement('column_information', fetch_result=True) %}\n DESCRIBE TABLE {{ table }} `{{ column[0] }}`\n {% endcall %}\n {% if not load_result('column_information').table[1][1].startswith('struct') and not load_result('column_information').table[1][1].startswith('array') %}\n {{ output_columns.append('`' ~ column[0] ~ '`') }}\n {% endif %}\n {% endfor %}\n {{ return(output_columns) }}\n\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.dbt.statement"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1641494962.0656629}, "macro.spark_utils.spark_optimize_delta_tables": {"unique_id": "macro.spark_utils.spark_optimize_delta_tables", "package_name": "spark_utils", "root_path": "/Users/renee.li/Documents/dbt/tiktok/develop/dbt_packages/spark_utils", "path": "macros/maintenance_operation.sql", "original_file_path": "macros/maintenance_operation.sql", "name": "spark_optimize_delta_tables", "macro_sql": "{% macro spark_optimize_delta_tables(table_regex_pattern='.*') %}\n\n {% for table in get_delta_tables(table_regex_pattern) %}\n {% set start=modules.datetime.datetime.now() %}\n {% set message_prefix=loop.index ~ \" of \" ~ loop.length %}\n {{ dbt_utils.log_info(message_prefix ~ \" Optimizing \" ~ table) }}\n {% do run_query(\"optimize \" ~ table) %}\n {% set end=modules.datetime.datetime.now() %}\n {% set total_seconds = (end - start).total_seconds() | round(2) %}\n {{ dbt_utils.log_info(message_prefix ~ \" Finished \" ~ table ~ \" in \" ~ total_seconds ~ \"s\") }}\n {% endfor %}\n\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.spark_utils.get_delta_tables", "macro.dbt_utils.log_info", "macro.dbt.run_query"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1641494962.0672581}, "macro.spark_utils.spark_vacuum_delta_tables": {"unique_id": "macro.spark_utils.spark_vacuum_delta_tables", "package_name": "spark_utils", "root_path": "/Users/renee.li/Documents/dbt/tiktok/develop/dbt_packages/spark_utils", "path": "macros/maintenance_operation.sql", "original_file_path": "macros/maintenance_operation.sql", "name": "spark_vacuum_delta_tables", "macro_sql": "{% macro spark_vacuum_delta_tables(table_regex_pattern='.*') %}\n\n {% for table in get_delta_tables(table_regex_pattern) %}\n {% set start=modules.datetime.datetime.now() %}\n {% set message_prefix=loop.index ~ \" of \" ~ loop.length %}\n {{ dbt_utils.log_info(message_prefix ~ \" Vacuuming \" ~ table) }}\n {% do run_query(\"vacuum \" ~ table) %}\n {% set end=modules.datetime.datetime.now() %}\n {% set total_seconds = (end - start).total_seconds() | round(2) %}\n {{ dbt_utils.log_info(message_prefix ~ \" Finished \" ~ table ~ \" in \" ~ total_seconds ~ \"s\") }}\n {% endfor %}\n\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.spark_utils.get_delta_tables", "macro.dbt_utils.log_info", "macro.dbt.run_query"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1641494962.068851}, "macro.spark_utils.spark_analyze_tables": {"unique_id": "macro.spark_utils.spark_analyze_tables", "package_name": "spark_utils", "root_path": "/Users/renee.li/Documents/dbt/tiktok/develop/dbt_packages/spark_utils", "path": "macros/maintenance_operation.sql", "original_file_path": "macros/maintenance_operation.sql", "name": "spark_analyze_tables", "macro_sql": "{% macro spark_analyze_tables(table_regex_pattern='.*') %}\n\n {% for table in get_tables(table_regex_pattern) %}\n {% set start=modules.datetime.datetime.now() %}\n {% set columns = get_statistic_columns(table) | join(',') %}\n {% set message_prefix=loop.index ~ \" of \" ~ loop.length %}\n {{ dbt_utils.log_info(message_prefix ~ \" Analyzing \" ~ table) }}\n {% if columns != '' %}\n {% do run_query(\"analyze table \" ~ table ~ \" compute statistics for columns \" ~ columns) %}\n {% endif %}\n {% set end=modules.datetime.datetime.now() %}\n {% set total_seconds = (end - start).total_seconds() | round(2) %}\n {{ dbt_utils.log_info(message_prefix ~ \" Finished \" ~ table ~ \" in \" ~ total_seconds ~ \"s\") }}\n {% endfor %}\n\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.spark_utils.get_tables", "macro.spark_utils.get_statistic_columns", "macro.dbt_utils.log_info", "macro.dbt.run_query"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1641494962.070894}, "macro.spark_utils.spark__concat": {"unique_id": "macro.spark_utils.spark__concat", "package_name": "spark_utils", "root_path": "/Users/renee.li/Documents/dbt/tiktok/develop/dbt_packages/spark_utils", "path": "macros/dbt_utils/cross_db_utils/concat.sql", "original_file_path": "macros/dbt_utils/cross_db_utils/concat.sql", "name": "spark__concat", "macro_sql": "{% macro spark__concat(fields) -%}\n concat({{ fields|join(', ') }})\n{%- endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1641494962.071439}, "macro.spark_utils.spark__type_numeric": {"unique_id": "macro.spark_utils.spark__type_numeric", "package_name": "spark_utils", "root_path": "/Users/renee.li/Documents/dbt/tiktok/develop/dbt_packages/spark_utils", "path": "macros/dbt_utils/cross_db_utils/datatypes.sql", "original_file_path": "macros/dbt_utils/cross_db_utils/datatypes.sql", "name": "spark__type_numeric", "macro_sql": "{% macro spark__type_numeric() %}\n decimal(28, 6)\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1641494962.071806}, "macro.spark_utils.spark__dateadd": {"unique_id": "macro.spark_utils.spark__dateadd", "package_name": "spark_utils", "root_path": "/Users/renee.li/Documents/dbt/tiktok/develop/dbt_packages/spark_utils", "path": "macros/dbt_utils/cross_db_utils/dateadd.sql", "original_file_path": "macros/dbt_utils/cross_db_utils/dateadd.sql", "name": "spark__dateadd", "macro_sql": "{% macro spark__dateadd(datepart, interval, from_date_or_timestamp) %}\n\n {%- set clock_component -%}\n {# make sure the dates + timestamps are real, otherwise raise an error asap #}\n to_unix_timestamp({{ spark_utils.assert_not_null('to_timestamp', from_date_or_timestamp) }})\n - to_unix_timestamp({{ spark_utils.assert_not_null('date', from_date_or_timestamp) }})\n {%- endset -%}\n\n {%- if datepart in ['day', 'week'] -%}\n \n {%- set multiplier = 7 if datepart == 'week' else 1 -%}\n\n to_timestamp(\n to_unix_timestamp(\n date_add(\n {{ spark_utils.assert_not_null('date', from_date_or_timestamp) }},\n cast({{interval}} * {{multiplier}} as int)\n )\n ) + {{clock_component}}\n )\n\n {%- elif datepart in ['month', 'quarter', 'year'] -%}\n \n {%- set multiplier -%} \n {%- if datepart == 'month' -%} 1\n {%- elif datepart == 'quarter' -%} 3\n {%- elif datepart == 'year' -%} 12\n {%- endif -%}\n {%- endset -%}\n\n to_timestamp(\n to_unix_timestamp(\n add_months(\n {{ spark_utils.assert_not_null('date', from_date_or_timestamp) }},\n cast({{interval}} * {{multiplier}} as int)\n )\n ) + {{clock_component}}\n )\n\n {%- elif datepart in ('hour', 'minute', 'second', 'millisecond', 'microsecond') -%}\n \n {%- set multiplier -%} \n {%- if datepart == 'hour' -%} 3600\n {%- elif datepart == 'minute' -%} 60\n {%- elif datepart == 'second' -%} 1\n {%- elif datepart == 'millisecond' -%} (1/1000000)\n {%- elif datepart == 'microsecond' -%} (1/1000000)\n {%- endif -%}\n {%- endset -%}\n\n to_timestamp(\n {{ spark_utils.assert_not_null('to_unix_timestamp', from_date_or_timestamp) }}\n + cast({{interval}} * {{multiplier}} as int)\n )\n\n {%- else -%}\n\n {{ exceptions.raise_compiler_error(\"macro dateadd not implemented for datepart ~ '\" ~ datepart ~ \"' ~ on Spark\") }}\n\n {%- endif -%}\n\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.spark_utils.assert_not_null"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1641494962.07711}, "macro.spark_utils.spark__datediff": {"unique_id": "macro.spark_utils.spark__datediff", "package_name": "spark_utils", "root_path": "/Users/renee.li/Documents/dbt/tiktok/develop/dbt_packages/spark_utils", "path": "macros/dbt_utils/cross_db_utils/datediff.sql", "original_file_path": "macros/dbt_utils/cross_db_utils/datediff.sql", "name": "spark__datediff", "macro_sql": "{% macro spark__datediff(first_date, second_date, datepart) %}\n\n {%- if datepart in ['day', 'week', 'month', 'quarter', 'year'] -%}\n \n {# make sure the dates are real, otherwise raise an error asap #}\n {% set first_date = spark_utils.assert_not_null('date', first_date) %}\n {% set second_date = spark_utils.assert_not_null('date', second_date) %}\n \n {%- endif -%}\n \n {%- if datepart == 'day' -%}\n \n datediff({{second_date}}, {{first_date}})\n \n {%- elif datepart == 'week' -%}\n \n case when {{first_date}} < {{second_date}}\n then floor(datediff({{second_date}}, {{first_date}})/7)\n else ceil(datediff({{second_date}}, {{first_date}})/7)\n end\n \n -- did we cross a week boundary (Sunday)?\n + case\n when {{first_date}} < {{second_date}} and dayofweek({{second_date}}) < dayofweek({{first_date}}) then 1\n when {{first_date}} > {{second_date}} and dayofweek({{second_date}}) > dayofweek({{first_date}}) then -1\n else 0 end\n\n {%- elif datepart == 'month' -%}\n\n case when {{first_date}} < {{second_date}}\n then floor(months_between(date({{second_date}}), date({{first_date}})))\n else ceil(months_between(date({{second_date}}), date({{first_date}})))\n end\n \n -- did we cross a month boundary?\n + case\n when {{first_date}} < {{second_date}} and dayofmonth({{second_date}}) < dayofmonth({{first_date}}) then 1\n when {{first_date}} > {{second_date}} and dayofmonth({{second_date}}) > dayofmonth({{first_date}}) then -1\n else 0 end\n \n {%- elif datepart == 'quarter' -%}\n \n case when {{first_date}} < {{second_date}}\n then floor(months_between(date({{second_date}}), date({{first_date}}))/3)\n else ceil(months_between(date({{second_date}}), date({{first_date}}))/3)\n end\n \n -- did we cross a quarter boundary?\n + case\n when {{first_date}} < {{second_date}} and (\n (dayofyear({{second_date}}) - (quarter({{second_date}}) * 365/4))\n < (dayofyear({{first_date}}) - (quarter({{first_date}}) * 365/4))\n ) then 1\n when {{first_date}} > {{second_date}} and (\n (dayofyear({{second_date}}) - (quarter({{second_date}}) * 365/4))\n > (dayofyear({{first_date}}) - (quarter({{first_date}}) * 365/4))\n ) then -1\n else 0 end\n\n {%- elif datepart == 'year' -%}\n \n year({{second_date}}) - year({{first_date}})\n\n {%- elif datepart in ('hour', 'minute', 'second', 'millisecond', 'microsecond') -%}\n \n {%- set divisor -%} \n {%- if datepart == 'hour' -%} 3600\n {%- elif datepart == 'minute' -%} 60\n {%- elif datepart == 'second' -%} 1\n {%- elif datepart == 'millisecond' -%} (1/1000)\n {%- elif datepart == 'microsecond' -%} (1/1000000)\n {%- endif -%}\n {%- endset -%}\n\n case when {{first_date}} < {{second_date}}\n then ceil((\n {# make sure the timestamps are real, otherwise raise an error asap #}\n {{ spark_utils.assert_not_null('to_unix_timestamp', spark_utils.assert_not_null('to_timestamp', second_date)) }}\n - {{ spark_utils.assert_not_null('to_unix_timestamp', spark_utils.assert_not_null('to_timestamp', first_date)) }}\n ) / {{divisor}})\n else floor((\n {{ spark_utils.assert_not_null('to_unix_timestamp', spark_utils.assert_not_null('to_timestamp', second_date)) }}\n - {{ spark_utils.assert_not_null('to_unix_timestamp', spark_utils.assert_not_null('to_timestamp', first_date)) }}\n ) / {{divisor}})\n end\n \n {% if datepart == 'millisecond' %}\n + cast(date_format({{second_date}}, 'SSS') as int)\n - cast(date_format({{first_date}}, 'SSS') as int)\n {% endif %}\n \n {% if datepart == 'microsecond' %} \n {% set capture_str = '[0-9]{4}-[0-9]{2}-[0-9]{2}.[0-9]{2}:[0-9]{2}:[0-9]{2}.([0-9]{6})' %}\n -- Spark doesn't really support microseconds, so this is a massive hack!\n -- It will only work if the timestamp-string is of the format\n -- 'yyyy-MM-dd-HH mm.ss.SSSSSS'\n + cast(regexp_extract({{second_date}}, '{{capture_str}}', 1) as int)\n - cast(regexp_extract({{first_date}}, '{{capture_str}}', 1) as int) \n {% endif %}\n\n {%- else -%}\n\n {{ exceptions.raise_compiler_error(\"macro datediff not implemented for datepart ~ '\" ~ datepart ~ \"' ~ on Spark\") }}\n\n {%- endif -%}\n\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.spark_utils.assert_not_null"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1641494962.089886}, "macro.spark_utils.spark__current_timestamp": {"unique_id": "macro.spark_utils.spark__current_timestamp", "package_name": "spark_utils", "root_path": "/Users/renee.li/Documents/dbt/tiktok/develop/dbt_packages/spark_utils", "path": "macros/dbt_utils/cross_db_utils/current_timestamp.sql", "original_file_path": "macros/dbt_utils/cross_db_utils/current_timestamp.sql", "name": "spark__current_timestamp", "macro_sql": "{% macro spark__current_timestamp() %}\n current_timestamp()\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1641494962.0902882}, "macro.spark_utils.spark__current_timestamp_in_utc": {"unique_id": "macro.spark_utils.spark__current_timestamp_in_utc", "package_name": "spark_utils", "root_path": "/Users/renee.li/Documents/dbt/tiktok/develop/dbt_packages/spark_utils", "path": "macros/dbt_utils/cross_db_utils/current_timestamp.sql", "original_file_path": "macros/dbt_utils/cross_db_utils/current_timestamp.sql", "name": "spark__current_timestamp_in_utc", "macro_sql": "{% macro spark__current_timestamp_in_utc() %}\n unix_timestamp()\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1641494962.090455}, "macro.spark_utils.spark__split_part": {"unique_id": "macro.spark_utils.spark__split_part", "package_name": "spark_utils", "root_path": "/Users/renee.li/Documents/dbt/tiktok/develop/dbt_packages/spark_utils", "path": "macros/dbt_utils/cross_db_utils/split_part.sql", "original_file_path": "macros/dbt_utils/cross_db_utils/split_part.sql", "name": "spark__split_part", "macro_sql": "{% macro spark__split_part(string_text, delimiter_text, part_number) %}\n\n {% set delimiter_expr %}\n \n -- escape if starts with a special character\n case when regexp_extract({{ delimiter_text }}, '([^A-Za-z0-9])(.*)', 1) != '_'\n then concat('\\\\', {{ delimiter_text }})\n else {{ delimiter_text }} end\n \n {% endset %}\n\n {% set split_part_expr %}\n \n split(\n {{ string_text }},\n {{ delimiter_expr }}\n )[({{ part_number - 1 }})]\n \n {% endset %}\n \n {{ return(split_part_expr) }}\n\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1641494962.091727}, "macro.spark_utils.spark__get_relations_by_pattern": {"unique_id": "macro.spark_utils.spark__get_relations_by_pattern", "package_name": "spark_utils", "root_path": "/Users/renee.li/Documents/dbt/tiktok/develop/dbt_packages/spark_utils", "path": "macros/dbt_utils/sql/get_relations_by_prefix.sql", "original_file_path": "macros/dbt_utils/sql/get_relations_by_prefix.sql", "name": "spark__get_relations_by_pattern", "macro_sql": "{% macro spark__get_relations_by_pattern(schema_pattern, table_pattern, exclude='', database=target.database) %}\n\n {%- call statement('get_tables', fetch_result=True) %}\n\n show table extended in {{ schema_pattern }} like '{{ table_pattern }}'\n\n {%- endcall -%}\n\n {%- set table_list = load_result('get_tables') -%}\n\n {%- if table_list and table_list['table'] -%}\n {%- set tbl_relations = [] -%}\n {%- for row in table_list['table'] -%}\n {%- set tbl_relation = api.Relation.create(\n database=None,\n schema=row[0],\n identifier=row[1],\n type=('view' if 'Type: VIEW' in row[3] else 'table')\n ) -%}\n {%- do tbl_relations.append(tbl_relation) -%}\n {%- endfor -%}\n\n {{ return(tbl_relations) }}\n {%- else -%}\n {{ return([]) }}\n {%- endif -%}\n\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.dbt.statement"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1641494962.0949252}, "macro.spark_utils.spark__get_relations_by_prefix": {"unique_id": "macro.spark_utils.spark__get_relations_by_prefix", "package_name": "spark_utils", "root_path": "/Users/renee.li/Documents/dbt/tiktok/develop/dbt_packages/spark_utils", "path": "macros/dbt_utils/sql/get_relations_by_prefix.sql", "original_file_path": "macros/dbt_utils/sql/get_relations_by_prefix.sql", "name": "spark__get_relations_by_prefix", "macro_sql": "{% macro spark__get_relations_by_prefix(schema_pattern, table_pattern, exclude='', database=target.database) %}\n {% set table_pattern = table_pattern ~ '*' %}\n {{ return(spark_utils.spark__get_relations_by_pattern(schema_pattern, table_pattern, exclude='', database=target.database)) }}\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.spark_utils.spark__get_relations_by_pattern"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1641494962.095652}, "macro.spark_utils.spark__get_tables_by_pattern": {"unique_id": "macro.spark_utils.spark__get_tables_by_pattern", "package_name": "spark_utils", "root_path": "/Users/renee.li/Documents/dbt/tiktok/develop/dbt_packages/spark_utils", "path": "macros/dbt_utils/sql/get_relations_by_prefix.sql", "original_file_path": "macros/dbt_utils/sql/get_relations_by_prefix.sql", "name": "spark__get_tables_by_pattern", "macro_sql": "{% macro spark__get_tables_by_pattern(schema_pattern, table_pattern, exclude='', database=target.database) %}\n {{ return(spark_utils.spark__get_relations_by_pattern(schema_pattern, table_pattern, exclude='', database=target.database)) }}\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.spark_utils.spark__get_relations_by_pattern"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1641494962.09625}, "macro.spark_utils.spark__get_tables_by_prefix": {"unique_id": "macro.spark_utils.spark__get_tables_by_prefix", "package_name": "spark_utils", "root_path": "/Users/renee.li/Documents/dbt/tiktok/develop/dbt_packages/spark_utils", "path": "macros/dbt_utils/sql/get_relations_by_prefix.sql", "original_file_path": "macros/dbt_utils/sql/get_relations_by_prefix.sql", "name": "spark__get_tables_by_prefix", "macro_sql": "{% macro spark__get_tables_by_prefix(schema_pattern, table_pattern, exclude='', database=target.database) %}\n {{ return(spark_utils.spark__get_relations_by_prefix(schema_pattern, table_pattern, exclude='', database=target.database)) }}\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.spark_utils.spark__get_relations_by_prefix"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1641494962.096915}, "macro.spark_utils.assert_not_null": {"unique_id": "macro.spark_utils.assert_not_null", "package_name": "spark_utils", "root_path": "/Users/renee.li/Documents/dbt/tiktok/develop/dbt_packages/spark_utils", "path": "macros/etc/assert_not_null.sql", "original_file_path": "macros/etc/assert_not_null.sql", "name": "assert_not_null", "macro_sql": "{% macro assert_not_null(function, arg) -%}\n {{ return(adapter.dispatch('assert_not_null', 'spark_utils')(function, arg)) }}\n{%- endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.spark_utils.default__assert_not_null"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1641494962.097687}, "macro.spark_utils.default__assert_not_null": {"unique_id": "macro.spark_utils.default__assert_not_null", "package_name": "spark_utils", "root_path": "/Users/renee.li/Documents/dbt/tiktok/develop/dbt_packages/spark_utils", "path": "macros/etc/assert_not_null.sql", "original_file_path": "macros/etc/assert_not_null.sql", "name": "default__assert_not_null", "macro_sql": "{% macro default__assert_not_null(function, arg) %}\n\n coalesce({{function}}({{arg}}), nvl2({{function}}({{arg}}), assert_true({{function}}({{arg}}) is not null), null))\n\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1641494962.098146}, "macro.spark_utils.spark__convert_timezone": {"unique_id": "macro.spark_utils.spark__convert_timezone", "package_name": "spark_utils", "root_path": "/Users/renee.li/Documents/dbt/tiktok/develop/dbt_packages/spark_utils", "path": "macros/snowplow/convert_timezone.sql", "original_file_path": "macros/snowplow/convert_timezone.sql", "name": "spark__convert_timezone", "macro_sql": "{% macro spark__convert_timezone(in_tz, out_tz, in_timestamp) %}\n from_utc_timestamp(to_utc_timestamp({{in_timestamp}}, {{in_tz}}), {{out_tz}})\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1641494962.098718}, "macro.fivetran_utils.enabled_vars": {"unique_id": "macro.fivetran_utils.enabled_vars", "package_name": "fivetran_utils", "root_path": "/Users/renee.li/Documents/dbt/tiktok/develop/dbt_packages/fivetran_utils", "path": "macros/enabled_vars.sql", "original_file_path": "macros/enabled_vars.sql", "name": "enabled_vars", "macro_sql": "{% macro enabled_vars(vars) %}\n\n{% for v in vars %}\n \n {% if var(v, True) == False %}\n {{ return(False) }}\n {% endif %}\n\n{% endfor %}\n\n{{ return(True) }}\n\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1641494962.099686}, "macro.fivetran_utils.percentile": {"unique_id": "macro.fivetran_utils.percentile", "package_name": "fivetran_utils", "root_path": "/Users/renee.li/Documents/dbt/tiktok/develop/dbt_packages/fivetran_utils", "path": "macros/percentile.sql", "original_file_path": "macros/percentile.sql", "name": "percentile", "macro_sql": "{% macro percentile(percentile_field, partition_field, percent) -%}\n\n{{ adapter.dispatch('percentile', 'fivetran_utils') (percentile_field, partition_field, percent) }}\n\n{%- endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.fivetran_utils.default__percentile"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1641494962.1012638}, "macro.fivetran_utils.default__percentile": {"unique_id": "macro.fivetran_utils.default__percentile", "package_name": "fivetran_utils", "root_path": "/Users/renee.li/Documents/dbt/tiktok/develop/dbt_packages/fivetran_utils", "path": "macros/percentile.sql", "original_file_path": "macros/percentile.sql", "name": "default__percentile", "macro_sql": "{% macro default__percentile(percentile_field, partition_field, percent) %}\n\n percentile_cont( \n {{ percent }} )\n within group ( order by {{ percentile_field }} )\n over ( partition by {{ partition_field }} )\n\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1641494962.101642}, "macro.fivetran_utils.redshift__percentile": {"unique_id": "macro.fivetran_utils.redshift__percentile", "package_name": "fivetran_utils", "root_path": "/Users/renee.li/Documents/dbt/tiktok/develop/dbt_packages/fivetran_utils", "path": "macros/percentile.sql", "original_file_path": "macros/percentile.sql", "name": "redshift__percentile", "macro_sql": "{% macro redshift__percentile(percentile_field, partition_field, percent) %}\n\n percentile_cont( \n {{ percent }} )\n within group ( order by {{ percentile_field }} )\n over ( partition by {{ partition_field }} )\n\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1641494962.102009}, "macro.fivetran_utils.bigquery__percentile": {"unique_id": "macro.fivetran_utils.bigquery__percentile", "package_name": "fivetran_utils", "root_path": "/Users/renee.li/Documents/dbt/tiktok/develop/dbt_packages/fivetran_utils", "path": "macros/percentile.sql", "original_file_path": "macros/percentile.sql", "name": "bigquery__percentile", "macro_sql": "{% macro bigquery__percentile(percentile_field, partition_field, percent) %}\n\n percentile_cont( \n {{ percentile_field }}, \n {{ percent }}) \n over (partition by {{ partition_field }} \n )\n\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1641494962.102378}, "macro.fivetran_utils.postgres__percentile": {"unique_id": "macro.fivetran_utils.postgres__percentile", "package_name": "fivetran_utils", "root_path": "/Users/renee.li/Documents/dbt/tiktok/develop/dbt_packages/fivetran_utils", "path": "macros/percentile.sql", "original_file_path": "macros/percentile.sql", "name": "postgres__percentile", "macro_sql": "{% macro postgres__percentile(percentile_field, partition_field, percent) %}\n\n percentile_cont( \n {{ percent }} )\n within group ( order by {{ percentile_field }} )\n /* have to group by partition field */\n\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1641494962.102706}, "macro.fivetran_utils.spark__percentile": {"unique_id": "macro.fivetran_utils.spark__percentile", "package_name": "fivetran_utils", "root_path": "/Users/renee.li/Documents/dbt/tiktok/develop/dbt_packages/fivetran_utils", "path": "macros/percentile.sql", "original_file_path": "macros/percentile.sql", "name": "spark__percentile", "macro_sql": "{% macro spark__percentile(percentile_field, partition_field, percent) %}\n\n percentile( \n {{ percentile_field }}, \n {{ percent }}) \n over (partition by {{ partition_field }} \n )\n\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1641494962.103083}, "macro.fivetran_utils.pivot_json_extract": {"unique_id": "macro.fivetran_utils.pivot_json_extract", "package_name": "fivetran_utils", "root_path": "/Users/renee.li/Documents/dbt/tiktok/develop/dbt_packages/fivetran_utils", "path": "macros/pivot_json_extract.sql", "original_file_path": "macros/pivot_json_extract.sql", "name": "pivot_json_extract", "macro_sql": "{% macro pivot_json_extract(string, list_of_properties) %}\n\n{%- for property in list_of_properties -%}\n\nreplace( {{ fivetran_utils.json_extract(string, property) }}, '\"', '') as {{ property | replace(' ', '_') | lower }}\n\n{%- if not loop.last -%},{%- endif %}\n{% endfor -%}\n\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.fivetran_utils.json_extract"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1641494962.104098}, "macro.fivetran_utils.persist_pass_through_columns": {"unique_id": "macro.fivetran_utils.persist_pass_through_columns", "package_name": "fivetran_utils", "root_path": "/Users/renee.li/Documents/dbt/tiktok/develop/dbt_packages/fivetran_utils", "path": "macros/persist_pass_through_columns.sql", "original_file_path": "macros/persist_pass_through_columns.sql", "name": "persist_pass_through_columns", "macro_sql": "{% macro persist_pass_through_columns(pass_through_variable) %}\n\n{% if var(pass_through_variable, none) %}\n {% for field in var(pass_through_variable) %}\n , {{ field.alias if field.alias else field.name }}\n {% endfor %}\n{% endif %}\n\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1641494962.105058}, "macro.fivetran_utils.json_parse": {"unique_id": "macro.fivetran_utils.json_parse", "package_name": "fivetran_utils", "root_path": "/Users/renee.li/Documents/dbt/tiktok/develop/dbt_packages/fivetran_utils", "path": "macros/json_parse.sql", "original_file_path": "macros/json_parse.sql", "name": "json_parse", "macro_sql": "{% macro json_parse(string, string_path) -%}\n\n{{ adapter.dispatch('json_parse', 'fivetran_utils') (string, string_path) }}\n\n{%- endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.fivetran_utils.snowflake__json_parse"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1641494962.106946}, "macro.fivetran_utils.default__json_parse": {"unique_id": "macro.fivetran_utils.default__json_parse", "package_name": "fivetran_utils", "root_path": "/Users/renee.li/Documents/dbt/tiktok/develop/dbt_packages/fivetran_utils", "path": "macros/json_parse.sql", "original_file_path": "macros/json_parse.sql", "name": "default__json_parse", "macro_sql": "{% macro default__json_parse(string, string_path) %}\n\n json_extract_path_text({{string}}, {%- for s in string_path -%}'{{ s }}'{%- if not loop.last -%},{%- endif -%}{%- endfor -%} )\n\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1641494962.1076171}, "macro.fivetran_utils.redshift__json_parse": {"unique_id": "macro.fivetran_utils.redshift__json_parse", "package_name": "fivetran_utils", "root_path": "/Users/renee.li/Documents/dbt/tiktok/develop/dbt_packages/fivetran_utils", "path": "macros/json_parse.sql", "original_file_path": "macros/json_parse.sql", "name": "redshift__json_parse", "macro_sql": "{% macro redshift__json_parse(string, string_path) %}\n\n json_extract_path_text({{string}}, {%- for s in string_path -%}'{{ s }}'{%- if not loop.last -%},{%- endif -%}{%- endfor -%} )\n\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1641494962.10817}, "macro.fivetran_utils.bigquery__json_parse": {"unique_id": "macro.fivetran_utils.bigquery__json_parse", "package_name": "fivetran_utils", "root_path": "/Users/renee.li/Documents/dbt/tiktok/develop/dbt_packages/fivetran_utils", "path": "macros/json_parse.sql", "original_file_path": "macros/json_parse.sql", "name": "bigquery__json_parse", "macro_sql": "{% macro bigquery__json_parse(string, string_path) %}\n\n \n json_extract_scalar({{string}}, '$.{%- for s in string_path -%}{{ s }}{%- if not loop.last -%}.{%- endif -%}{%- endfor -%} ')\n\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1641494962.108704}, "macro.fivetran_utils.postgres__json_parse": {"unique_id": "macro.fivetran_utils.postgres__json_parse", "package_name": "fivetran_utils", "root_path": "/Users/renee.li/Documents/dbt/tiktok/develop/dbt_packages/fivetran_utils", "path": "macros/json_parse.sql", "original_file_path": "macros/json_parse.sql", "name": "postgres__json_parse", "macro_sql": "{% macro postgres__json_parse(string, string_path) %}\n\n {{string}}::json #>> '{ {%- for s in string_path -%}{{ s }}{%- if not loop.last -%},{%- endif -%}{%- endfor -%} }'\n\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1641494962.109238}, "macro.fivetran_utils.snowflake__json_parse": {"unique_id": "macro.fivetran_utils.snowflake__json_parse", "package_name": "fivetran_utils", "root_path": "/Users/renee.li/Documents/dbt/tiktok/develop/dbt_packages/fivetran_utils", "path": "macros/json_parse.sql", "original_file_path": "macros/json_parse.sql", "name": "snowflake__json_parse", "macro_sql": "{% macro snowflake__json_parse(string, string_path) %}\n\n parse_json( {{string}} ) {%- for s in string_path -%}{% if s is number %}[{{ s }}]{% else %}['{{ s }}']{% endif %}{%- endfor -%}\n\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1641494962.10983}, "macro.fivetran_utils.spark__json_parse": {"unique_id": "macro.fivetran_utils.spark__json_parse", "package_name": "fivetran_utils", "root_path": "/Users/renee.li/Documents/dbt/tiktok/develop/dbt_packages/fivetran_utils", "path": "macros/json_parse.sql", "original_file_path": "macros/json_parse.sql", "name": "spark__json_parse", "macro_sql": "{% macro spark__json_parse(string, string_path) %}\n\n {{string}} : {%- for s in string_path -%}{% if s is number %}[{{ s }}]{% else %}['{{ s }}']{% endif %}{%- endfor -%}\n\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1641494962.110424}, "macro.fivetran_utils.max_bool": {"unique_id": "macro.fivetran_utils.max_bool", "package_name": "fivetran_utils", "root_path": "/Users/renee.li/Documents/dbt/tiktok/develop/dbt_packages/fivetran_utils", "path": "macros/max_bool.sql", "original_file_path": "macros/max_bool.sql", "name": "max_bool", "macro_sql": "{% macro max_bool(boolean_field) -%}\n\n{{ adapter.dispatch('max_bool', 'fivetran_utils') (boolean_field) }}\n\n{%- endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.fivetran_utils.snowflake__max_bool"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1641494962.111166}, "macro.fivetran_utils.default__max_bool": {"unique_id": "macro.fivetran_utils.default__max_bool", "package_name": "fivetran_utils", "root_path": "/Users/renee.li/Documents/dbt/tiktok/develop/dbt_packages/fivetran_utils", "path": "macros/max_bool.sql", "original_file_path": "macros/max_bool.sql", "name": "default__max_bool", "macro_sql": "{% macro default__max_bool(boolean_field) %}\n\n bool_or( {{ boolean_field }} )\n\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1641494962.111399}, "macro.fivetran_utils.snowflake__max_bool": {"unique_id": "macro.fivetran_utils.snowflake__max_bool", "package_name": "fivetran_utils", "root_path": "/Users/renee.li/Documents/dbt/tiktok/develop/dbt_packages/fivetran_utils", "path": "macros/max_bool.sql", "original_file_path": "macros/max_bool.sql", "name": "snowflake__max_bool", "macro_sql": "{% macro snowflake__max_bool(boolean_field) %}\n\n max( {{ boolean_field }} )\n\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1641494962.11164}, "macro.fivetran_utils.bigquery__max_bool": {"unique_id": "macro.fivetran_utils.bigquery__max_bool", "package_name": "fivetran_utils", "root_path": "/Users/renee.li/Documents/dbt/tiktok/develop/dbt_packages/fivetran_utils", "path": "macros/max_bool.sql", "original_file_path": "macros/max_bool.sql", "name": "bigquery__max_bool", "macro_sql": "{% macro bigquery__max_bool(boolean_field) %}\n\n max( {{ boolean_field }} )\n\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1641494962.111871}, "macro.fivetran_utils.calculated_fields": {"unique_id": "macro.fivetran_utils.calculated_fields", "package_name": "fivetran_utils", "root_path": "/Users/renee.li/Documents/dbt/tiktok/develop/dbt_packages/fivetran_utils", "path": "macros/calculated_fields.sql", "original_file_path": "macros/calculated_fields.sql", "name": "calculated_fields", "macro_sql": "{% macro calculated_fields(variable) -%}\n\n{% if var(variable, none) %}\n {% for field in var(variable) %}\n , {{ field.transform_sql }} as {{ field.name }} \n {% endfor %}\n{% endif %}\n\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1641494962.112782}, "macro.fivetran_utils.seed_data_helper": {"unique_id": "macro.fivetran_utils.seed_data_helper", "package_name": "fivetran_utils", "root_path": "/Users/renee.li/Documents/dbt/tiktok/develop/dbt_packages/fivetran_utils", "path": "macros/seed_data_helper.sql", "original_file_path": "macros/seed_data_helper.sql", "name": "seed_data_helper", "macro_sql": "{% macro seed_data_helper(seed_name, warehouses) %}\n\n{% if target.type in warehouses %}\n {% for w in warehouses %}\n {% if target.type == w %}\n {{ return(ref(seed_name ~ \"_\" ~ w ~ \"\")) }}\n {% endif %}\n {% endfor %}\n{% else %}\n{{ return(ref(seed_name)) }}\n{% endif %}\n\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1641494962.114114}, "macro.fivetran_utils.fill_pass_through_columns": {"unique_id": "macro.fivetran_utils.fill_pass_through_columns", "package_name": "fivetran_utils", "root_path": "/Users/renee.li/Documents/dbt/tiktok/develop/dbt_packages/fivetran_utils", "path": "macros/fill_pass_through_columns.sql", "original_file_path": "macros/fill_pass_through_columns.sql", "name": "fill_pass_through_columns", "macro_sql": "{% macro fill_pass_through_columns(pass_through_variable) %}\n\n{% if var(pass_through_variable) %}\n {% for field in var(pass_through_variable) %}\n {% if field.transform_sql %}\n , {{ field.transform_sql }} as {{ field.alias if field.alias else field.name }}\n {% else %}\n , {{ field.alias if field.alias else field.name }}\n {% endif %}\n {% endfor %}\n{% endif %}\n\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1641494962.11556}, "macro.fivetran_utils.string_agg": {"unique_id": "macro.fivetran_utils.string_agg", "package_name": "fivetran_utils", "root_path": "/Users/renee.li/Documents/dbt/tiktok/develop/dbt_packages/fivetran_utils", "path": "macros/string_agg.sql", "original_file_path": "macros/string_agg.sql", "name": "string_agg", "macro_sql": "{% macro string_agg(field_to_agg, delimiter) -%}\n\n{{ adapter.dispatch('string_agg', 'fivetran_utils') (field_to_agg, delimiter) }}\n\n{%- endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.fivetran_utils.snowflake__string_agg"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1641494962.116527}, "macro.fivetran_utils.default__string_agg": {"unique_id": "macro.fivetran_utils.default__string_agg", "package_name": "fivetran_utils", "root_path": "/Users/renee.li/Documents/dbt/tiktok/develop/dbt_packages/fivetran_utils", "path": "macros/string_agg.sql", "original_file_path": "macros/string_agg.sql", "name": "default__string_agg", "macro_sql": "{% macro default__string_agg(field_to_agg, delimiter) %}\n string_agg({{ field_to_agg }}, {{ delimiter }})\n\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1641494962.116826}, "macro.fivetran_utils.snowflake__string_agg": {"unique_id": "macro.fivetran_utils.snowflake__string_agg", "package_name": "fivetran_utils", "root_path": "/Users/renee.li/Documents/dbt/tiktok/develop/dbt_packages/fivetran_utils", "path": "macros/string_agg.sql", "original_file_path": "macros/string_agg.sql", "name": "snowflake__string_agg", "macro_sql": "{% macro snowflake__string_agg(field_to_agg, delimiter) %}\n listagg({{ field_to_agg }}, {{ delimiter }})\n\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1641494962.117122}, "macro.fivetran_utils.redshift__string_agg": {"unique_id": "macro.fivetran_utils.redshift__string_agg", "package_name": "fivetran_utils", "root_path": "/Users/renee.li/Documents/dbt/tiktok/develop/dbt_packages/fivetran_utils", "path": "macros/string_agg.sql", "original_file_path": "macros/string_agg.sql", "name": "redshift__string_agg", "macro_sql": "{% macro redshift__string_agg(field_to_agg, delimiter) %}\n listagg({{ field_to_agg }}, {{ delimiter }})\n\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1641494962.117414}, "macro.fivetran_utils.spark__string_agg": {"unique_id": "macro.fivetran_utils.spark__string_agg", "package_name": "fivetran_utils", "root_path": "/Users/renee.li/Documents/dbt/tiktok/develop/dbt_packages/fivetran_utils", "path": "macros/string_agg.sql", "original_file_path": "macros/string_agg.sql", "name": "spark__string_agg", "macro_sql": "{% macro spark__string_agg(field_to_agg, delimiter) %}\n -- collect set will remove duplicates\n replace(replace(replace(cast( collect_set({{ field_to_agg }}) as string), '[', ''), ']', ''), ', ', {{ delimiter }} )\n\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1641494962.117711}, "macro.fivetran_utils.timestamp_diff": {"unique_id": "macro.fivetran_utils.timestamp_diff", "package_name": "fivetran_utils", "root_path": "/Users/renee.li/Documents/dbt/tiktok/develop/dbt_packages/fivetran_utils", "path": "macros/timestamp_diff.sql", "original_file_path": "macros/timestamp_diff.sql", "name": "timestamp_diff", "macro_sql": "{% macro timestamp_diff(first_date, second_date, datepart) %}\n {{ adapter.dispatch('timestamp_diff', 'fivetran_utils')(first_date, second_date, datepart) }}\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.fivetran_utils.default__timestamp_diff"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1641494962.1221561}, "macro.fivetran_utils.default__timestamp_diff": {"unique_id": "macro.fivetran_utils.default__timestamp_diff", "package_name": "fivetran_utils", "root_path": "/Users/renee.li/Documents/dbt/tiktok/develop/dbt_packages/fivetran_utils", "path": "macros/timestamp_diff.sql", "original_file_path": "macros/timestamp_diff.sql", "name": "default__timestamp_diff", "macro_sql": "{% macro default__timestamp_diff(first_date, second_date, datepart) %}\n\n datediff(\n {{ datepart }},\n {{ first_date }},\n {{ second_date }}\n )\n\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1641494962.122527}, "macro.fivetran_utils.redshift__timestamp_diff": {"unique_id": "macro.fivetran_utils.redshift__timestamp_diff", "package_name": "fivetran_utils", "root_path": "/Users/renee.li/Documents/dbt/tiktok/develop/dbt_packages/fivetran_utils", "path": "macros/timestamp_diff.sql", "original_file_path": "macros/timestamp_diff.sql", "name": "redshift__timestamp_diff", "macro_sql": "{% macro redshift__timestamp_diff(first_date, second_date, datepart) %}\n\n datediff(\n {{ datepart }},\n {{ first_date }},\n {{ second_date }}\n )\n\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1641494962.12289}, "macro.fivetran_utils.bigquery__timestamp_diff": {"unique_id": "macro.fivetran_utils.bigquery__timestamp_diff", "package_name": "fivetran_utils", "root_path": "/Users/renee.li/Documents/dbt/tiktok/develop/dbt_packages/fivetran_utils", "path": "macros/timestamp_diff.sql", "original_file_path": "macros/timestamp_diff.sql", "name": "bigquery__timestamp_diff", "macro_sql": "{% macro bigquery__timestamp_diff(first_date, second_date, datepart) %}\n\n timestamp_diff(\n {{second_date}},\n {{first_date}},\n {{datepart}}\n )\n\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1641494962.123245}, "macro.fivetran_utils.postgres__timestamp_diff": {"unique_id": "macro.fivetran_utils.postgres__timestamp_diff", "package_name": "fivetran_utils", "root_path": "/Users/renee.li/Documents/dbt/tiktok/develop/dbt_packages/fivetran_utils", "path": "macros/timestamp_diff.sql", "original_file_path": "macros/timestamp_diff.sql", "name": "postgres__timestamp_diff", "macro_sql": "{% macro postgres__timestamp_diff(first_date, second_date, datepart) %}\n\n {% if datepart == 'year' %}\n (date_part('year', ({{second_date}})::date) - date_part('year', ({{first_date}})::date))\n {% elif datepart == 'quarter' %}\n ({{ dbt_utils.datediff(first_date, second_date, 'year') }} * 4 + date_part('quarter', ({{second_date}})::date) - date_part('quarter', ({{first_date}})::date))\n {% elif datepart == 'month' %}\n ({{ dbt_utils.datediff(first_date, second_date, 'year') }} * 12 + date_part('month', ({{second_date}})::date) - date_part('month', ({{first_date}})::date))\n {% elif datepart == 'day' %}\n (({{second_date}})::date - ({{first_date}})::date)\n {% elif datepart == 'week' %}\n ({{ dbt_utils.datediff(first_date, second_date, 'day') }} / 7 + case\n when date_part('dow', ({{first_date}})::timestamp) <= date_part('dow', ({{second_date}})::timestamp) then\n case when {{first_date}} <= {{second_date}} then 0 else -1 end\n else\n case when {{first_date}} <= {{second_date}} then 1 else 0 end\n end)\n {% elif datepart == 'hour' %}\n ({{ dbt_utils.datediff(first_date, second_date, 'day') }} * 24 + date_part('hour', ({{second_date}})::timestamp) - date_part('hour', ({{first_date}})::timestamp))\n {% elif datepart == 'minute' %}\n ({{ dbt_utils.datediff(first_date, second_date, 'hour') }} * 60 + date_part('minute', ({{second_date}})::timestamp) - date_part('minute', ({{first_date}})::timestamp))\n {% elif datepart == 'second' %}\n ({{ dbt_utils.datediff(first_date, second_date, 'minute') }} * 60 + floor(date_part('second', ({{second_date}})::timestamp)) - floor(date_part('second', ({{first_date}})::timestamp)))\n {% elif datepart == 'millisecond' %}\n ({{ dbt_utils.datediff(first_date, second_date, 'minute') }} * 60000 + floor(date_part('millisecond', ({{second_date}})::timestamp)) - floor(date_part('millisecond', ({{first_date}})::timestamp)))\n {% elif datepart == 'microsecond' %}\n ({{ dbt_utils.datediff(first_date, second_date, 'minute') }} * 60000000 + floor(date_part('microsecond', ({{second_date}})::timestamp)) - floor(date_part('microsecond', ({{first_date}})::timestamp)))\n {% else %}\n {{ exceptions.raise_compiler_error(\"Unsupported datepart for macro datediff in postgres: {!r}\".format(datepart)) }}\n {% endif %}\n\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.dbt_utils.datediff"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1641494962.1271281}, "macro.fivetran_utils.generate_columns_macro": {"unique_id": "macro.fivetran_utils.generate_columns_macro", "package_name": "fivetran_utils", "root_path": "/Users/renee.li/Documents/dbt/tiktok/develop/dbt_packages/fivetran_utils", "path": "macros/generate_columns_macro.sql", "original_file_path": "macros/generate_columns_macro.sql", "name": "generate_columns_macro", "macro_sql": "{% macro generate_columns_macro(table_name, schema_name, database_name=target.database) %}\n\n{% set columns = get_columns_for_macro(table_name, schema_name, database_name) %}\n\n{% set jinja_macro=[] %}\n\n{% do jinja_macro.append('{% macro get_' ~ table_name ~ '_columns() %}') %}\n{% do jinja_macro.append('') %}\n{% do jinja_macro.append('{% set columns = [') %}\n\n{% for col in columns %}\n{% do jinja_macro.append(' ' ~ col ~ (',' if not loop.last)) %}\n{% endfor %}\n\n{% do jinja_macro.append('] %}') %}\n{% do jinja_macro.append('') %}\n{% do jinja_macro.append('{{ return(columns) }}') %}\n{% do jinja_macro.append('') %}\n{% do jinja_macro.append('{% endmacro %}') %}\n\n{% if execute %}\n\n {% set joined = jinja_macro | join ('\\n') %}\n {{ log(joined, info=True) }}\n {% do return(joined) %}\n\n{% endif %}\n\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.fivetran_utils.get_columns_for_macro"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1641494962.1301708}, "macro.fivetran_utils.source_relation": {"unique_id": "macro.fivetran_utils.source_relation", "package_name": "fivetran_utils", "root_path": "/Users/renee.li/Documents/dbt/tiktok/develop/dbt_packages/fivetran_utils", "path": "macros/source_relation.sql", "original_file_path": "macros/source_relation.sql", "name": "source_relation", "macro_sql": "{% macro source_relation(union_schema_variable='union_schemas', union_database_variable='union_databases') -%}\n\n{{ adapter.dispatch('source_relation', 'fivetran_utils') (union_schema_variable, union_database_variable) }}\n\n{%- endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.fivetran_utils.default__source_relation"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1641494962.131196}, "macro.fivetran_utils.default__source_relation": {"unique_id": "macro.fivetran_utils.default__source_relation", "package_name": "fivetran_utils", "root_path": "/Users/renee.li/Documents/dbt/tiktok/develop/dbt_packages/fivetran_utils", "path": "macros/source_relation.sql", "original_file_path": "macros/source_relation.sql", "name": "default__source_relation", "macro_sql": "{% macro default__source_relation(union_schema_variable, union_database_variable) %}\n\n{% if var(union_schema_variable, none) %}\n, case\n {% for schema in var(union_schema_variable) %}\n when lower(replace(replace(_dbt_source_relation,'\"',''),'`','')) like '%.{{ schema|lower }}.%' then '{{ schema|lower }}'\n {% endfor %}\n end as source_relation\n{% elif var(union_database_variable, none) %}\n, case\n {% for database in var(union_database_variable) %}\n when lower(replace(replace(_dbt_source_relation,'\"',''),'`','')) like '%{{ database|lower }}.%' then '{{ database|lower }}'\n {% endfor %}\n end as source_relation\n{% else %}\n, cast('' as {{ dbt_utils.type_string() }}) as source_relation\n{% endif %}\n\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.dbt_utils.type_string"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1641494962.13253}, "macro.fivetran_utils.first_value": {"unique_id": "macro.fivetran_utils.first_value", "package_name": "fivetran_utils", "root_path": "/Users/renee.li/Documents/dbt/tiktok/develop/dbt_packages/fivetran_utils", "path": "macros/first_value.sql", "original_file_path": "macros/first_value.sql", "name": "first_value", "macro_sql": "{% macro first_value(first_value_field, partition_field, order_by_field, order=\"asc\") -%}\n\n{{ adapter.dispatch('first_value', 'fivetran_utils') (first_value_field, partition_field, order_by_field, order) }}\n\n{%- endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.fivetran_utils.default__first_value"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1641494962.1335738}, "macro.fivetran_utils.default__first_value": {"unique_id": "macro.fivetran_utils.default__first_value", "package_name": "fivetran_utils", "root_path": "/Users/renee.li/Documents/dbt/tiktok/develop/dbt_packages/fivetran_utils", "path": "macros/first_value.sql", "original_file_path": "macros/first_value.sql", "name": "default__first_value", "macro_sql": "{% macro default__first_value(first_value_field, partition_field, order_by_field, order=\"asc\") %}\n\n first_value( {{ first_value_field }} ignore nulls ) over (partition by {{ partition_field }} order by {{ order_by_field }} {{ order }} )\n\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1641494962.1340318}, "macro.fivetran_utils.redshift__first_value": {"unique_id": "macro.fivetran_utils.redshift__first_value", "package_name": "fivetran_utils", "root_path": "/Users/renee.li/Documents/dbt/tiktok/develop/dbt_packages/fivetran_utils", "path": "macros/first_value.sql", "original_file_path": "macros/first_value.sql", "name": "redshift__first_value", "macro_sql": "{% macro redshift__first_value(first_value_field, partition_field, order_by_field, order=\"asc\") %}\n\n first_value( {{ first_value_field }} ignore nulls ) over (partition by {{ partition_field }} order by {{ order_by_field }} {{ order }} , {{ partition_field }} rows unbounded preceding )\n\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1641494962.134531}, "macro.fivetran_utils.add_dbt_source_relation": {"unique_id": "macro.fivetran_utils.add_dbt_source_relation", "package_name": "fivetran_utils", "root_path": "/Users/renee.li/Documents/dbt/tiktok/develop/dbt_packages/fivetran_utils", "path": "macros/add_dbt_source_relation.sql", "original_file_path": "macros/add_dbt_source_relation.sql", "name": "add_dbt_source_relation", "macro_sql": "{% macro add_dbt_source_relation() %}\n\n{% if var('union_schemas', none) or var('union_databases', none) %}\n, _dbt_source_relation\n{% endif %}\n\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1641494962.135206}, "macro.fivetran_utils.add_pass_through_columns": {"unique_id": "macro.fivetran_utils.add_pass_through_columns", "package_name": "fivetran_utils", "root_path": "/Users/renee.li/Documents/dbt/tiktok/develop/dbt_packages/fivetran_utils", "path": "macros/add_pass_through_columns.sql", "original_file_path": "macros/add_pass_through_columns.sql", "name": "add_pass_through_columns", "macro_sql": "{% macro add_pass_through_columns(base_columns, pass_through_var) %}\n\n {% if pass_through_var %}\n\n {% for column in pass_through_var %}\n\n {% if column.alias %}\n\n {% do base_columns.append({ \"name\": column.name, \"alias\": column.alias, \"datatype\": column.datatype if column.datatype else dbt_utils.type_string()}) %}\n\n {% else %}\n\n {% do base_columns.append({ \"name\": column.name, \"datatype\": column.datatype if column.datatype else dbt_utils.type_string()}) %}\n \n {% endif %}\n\n {% endfor %}\n\n {% endif %}\n\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.dbt_utils.type_string"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1641494962.137032}, "macro.fivetran_utils.staging_models_automation": {"unique_id": "macro.fivetran_utils.staging_models_automation", "package_name": "fivetran_utils", "root_path": "/Users/renee.li/Documents/dbt/tiktok/develop/dbt_packages/fivetran_utils", "path": "macros/staging_models_automation.sql", "original_file_path": "macros/staging_models_automation.sql", "name": "staging_models_automation", "macro_sql": "{% macro staging_models_automation(package, source_schema, source_database, tables) %}\n\n{% set package = \"\"~ package ~\"\" %}\n{% set source_schema = \"\"~ source_schema ~\"\" %}\n{% set source_database = \"\"~ source_database ~\"\" %}\n\n{% set zsh_command = \"source dbt_modules/fivetran_utils/columns_setup.sh '../dbt_\"\"\"~ package ~\"\"\"_source' stg_\"\"\"~ package ~\"\"\" \"\"\"~ source_database ~\"\"\" \"\"\"~ source_schema ~\"\"\" \" %}\n\n{% for t in tables %}\n {% if t != tables[-1] %}\n {% set help_command = zsh_command + t + \" && \\n\" %}\n\n {% else %}\n {% set help_command = zsh_command + t %}\n\n {% endif %}\n {{ log(help_command, info=True) }}\n\n{% endfor %}\n\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1641494962.139221}, "macro.fivetran_utils.union_relations": {"unique_id": "macro.fivetran_utils.union_relations", "package_name": "fivetran_utils", "root_path": "/Users/renee.li/Documents/dbt/tiktok/develop/dbt_packages/fivetran_utils", "path": "macros/union_relations.sql", "original_file_path": "macros/union_relations.sql", "name": "union_relations", "macro_sql": "{%- macro union_relations(relations, aliases=none, column_override=none, include=[], exclude=[], source_column_name=none) -%}\n\n {%- if exclude and include -%}\n {{ exceptions.raise_compiler_error(\"Both an exclude and include list were provided to the `union` macro. Only one is allowed\") }}\n {%- endif -%}\n\n {#-- Prevent querying of db in parsing mode. This works because this macro does not create any new refs. -#}\n {%- if not execute %}\n {{ return('') }}\n {% endif -%}\n\n {%- set column_override = column_override if column_override is not none else {} -%}\n {%- set source_column_name = source_column_name if source_column_name is not none else '_dbt_source_relation' -%}\n\n {%- set relation_columns = {} -%}\n {%- set column_superset = {} -%}\n\n {%- for relation in relations -%}\n\n {%- do relation_columns.update({relation: []}) -%}\n\n {%- do dbt_utils._is_relation(relation, 'union_relations') -%}\n {%- set cols = adapter.get_columns_in_relation(relation) -%}\n {%- for col in cols -%}\n\n {#- If an exclude list was provided and the column is in the list, do nothing -#}\n {%- if exclude and col.column in exclude -%}\n\n {#- If an include list was provided and the column is not in the list, do nothing -#}\n {%- elif include and col.column not in include -%}\n\n {#- Otherwise add the column to the column superset -#}\n {%- else -%}\n\n {#- update the list of columns in this relation -#}\n {%- do relation_columns[relation].append(col.column) -%}\n\n {%- if col.column in column_superset -%}\n\n {%- set stored = column_superset[col.column] -%}\n {%- if col.is_string() and stored.is_string() and col.string_size() > stored.string_size() -%}\n\n {%- do column_superset.update({col.column: col}) -%}\n\n {%- endif %}\n\n {%- else -%}\n\n {%- do column_superset.update({col.column: col}) -%}\n\n {%- endif -%}\n\n {%- endif -%}\n\n {%- endfor -%}\n {%- endfor -%}\n\n {%- set ordered_column_names = column_superset.keys() -%}\n\n {%- for relation in relations %}\n\n (\n select\n\n cast({{ dbt_utils.string_literal(relation) }} as {{ dbt_utils.type_string() }}) as {{ source_column_name }},\n {% for col_name in ordered_column_names -%}\n\n {%- set col = column_superset[col_name] %}\n {%- set col_type = column_override.get(col.column, col.data_type) %}\n {%- set col_name = adapter.quote(col_name) if col_name in relation_columns[relation] else 'null' %}\n cast({{ col_name }} as {{ col_type }}) as {{ col.quoted }} {% if not loop.last %},{% endif -%}\n\n {%- endfor %}\n\n from {{ aliases[loop.index0] if aliases else relation }}\n )\n\n {% if not loop.last -%}\n union all\n {% endif -%}\n\n {%- endfor -%}\n\n{%- endmacro -%}\n\n", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.dbt_utils._is_relation", "macro.dbt_utils.string_literal", "macro.dbt_utils.type_string"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1641494962.1468291}, "macro.fivetran_utils.union_tables": {"unique_id": "macro.fivetran_utils.union_tables", "package_name": "fivetran_utils", "root_path": "/Users/renee.li/Documents/dbt/tiktok/develop/dbt_packages/fivetran_utils", "path": "macros/union_relations.sql", "original_file_path": "macros/union_relations.sql", "name": "union_tables", "macro_sql": "{%- macro union_tables(tables, column_override=none, include=[], exclude=[], source_column_name='_dbt_source_table') -%}\n\n {%- do exceptions.warn(\"Warning: the `union_tables` macro is no longer supported and will be deprecated in a future release of dbt-utils. Use the `union_relations` macro instead\") -%}\n\n {{ return(dbt_utils.union_relations(tables, column_override, include, exclude, source_column_name)) }}\n\n{%- endmacro -%}", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.dbt_utils.union_relations"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1641494962.14763}, "macro.fivetran_utils.snowflake_seed_data": {"unique_id": "macro.fivetran_utils.snowflake_seed_data", "package_name": "fivetran_utils", "root_path": "/Users/renee.li/Documents/dbt/tiktok/develop/dbt_packages/fivetran_utils", "path": "macros/snowflake_seed_data.sql", "original_file_path": "macros/snowflake_seed_data.sql", "name": "snowflake_seed_data", "macro_sql": "{% macro snowflake_seed_data(seed_name) %}\n\n{% if target.type == 'snowflake' %}\n{{ return(ref(seed_name ~ '_snowflake')) }}\n{% else %}\n{{ return(ref(seed_name)) }}\n{% endif %}\n\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1641494962.1485682}, "macro.fivetran_utils.default__get_columns_for_macro": {"unique_id": "macro.fivetran_utils.default__get_columns_for_macro", "package_name": "fivetran_utils", "root_path": "/Users/renee.li/Documents/dbt/tiktok/develop/dbt_packages/fivetran_utils", "path": "macros/get_columns_for_macro.sql", "original_file_path": "macros/get_columns_for_macro.sql", "name": "default__get_columns_for_macro", "macro_sql": "{% macro default__get_columns_for_macro(table_name, schema_name, database_name=target.database) %}\n\n{% set query %}\n\nselect\n concat(\n '{\"name\": \"', \n lower(column_name), \n '\", \"datatype\": ',\n case\n when lower(data_type) like '%timestamp%' then 'dbt_utils.type_timestamp()' \n when lower(data_type) = 'text' then 'dbt_utils.type_string()' \n when lower(data_type) = 'boolean' then '\"boolean\"'\n when lower(data_type) = 'number' then 'dbt_utils.type_numeric()' \n when lower(data_type) = 'float' then 'dbt_utils.type_float()' \n when lower(data_type) = 'date' then '\"date\"'\n end,\n '}')\nfrom {{ database_name }}.information_schema.columns\nwhere lower(table_name) = '{{ table_name }}'\nand lower(table_schema) = '{{ schema_name }}'\norder by 1\n\n{% endset %}\n\n{% set results = run_query(query) %}\n{% set results_list = results.columns[0].values() %}}\n\n{{ return(results_list) }}\n\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.dbt.run_query"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1641494962.150644}, "macro.fivetran_utils.bigquery__get_columns_for_macro": {"unique_id": "macro.fivetran_utils.bigquery__get_columns_for_macro", "package_name": "fivetran_utils", "root_path": "/Users/renee.li/Documents/dbt/tiktok/develop/dbt_packages/fivetran_utils", "path": "macros/get_columns_for_macro.sql", "original_file_path": "macros/get_columns_for_macro.sql", "name": "bigquery__get_columns_for_macro", "macro_sql": "{% macro bigquery__get_columns_for_macro(table_name, schema_name, database_name=target.database) %}\n\n{% set query %}\n\nselect\n concat(\n '{\"name\": \"', \n lower(column_name), \n '\", \"datatype\": ',\n case\n when lower(data_type) like '%timestamp%' then 'dbt_utils.type_timestamp()' \n when lower(data_type) = 'string' then 'dbt_utils.type_string()' \n when lower(data_type) = 'bool' then '\"boolean\"'\n when lower(data_type) = 'numeric' then 'dbt_utils.type_numeric()' \n when lower(data_type) = 'float64' then 'dbt_utils.type_float()' \n when lower(data_type) = 'int64' then 'dbt_utils.type_int()' \n when lower(data_type) = 'date' then '\"date\"' \n when lower(data_type) = 'datetime' then '\"datetime\"' \n end,\n '}')\nfrom `{{ database_name }}`.{{ schema_name }}.INFORMATION_SCHEMA.COLUMNS\nwhere lower(table_name) = '{{ table_name }}'\nand lower(table_schema) = '{{ schema_name }}'\norder by 1\n\n{% endset %}\n\n{% set results = run_query(query) %}\n{% set results_list = results.columns[0].values() %}}\n\n{{ return(results_list) }}\n\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.dbt.run_query"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1641494962.151662}, "macro.fivetran_utils.get_columns_for_macro": {"unique_id": "macro.fivetran_utils.get_columns_for_macro", "package_name": "fivetran_utils", "root_path": "/Users/renee.li/Documents/dbt/tiktok/develop/dbt_packages/fivetran_utils", "path": "macros/get_columns_for_macro.sql", "original_file_path": "macros/get_columns_for_macro.sql", "name": "get_columns_for_macro", "macro_sql": "{% macro get_columns_for_macro(table_name, schema_name, database_name) -%}\n {{ return(adapter.dispatch('get_columns_for_macro')(table_name, schema_name, database_name)) }}\n{%- endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.fivetran_utils.default__get_columns_for_macro"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1641494962.152138}, "macro.fivetran_utils.fill_staging_columns": {"unique_id": "macro.fivetran_utils.fill_staging_columns", "package_name": "fivetran_utils", "root_path": "/Users/renee.li/Documents/dbt/tiktok/develop/dbt_packages/fivetran_utils", "path": "macros/fill_staging_columns.sql", "original_file_path": "macros/fill_staging_columns.sql", "name": "fill_staging_columns", "macro_sql": "{% macro fill_staging_columns(source_columns, staging_columns) -%}\n\n{%- set source_column_names = source_columns|map(attribute='name')|map('lower')|list -%}\n\n{%- for column in staging_columns %}\n {% if column.name|lower in source_column_names -%}\n {{ fivetran_utils.quote_column(column) }} as \n {%- if 'alias' in column %} {{ column.alias }} {% else %} {{ fivetran_utils.quote_column(column) }} {%- endif -%}\n {%- else -%}\n cast(null as {{ column.datatype }})\n {%- if 'alias' in column %} as {{ column.alias }} {% else %} as {{ fivetran_utils.quote_column(column) }} {% endif -%}\n {%- endif -%}\n {%- if not loop.last -%} , {% endif -%}\n{% endfor %}\n\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.fivetran_utils.quote_column"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1641494962.1551108}, "macro.fivetran_utils.quote_column": {"unique_id": "macro.fivetran_utils.quote_column", "package_name": "fivetran_utils", "root_path": "/Users/renee.li/Documents/dbt/tiktok/develop/dbt_packages/fivetran_utils", "path": "macros/fill_staging_columns.sql", "original_file_path": "macros/fill_staging_columns.sql", "name": "quote_column", "macro_sql": "{% macro quote_column(column) %}\n {% if 'quote' in column %}\n {% if column.quote %}\n {% if target.type in ('bigquery', 'spark') %}\n `{{ column.name }}`\n {% elif target.type == 'snowflake' %}\n \"{{ column.name | upper }}\"\n {% else %}\n \"{{ column.name }}\"\n {% endif %}\n {% else %}\n {{ column.name }}\n {% endif %}\n {% else %}\n {{ column.name }}\n {% endif %}\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1641494962.156325}, "macro.fivetran_utils.json_extract": {"unique_id": "macro.fivetran_utils.json_extract", "package_name": "fivetran_utils", "root_path": "/Users/renee.li/Documents/dbt/tiktok/develop/dbt_packages/fivetran_utils", "path": "macros/json_extract.sql", "original_file_path": "macros/json_extract.sql", "name": "json_extract", "macro_sql": "{% macro json_extract(string, string_path) -%}\n\n{{ adapter.dispatch('json_extract', 'fivetran_utils') (string, string_path) }}\n\n{%- endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.fivetran_utils.snowflake__json_extract"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1641494962.157465}, "macro.fivetran_utils.default__json_extract": {"unique_id": "macro.fivetran_utils.default__json_extract", "package_name": "fivetran_utils", "root_path": "/Users/renee.li/Documents/dbt/tiktok/develop/dbt_packages/fivetran_utils", "path": "macros/json_extract.sql", "original_file_path": "macros/json_extract.sql", "name": "default__json_extract", "macro_sql": "{% macro default__json_extract(string, string_path) %}\n\n json_extract_path_text({{string}}, {{ \"'\" ~ string_path ~ \"'\" }} )\n \n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1641494962.1578119}, "macro.fivetran_utils.snowflake__json_extract": {"unique_id": "macro.fivetran_utils.snowflake__json_extract", "package_name": "fivetran_utils", "root_path": "/Users/renee.li/Documents/dbt/tiktok/develop/dbt_packages/fivetran_utils", "path": "macros/json_extract.sql", "original_file_path": "macros/json_extract.sql", "name": "snowflake__json_extract", "macro_sql": "{% macro snowflake__json_extract(string, string_path) %}\n\n json_extract_path_text(try_parse_json( {{string}} ), {{ \"'\" ~ string_path ~ \"'\" }} )\n\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1641494962.15816}, "macro.fivetran_utils.redshift__json_extract": {"unique_id": "macro.fivetran_utils.redshift__json_extract", "package_name": "fivetran_utils", "root_path": "/Users/renee.li/Documents/dbt/tiktok/develop/dbt_packages/fivetran_utils", "path": "macros/json_extract.sql", "original_file_path": "macros/json_extract.sql", "name": "redshift__json_extract", "macro_sql": "{% macro redshift__json_extract(string, string_path) %}\n\n case when is_valid_json( {{string}} ) then json_extract_path_text({{string}}, {{ \"'\" ~ string_path ~ \"'\" }} ) else null end\n \n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1641494962.158541}, "macro.fivetran_utils.bigquery__json_extract": {"unique_id": "macro.fivetran_utils.bigquery__json_extract", "package_name": "fivetran_utils", "root_path": "/Users/renee.li/Documents/dbt/tiktok/develop/dbt_packages/fivetran_utils", "path": "macros/json_extract.sql", "original_file_path": "macros/json_extract.sql", "name": "bigquery__json_extract", "macro_sql": "{% macro bigquery__json_extract(string, string_path) %}\n\n json_extract_scalar({{string}}, {{ \"'$.\" ~ string_path ~ \"'\" }} )\n\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1641494962.15888}, "macro.fivetran_utils.postgres__json_extract": {"unique_id": "macro.fivetran_utils.postgres__json_extract", "package_name": "fivetran_utils", "root_path": "/Users/renee.li/Documents/dbt/tiktok/develop/dbt_packages/fivetran_utils", "path": "macros/json_extract.sql", "original_file_path": "macros/json_extract.sql", "name": "postgres__json_extract", "macro_sql": "{% macro postgres__json_extract(string, string_path) %}\n\n {{string}}::json->>{{\"'\" ~ string_path ~ \"'\" }}\n\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1641494962.1592152}, "macro.fivetran_utils.collect_freshness": {"unique_id": "macro.fivetran_utils.collect_freshness", "package_name": "fivetran_utils", "root_path": "/Users/renee.li/Documents/dbt/tiktok/develop/dbt_packages/fivetran_utils", "path": "macros/collect_freshness.sql", "original_file_path": "macros/collect_freshness.sql", "name": "collect_freshness", "macro_sql": "{% macro collect_freshness(source, loaded_at_field, filter) %}\n {{ return(adapter.dispatch('collect_freshness')(source, loaded_at_field, filter))}}\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.fivetran_utils.default__collect_freshness"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1641494962.160537}, "macro.fivetran_utils.default__collect_freshness": {"unique_id": "macro.fivetran_utils.default__collect_freshness", "package_name": "fivetran_utils", "root_path": "/Users/renee.li/Documents/dbt/tiktok/develop/dbt_packages/fivetran_utils", "path": "macros/collect_freshness.sql", "original_file_path": "macros/collect_freshness.sql", "name": "default__collect_freshness", "macro_sql": "{% macro default__collect_freshness(source, loaded_at_field, filter) %}\n {% call statement('collect_freshness', fetch_result=True, auto_begin=False) -%}\n\n {%- set enabled_array = [] -%}\n {% for node in graph.sources.values() %}\n {% if node.name == source.name %}\n {% if (node.meta['is_enabled'] | default(true)) %}\n {%- do enabled_array.append(1) -%}\n {% endif %}\n {% endif %}\n {% endfor %}\n {% set is_enabled = (enabled_array != []) %}\n\n select\n {% if is_enabled %}\n max({{ loaded_at_field }})\n {% else %} \n {{ current_timestamp() }} {% endif %} as max_loaded_at,\n {{ current_timestamp() }} as snapshotted_at\n\n {% if is_enabled %}\n from {{ source }}\n {% if filter %}\n where {{ filter }}\n {% endif %}\n {% endif %}\n\n {% endcall %}\n {{ return(load_result('collect_freshness').table) }}\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.dbt.statement", "macro.dbt_utils.current_timestamp"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1641494962.162872}, "macro.fivetran_utils.timestamp_add": {"unique_id": "macro.fivetran_utils.timestamp_add", "package_name": "fivetran_utils", "root_path": "/Users/renee.li/Documents/dbt/tiktok/develop/dbt_packages/fivetran_utils", "path": "macros/timestamp_add.sql", "original_file_path": "macros/timestamp_add.sql", "name": "timestamp_add", "macro_sql": "{% macro timestamp_add(datepart, interval, from_timestamp) -%}\n\n{{ adapter.dispatch('timestamp_add', 'fivetran_utils') (datepart, interval, from_timestamp) }}\n\n{%- endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.fivetran_utils.default__timestamp_add"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1641494962.164175}, "macro.fivetran_utils.default__timestamp_add": {"unique_id": "macro.fivetran_utils.default__timestamp_add", "package_name": "fivetran_utils", "root_path": "/Users/renee.li/Documents/dbt/tiktok/develop/dbt_packages/fivetran_utils", "path": "macros/timestamp_add.sql", "original_file_path": "macros/timestamp_add.sql", "name": "default__timestamp_add", "macro_sql": "{% macro default__timestamp_add(datepart, interval, from_timestamp) %}\n\n timestampadd(\n {{ datepart }},\n {{ interval }},\n {{ from_timestamp }}\n )\n\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1641494962.164543}, "macro.fivetran_utils.bigquery__timestamp_add": {"unique_id": "macro.fivetran_utils.bigquery__timestamp_add", "package_name": "fivetran_utils", "root_path": "/Users/renee.li/Documents/dbt/tiktok/develop/dbt_packages/fivetran_utils", "path": "macros/timestamp_add.sql", "original_file_path": "macros/timestamp_add.sql", "name": "bigquery__timestamp_add", "macro_sql": "{% macro bigquery__timestamp_add(datepart, interval, from_timestamp) %}\n\n timestamp_add({{ from_timestamp }}, interval {{ interval }} {{ datepart }})\n\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1641494962.164901}, "macro.fivetran_utils.redshift__timestamp_add": {"unique_id": "macro.fivetran_utils.redshift__timestamp_add", "package_name": "fivetran_utils", "root_path": "/Users/renee.li/Documents/dbt/tiktok/develop/dbt_packages/fivetran_utils", "path": "macros/timestamp_add.sql", "original_file_path": "macros/timestamp_add.sql", "name": "redshift__timestamp_add", "macro_sql": "{% macro redshift__timestamp_add(datepart, interval, from_timestamp) %}\n\n dateadd(\n {{ datepart }},\n {{ interval }},\n {{ from_timestamp }}\n )\n\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1641494962.165267}, "macro.fivetran_utils.postgres__timestamp_add": {"unique_id": "macro.fivetran_utils.postgres__timestamp_add", "package_name": "fivetran_utils", "root_path": "/Users/renee.li/Documents/dbt/tiktok/develop/dbt_packages/fivetran_utils", "path": "macros/timestamp_add.sql", "original_file_path": "macros/timestamp_add.sql", "name": "postgres__timestamp_add", "macro_sql": "{% macro postgres__timestamp_add(datepart, interval, from_timestamp) %}\n\n {{ from_timestamp }} + ((interval '1 {{ datepart }}') * ({{ interval }}))\n\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1641494962.165633}, "macro.fivetran_utils.spark__timestamp_add": {"unique_id": "macro.fivetran_utils.spark__timestamp_add", "package_name": "fivetran_utils", "root_path": "/Users/renee.li/Documents/dbt/tiktok/develop/dbt_packages/fivetran_utils", "path": "macros/timestamp_add.sql", "original_file_path": "macros/timestamp_add.sql", "name": "spark__timestamp_add", "macro_sql": "{% macro spark__timestamp_add(datepart, interval, from_timestamp) %}\n\n {{ dbt_utils.dateadd(datepart, interval, from_timestamp) }}\n \n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.dbt_utils.dateadd"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1641494962.166023}, "macro.fivetran_utils.ceiling": {"unique_id": "macro.fivetran_utils.ceiling", "package_name": "fivetran_utils", "root_path": "/Users/renee.li/Documents/dbt/tiktok/develop/dbt_packages/fivetran_utils", "path": "macros/ceiling.sql", "original_file_path": "macros/ceiling.sql", "name": "ceiling", "macro_sql": "{% macro ceiling(num) -%}\n\n{{ adapter.dispatch('ceiling', 'fivetran_utils') (num) }}\n\n{%- endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.fivetran_utils.snowflake__ceiling"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1641494962.166668}, "macro.fivetran_utils.default__ceiling": {"unique_id": "macro.fivetran_utils.default__ceiling", "package_name": "fivetran_utils", "root_path": "/Users/renee.li/Documents/dbt/tiktok/develop/dbt_packages/fivetran_utils", "path": "macros/ceiling.sql", "original_file_path": "macros/ceiling.sql", "name": "default__ceiling", "macro_sql": "{% macro default__ceiling(num) %}\n ceiling({{ num }})\n\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1641494962.1669052}, "macro.fivetran_utils.snowflake__ceiling": {"unique_id": "macro.fivetran_utils.snowflake__ceiling", "package_name": "fivetran_utils", "root_path": "/Users/renee.li/Documents/dbt/tiktok/develop/dbt_packages/fivetran_utils", "path": "macros/ceiling.sql", "original_file_path": "macros/ceiling.sql", "name": "snowflake__ceiling", "macro_sql": "{% macro snowflake__ceiling(num) %}\n ceil({{ num }})\n\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1641494962.167246}, "macro.fivetran_utils.remove_prefix_from_columns": {"unique_id": "macro.fivetran_utils.remove_prefix_from_columns", "package_name": "fivetran_utils", "root_path": "/Users/renee.li/Documents/dbt/tiktok/develop/dbt_packages/fivetran_utils", "path": "macros/remove_prefix_from_columns.sql", "original_file_path": "macros/remove_prefix_from_columns.sql", "name": "remove_prefix_from_columns", "macro_sql": "{% macro remove_prefix_from_columns(columns, prefix='', exclude=[]) %}\n\n {%- for col in columns if col.name not in exclude -%}\n {%- if col.name[:prefix|length]|lower == prefix -%}\n {{ col.name }} as {{ col.name[prefix|length:] }}\n {%- else -%}\n {{ col.name }}\n {%- endif -%}\n {%- if not loop.last -%},{%- endif %}\n {% endfor -%}\n\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1641494962.168669}, "macro.fivetran_utils.union_data": {"unique_id": "macro.fivetran_utils.union_data", "package_name": "fivetran_utils", "root_path": "/Users/renee.li/Documents/dbt/tiktok/develop/dbt_packages/fivetran_utils", "path": "macros/union_data.sql", "original_file_path": "macros/union_data.sql", "name": "union_data", "macro_sql": "{% macro union_data(table_identifier, database_variable, schema_variable, default_database, default_schema, default_variable, union_schema_variable='union_schemas', union_database_variable='union_databases') -%}\n\n{{ adapter.dispatch('union_data', 'fivetran_utils') (\n table_identifier, \n database_variable, \n schema_variable, \n default_database, \n default_schema, \n default_variable,\n union_schema_variable,\n union_database_variable\n ) }}\n\n{%- endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.fivetran_utils.default__union_data"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1641494962.170816}, "macro.fivetran_utils.default__union_data": {"unique_id": "macro.fivetran_utils.default__union_data", "package_name": "fivetran_utils", "root_path": "/Users/renee.li/Documents/dbt/tiktok/develop/dbt_packages/fivetran_utils", "path": "macros/union_data.sql", "original_file_path": "macros/union_data.sql", "name": "default__union_data", "macro_sql": "{% macro default__union_data(\n table_identifier, \n database_variable, \n schema_variable, \n default_database, \n default_schema, \n default_variable,\n union_schema_variable,\n union_database_variable\n ) %}\n\n{% if var(union_schema_variable, none) %}\n\n {% set relations = [] %}\n \n {% if var(union_schema_variable) is string %}\n {% set trimmed = var(union_schema_variable)|trim('[')|trim(']') %}\n {% set schemas = trimmed.split(',')|map('trim',\" \")|map('trim','\"')|map('trim',\"'\") %}\n {% else %}\n {% set schemas = var(union_schema_variable) %}\n {% endif %}\n\n {% for schema in var(union_schema_variable) %}\n\n {% set relation=adapter.get_relation(\n database=var(database_variable, default_database),\n schema=schema,\n identifier=table_identifier\n ) -%}\n \n {% set relation_exists=relation is not none %}\n\n {% if relation_exists %}\n\n {% do relations.append(relation) %}\n \n {% endif %}\n\n {% endfor %}\n\n {{ dbt_utils.union_relations(relations) }}\n\n{% elif var(union_database_variable, none) %}\n\n {% set relations = [] %}\n\n {% for database in var(union_database_variable) %}\n\n {% set relation=adapter.get_relation(\n database=database,\n schema=var(schema_variable, default_schema),\n identifier=table_identifier\n ) -%}\n\n {% set relation_exists=relation is not none %}\n\n {% if relation_exists %}\n\n {% do relations.append(relation) %}\n \n {% endif %}\n\n {% endfor %}\n\n {{ dbt_utils.union_relations(relations) }}\n\n{% else %}\n\n select * \n from {{ var(default_variable) }}\n\n{% endif %}\n\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.dbt_utils.union_relations"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1641494962.174873}, "macro.fivetran_utils.dummy_coalesce_value": {"unique_id": "macro.fivetran_utils.dummy_coalesce_value", "package_name": "fivetran_utils", "root_path": "/Users/renee.li/Documents/dbt/tiktok/develop/dbt_packages/fivetran_utils", "path": "macros/dummy_coalesce_value.sql", "original_file_path": "macros/dummy_coalesce_value.sql", "name": "dummy_coalesce_value", "macro_sql": "{% macro dummy_coalesce_value(column) %}\n\n{% set coalesce_value = {\n 'STRING': \"'DUMMY_STRING'\",\n 'BOOLEAN': 'null',\n 'INT': 999999999,\n 'FLOAT': 999999999.99,\n 'TIMESTAMP': 'cast(\"2099-12-31\" as timestamp)',\n 'DATE': 'cast(\"2099-12-31\" as date)',\n} %}\n\n{% if column.is_float() %}\n{{ return(coalesce_value['FLOAT']) }}\n\n{% elif column.is_numeric() %}\n{{ return(coalesce_value['INT']) }}\n\n{% elif column.is_string() %}\n{{ return(coalesce_value['STRING']) }}\n\n{% elif column.data_type|lower == 'boolean' %}\n{{ return(coalesce_value['BOOLEAN']) }}\n\n{% elif 'timestamp' in column.data_type|lower %}\n{{ return(coalesce_value['TIMESTAMP']) }}\n\n{% elif 'date' in column.data_type|lower %}\n{{ return(coalesce_value['DATE']) }}\n\n{% elif 'int' in column.data_type|lower %}\n{{ return(coalesce_value['INT']) }}\n\n{% endif %}\n\n\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1641494962.1779468}, "macro.fivetran_utils.array_agg": {"unique_id": "macro.fivetran_utils.array_agg", "package_name": "fivetran_utils", "root_path": "/Users/renee.li/Documents/dbt/tiktok/develop/dbt_packages/fivetran_utils", "path": "macros/array_agg.sql", "original_file_path": "macros/array_agg.sql", "name": "array_agg", "macro_sql": "{% macro array_agg(field_to_agg) -%}\n\n{{ adapter.dispatch('array_agg', 'fivetran_utils') (field_to_agg) }}\n\n{%- endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.fivetran_utils.default__array_agg"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1641494962.178614}, "macro.fivetran_utils.default__array_agg": {"unique_id": "macro.fivetran_utils.default__array_agg", "package_name": "fivetran_utils", "root_path": "/Users/renee.li/Documents/dbt/tiktok/develop/dbt_packages/fivetran_utils", "path": "macros/array_agg.sql", "original_file_path": "macros/array_agg.sql", "name": "default__array_agg", "macro_sql": "{% macro default__array_agg(field_to_agg) %}\n array_agg({{ field_to_agg }})\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1641494962.178846}, "macro.fivetran_utils.redshift__array_agg": {"unique_id": "macro.fivetran_utils.redshift__array_agg", "package_name": "fivetran_utils", "root_path": "/Users/renee.li/Documents/dbt/tiktok/develop/dbt_packages/fivetran_utils", "path": "macros/array_agg.sql", "original_file_path": "macros/array_agg.sql", "name": "redshift__array_agg", "macro_sql": "{% macro redshift__array_agg(field_to_agg) %}\n listagg({{ field_to_agg }}, ',')\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1641494962.17908}, "macro.fivetran_utils.empty_variable_warning": {"unique_id": "macro.fivetran_utils.empty_variable_warning", "package_name": "fivetran_utils", "root_path": "/Users/renee.li/Documents/dbt/tiktok/develop/dbt_packages/fivetran_utils", "path": "macros/empty_variable_warning.sql", "original_file_path": "macros/empty_variable_warning.sql", "name": "empty_variable_warning", "macro_sql": "{% macro empty_variable_warning(variable, downstream_model) %}\n\n{% if not var(variable) %}\n{{ log(\n \"\"\"\n Warning: You have passed an empty list to the \"\"\" ~ variable ~ \"\"\".\n As a result, you won't see the history of any columns in the \"\"\" ~ downstream_model ~ \"\"\" model.\n \"\"\",\n info=True\n) }}\n{% endif %}\n\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1641494962.180081}, "macro.fivetran_utils.enabled_vars_one_true": {"unique_id": "macro.fivetran_utils.enabled_vars_one_true", "package_name": "fivetran_utils", "root_path": "/Users/renee.li/Documents/dbt/tiktok/develop/dbt_packages/fivetran_utils", "path": "macros/enabled_vars_one_true.sql", "original_file_path": "macros/enabled_vars_one_true.sql", "name": "enabled_vars_one_true", "macro_sql": "{% macro enabled_vars_one_true(vars) %}\n\n{% for v in vars %}\n \n {% if var(v, False) == True %}\n {{ return(True) }}\n {% endif %}\n\n{% endfor %}\n\n{{ return(False) }}\n\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1641494962.181034}, "macro.tiktok_ads_source.get_ad_group_history_columns": {"unique_id": "macro.tiktok_ads_source.get_ad_group_history_columns", "package_name": "tiktok_ads_source", "root_path": "/Users/renee.li/Documents/dbt/tiktok/develop/dbt_packages/tiktok_ads_source", "path": "macros/get_ad_group_history_columns.sql", "original_file_path": "macros/get_ad_group_history_columns.sql", "name": "get_ad_group_history_columns", "macro_sql": "{% macro get_ad_group_history_columns() %}\n\n{% set columns = [\n {\"name\": \"_fivetran_synced\", \"datatype\": dbt_utils.type_timestamp()},\n {\"name\": \"action_days\", \"datatype\": dbt_utils.type_numeric()},\n {\"name\": \"adgroup_id\", \"datatype\": dbt_utils.type_numeric()},\n {\"name\": \"adgroup_name\", \"datatype\": dbt_utils.type_string()},\n {\"name\": \"advertiser_id\", \"datatype\": dbt_utils.type_numeric()},\n {\"name\": \"android_osv\", \"datatype\": dbt_utils.type_string()},\n {\"name\": \"app_download_url\", \"datatype\": dbt_utils.type_string()},\n {\"name\": \"app_id\", \"datatype\": dbt_utils.type_numeric()},\n {\"name\": \"app_name\", \"datatype\": dbt_utils.type_string()},\n {\"name\": \"app_type\", \"datatype\": dbt_utils.type_string()},\n {\"name\": \"audience_type\", \"datatype\": dbt_utils.type_string()},\n {\"name\": \"bid\", \"datatype\": dbt_utils.type_float()},\n {\"name\": \"bid_type\", \"datatype\": dbt_utils.type_string()},\n {\"name\": \"billing_event\", \"datatype\": dbt_utils.type_string()},\n {\"name\": \"budget\", \"datatype\": dbt_utils.type_float()},\n {\"name\": \"budget_mode\", \"datatype\": dbt_utils.type_string()},\n {\"name\": \"campaign_id\", \"datatype\": dbt_utils.type_numeric()},\n {\"name\": \"category\", \"datatype\": dbt_utils.type_numeric()},\n {\"name\": \"click_tracking_url\", \"datatype\": dbt_utils.type_string()},\n {\"name\": \"conversion_bid\", \"datatype\": dbt_utils.type_float()},\n {\"name\": \"cpv_video_duration\", \"datatype\": dbt_utils.type_string()},\n {\"name\": \"create_time\", \"datatype\": dbt_utils.type_timestamp()},\n {\"name\": \"creative_material_mode\", \"datatype\": dbt_utils.type_string()},\n {\"name\": \"dayparting\", \"datatype\": dbt_utils.type_string()},\n {\"name\": \"deep_bid_type\", \"datatype\": dbt_utils.type_string()},\n {\"name\": \"deep_cpabid\", \"datatype\": dbt_utils.type_float()},\n {\"name\": \"deep_external_action\", \"datatype\": dbt_utils.type_string()},\n {\"name\": \"display_name\", \"datatype\": dbt_utils.type_string()},\n {\"name\": \"enable_inventory_filter\", \"datatype\": \"boolean\"},\n {\"name\": \"external_action\", \"datatype\": dbt_utils.type_string()},\n {\"name\": \"fallback_type\", \"datatype\": dbt_utils.type_string()},\n {\"name\": \"frequency\", \"datatype\": dbt_utils.type_numeric()},\n {\"name\": \"frequency_schedule\", \"datatype\": dbt_utils.type_numeric()},\n {\"name\": \"gender\", \"datatype\": dbt_utils.type_string()},\n {\"name\": \"impression_tracking_url\", \"datatype\": dbt_utils.type_string()},\n {\"name\": \"ios_osv\", \"datatype\": dbt_utils.type_string()},\n {\"name\": \"is_comment_disable\", \"datatype\": dbt_utils.type_numeric()},\n {\"name\": \"is_hfss\", \"datatype\": \"boolean\"},\n {\"name\": \"is_new_structure\", \"datatype\": \"boolean\"},\n {\"name\": \"landing_page_url\", \"datatype\": dbt_utils.type_string()},\n {\"name\": \"open_url\", \"datatype\": dbt_utils.type_string()},\n {\"name\": \"open_url_type\", \"datatype\": dbt_utils.type_string()},\n {\"name\": \"opt_status\", \"datatype\": dbt_utils.type_string()},\n {\"name\": \"optimize_goal\", \"datatype\": dbt_utils.type_string()},\n {\"name\": \"pacing\", \"datatype\": dbt_utils.type_string()},\n {\"name\": \"package\", \"datatype\": dbt_utils.type_string()},\n {\"name\": \"pixel_id\", \"datatype\": dbt_utils.type_numeric()},\n {\"name\": \"placement_type\", \"datatype\": dbt_utils.type_string()},\n {\"name\": \"profile_image\", \"datatype\": dbt_utils.type_string()},\n {\"name\": \"schedule_end_time\", \"datatype\": dbt_utils.type_timestamp()},\n {\"name\": \"schedule_start_time\", \"datatype\": dbt_utils.type_timestamp()},\n {\"name\": \"schedule_type\", \"datatype\": dbt_utils.type_string()},\n {\"name\": \"skip_learning_phase\", \"datatype\": dbt_utils.type_numeric()},\n {\"name\": \"statistic_type\", \"datatype\": dbt_utils.type_string()},\n {\"name\": \"status\", \"datatype\": dbt_utils.type_string()},\n {\"name\": \"updated_at\", \"datatype\": dbt_utils.type_timestamp()},\n {\"name\": \"video_download\", \"datatype\": dbt_utils.type_string()},\n {\"name\": \"audience\", \"datatype\": dbt_utils.type_string()},\n {\"name\": \"excluded_audience\", \"datatype\": dbt_utils.type_string()},\n {\"name\": \"location\", \"datatype\": dbt_utils.type_string()},\n {\"name\": \"interest_category_v_2\", \"datatype\": dbt_utils.type_string()},\n {\"name\": \"pangle_block_app_list_id\", \"datatype\": dbt_utils.type_string()},\n {\"name\": \"action_categories\", \"datatype\": dbt_utils.type_string()},\n {\"name\": \"placement\", \"datatype\": dbt_utils.type_string()},\n {\"name\": \"keywords\", \"datatype\": dbt_utils.type_string()},\n {\"name\": \"age\", \"datatype\": dbt_utils.type_string()},\n {\"name\": \"languages\", \"datatype\": dbt_utils.type_string()}\n\n] %}\n\n{{ return(columns) }}\n\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.dbt_utils.type_timestamp", "macro.dbt_utils.type_numeric", "macro.dbt_utils.type_string", "macro.dbt_utils.type_float"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1641494962.1971068}, "macro.tiktok_ads_source.get_ad_group_report_hourly_columns": {"unique_id": "macro.tiktok_ads_source.get_ad_group_report_hourly_columns", "package_name": "tiktok_ads_source", "root_path": "/Users/renee.li/Documents/dbt/tiktok/develop/dbt_packages/tiktok_ads_source", "path": "macros/get_ad_group_report_hourly_columns.sql", "original_file_path": "macros/get_ad_group_report_hourly_columns.sql", "name": "get_ad_group_report_hourly_columns", "macro_sql": "{% macro get_ad_group_report_hourly_columns() %}\n\n{% set columns = [\n {\"name\": \"_fivetran_synced\", \"datatype\": dbt_utils.type_timestamp()},\n {\"name\": \"adgroup_id\", \"datatype\": dbt_utils.type_numeric()},\n {\"name\": \"average_video_play\", \"datatype\": dbt_utils.type_float()},\n {\"name\": \"average_video_play_per_user\", \"datatype\": dbt_utils.type_float()},\n {\"name\": \"clicks\", \"datatype\": dbt_utils.type_numeric()},\n {\"name\": \"comments\", \"datatype\": dbt_utils.type_numeric()},\n {\"name\": \"conversion\", \"datatype\": dbt_utils.type_numeric()},\n {\"name\": \"conversion_rate\", \"datatype\": dbt_utils.type_float()},\n {\"name\": \"cost_per_1000_reached\", \"datatype\": dbt_utils.type_float()},\n {\"name\": \"cost_per_conversion\", \"datatype\": dbt_utils.type_float()},\n {\"name\": \"cost_per_result\", \"datatype\": dbt_utils.type_float()},\n {\"name\": \"cost_per_secondary_goal_result\", \"datatype\": dbt_utils.type_string()},\n {\"name\": \"cpc\", \"datatype\": dbt_utils.type_float()},\n {\"name\": \"cpm\", \"datatype\": dbt_utils.type_float()},\n {\"name\": \"ctr\", \"datatype\": dbt_utils.type_float()},\n {\"name\": \"follows\", \"datatype\": dbt_utils.type_numeric()},\n {\"name\": \"impressions\", \"datatype\": dbt_utils.type_numeric()},\n {\"name\": \"likes\", \"datatype\": dbt_utils.type_numeric()},\n {\"name\": \"profile_visits\", \"datatype\": dbt_utils.type_numeric()},\n {\"name\": \"profile_visits_rate\", \"datatype\": dbt_utils.type_float()},\n {\"name\": \"reach\", \"datatype\": dbt_utils.type_numeric()},\n {\"name\": \"real_time_conversion\", \"datatype\": dbt_utils.type_numeric()},\n {\"name\": \"real_time_conversion_rate\", \"datatype\": dbt_utils.type_float()},\n {\"name\": \"real_time_cost_per_conversion\", \"datatype\": dbt_utils.type_float()},\n {\"name\": \"real_time_cost_per_result\", \"datatype\": dbt_utils.type_float()},\n {\"name\": \"real_time_result\", \"datatype\": dbt_utils.type_numeric()},\n {\"name\": \"real_time_result_rate\", \"datatype\": dbt_utils.type_float()},\n {\"name\": \"result\", \"datatype\": dbt_utils.type_numeric()},\n {\"name\": \"result_rate\", \"datatype\": dbt_utils.type_float()},\n {\"name\": \"secondary_goal_result\", \"datatype\": dbt_utils.type_string()},\n {\"name\": \"secondary_goal_result_rate\", \"datatype\": dbt_utils.type_string()},\n {\"name\": \"shares\", \"datatype\": dbt_utils.type_numeric()},\n {\"name\": \"spend\", \"datatype\": dbt_utils.type_float()},\n {\"name\": \"stat_time_hour\", \"datatype\": dbt_utils.type_timestamp()},\n {\"name\": \"video_play_actions\", \"datatype\": dbt_utils.type_numeric()},\n {\"name\": \"video_views_p_100\", \"datatype\": dbt_utils.type_numeric()},\n {\"name\": \"video_views_p_25\", \"datatype\": dbt_utils.type_numeric()},\n {\"name\": \"video_views_p_50\", \"datatype\": dbt_utils.type_numeric()},\n {\"name\": \"video_views_p_75\", \"datatype\": dbt_utils.type_numeric()},\n {\"name\": \"video_watched_2_s\", \"datatype\": dbt_utils.type_numeric()},\n {\"name\": \"video_watched_6_s\", \"datatype\": dbt_utils.type_numeric()}\n] %}\n\n{{ return(columns) }}\n\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.dbt_utils.type_timestamp", "macro.dbt_utils.type_numeric", "macro.dbt_utils.type_float", "macro.dbt_utils.type_string"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1641494962.206978}, "macro.tiktok_ads_source.get_advertiser_columns": {"unique_id": "macro.tiktok_ads_source.get_advertiser_columns", "package_name": "tiktok_ads_source", "root_path": "/Users/renee.li/Documents/dbt/tiktok/develop/dbt_packages/tiktok_ads_source", "path": "macros/get_advertiser_columns.sql", "original_file_path": "macros/get_advertiser_columns.sql", "name": "get_advertiser_columns", "macro_sql": "{% macro get_advertiser_columns() %}\n\n{% set columns = [\n {\"name\": \"_fivetran_synced\", \"datatype\": dbt_utils.type_timestamp()},\n {\"name\": \"address\", \"datatype\": dbt_utils.type_string()},\n {\"name\": \"balance\", \"datatype\": dbt_utils.type_float()},\n {\"name\": \"company\", \"datatype\": dbt_utils.type_string()},\n {\"name\": \"contacter\", \"datatype\": dbt_utils.type_string()},\n {\"name\": \"country\", \"datatype\": dbt_utils.type_string()},\n {\"name\": \"create_time\", \"datatype\": dbt_utils.type_timestamp()},\n {\"name\": \"currency\", \"datatype\": dbt_utils.type_string()},\n {\"name\": \"description\", \"datatype\": dbt_utils.type_string()},\n {\"name\": \"email\", \"datatype\": dbt_utils.type_string()},\n {\"name\": \"id\", \"datatype\": dbt_utils.type_numeric()},\n {\"name\": \"industry\", \"datatype\": dbt_utils.type_string()},\n {\"name\": \"language\", \"datatype\": dbt_utils.type_string()},\n {\"name\": \"license_no\", \"datatype\": dbt_utils.type_string()},\n {\"name\": \"license_url\", \"datatype\": dbt_utils.type_string()},\n {\"name\": \"name\", \"datatype\": dbt_utils.type_string()},\n {\"name\": \"phone_number\", \"datatype\": dbt_utils.type_string()},\n {\"name\": \"promotion_area\", \"datatype\": dbt_utils.type_string()},\n {\"name\": \"reason\", \"datatype\": dbt_utils.type_string()},\n {\"name\": \"role\", \"datatype\": dbt_utils.type_string()},\n {\"name\": \"status\", \"datatype\": dbt_utils.type_string()},\n {\"name\": \"telephone\", \"datatype\": dbt_utils.type_string()},\n {\"name\": \"timezone\", \"datatype\": dbt_utils.type_string()}\n] %}\n\n{{ return(columns) }}\n\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.dbt_utils.type_timestamp", "macro.dbt_utils.type_string", "macro.dbt_utils.type_float", "macro.dbt_utils.type_numeric"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1641494962.2123048}, "macro.tiktok_ads_source.get_campaign_history_columns": {"unique_id": "macro.tiktok_ads_source.get_campaign_history_columns", "package_name": "tiktok_ads_source", "root_path": "/Users/renee.li/Documents/dbt/tiktok/develop/dbt_packages/tiktok_ads_source", "path": "macros/get_campaign_history_columns.sql", "original_file_path": "macros/get_campaign_history_columns.sql", "name": "get_campaign_history_columns", "macro_sql": "{% macro get_campaign_history_columns() %}\n\n{% set columns = [\n {\"name\": \"_fivetran_synced\", \"datatype\": dbt_utils.type_timestamp()},\n {\"name\": \"advertiser_id\", \"datatype\": dbt_utils.type_numeric()},\n {\"name\": \"budget\", \"datatype\": dbt_utils.type_float()},\n {\"name\": \"budget_mode\", \"datatype\": dbt_utils.type_string()},\n {\"name\": \"campaign_id\", \"datatype\": dbt_utils.type_numeric()},\n {\"name\": \"campaign_name\", \"datatype\": dbt_utils.type_string()},\n {\"name\": \"campaign_type\", \"datatype\": dbt_utils.type_string()},\n {\"name\": \"create_time\", \"datatype\": dbt_utils.type_timestamp()},\n {\"name\": \"is_new_structure\", \"datatype\": dbt_utils.type_string()},\n {\"name\": \"objective_type\", \"datatype\": dbt_utils.type_string()},\n {\"name\": \"opt_status\", \"datatype\": dbt_utils.type_string()},\n {\"name\": \"split_test_variable\", \"datatype\": dbt_utils.type_string()},\n {\"name\": \"updated_at\", \"datatype\": dbt_utils.type_timestamp()}\n] %}\n\n{{ return(columns) }}\n\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.dbt_utils.type_timestamp", "macro.dbt_utils.type_numeric", "macro.dbt_utils.type_float", "macro.dbt_utils.type_string"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1641494962.2155032}, "macro.tiktok_ads_source.get_campaign_report_hourly_columns": {"unique_id": "macro.tiktok_ads_source.get_campaign_report_hourly_columns", "package_name": "tiktok_ads_source", "root_path": "/Users/renee.li/Documents/dbt/tiktok/develop/dbt_packages/tiktok_ads_source", "path": "macros/get_campaign_report_hourly_columns.sql", "original_file_path": "macros/get_campaign_report_hourly_columns.sql", "name": "get_campaign_report_hourly_columns", "macro_sql": "{% macro get_campaign_report_hourly_columns() %}\n\n{% set columns = [\n {\"name\": \"_fivetran_synced\", \"datatype\": dbt_utils.type_timestamp()},\n {\"name\": \"average_video_play\", \"datatype\": dbt_utils.type_float()},\n {\"name\": \"average_video_play_per_user\", \"datatype\": dbt_utils.type_float()},\n {\"name\": \"campaign_id\", \"datatype\": dbt_utils.type_numeric()},\n {\"name\": \"clicks\", \"datatype\": dbt_utils.type_numeric()},\n {\"name\": \"comments\", \"datatype\": dbt_utils.type_numeric()},\n {\"name\": \"conversion\", \"datatype\": dbt_utils.type_numeric()},\n {\"name\": \"conversion_rate\", \"datatype\": dbt_utils.type_float()},\n {\"name\": \"cost_per_1000_reached\", \"datatype\": dbt_utils.type_float()},\n {\"name\": \"cost_per_conversion\", \"datatype\": dbt_utils.type_float()},\n {\"name\": \"cost_per_result\", \"datatype\": dbt_utils.type_float()},\n {\"name\": \"cost_per_secondary_goal_result\", \"datatype\": dbt_utils.type_string()},\n {\"name\": \"cpc\", \"datatype\": dbt_utils.type_float()},\n {\"name\": \"cpm\", \"datatype\": dbt_utils.type_float()},\n {\"name\": \"ctr\", \"datatype\": dbt_utils.type_float()},\n {\"name\": \"follows\", \"datatype\": dbt_utils.type_numeric()},\n {\"name\": \"impressions\", \"datatype\": dbt_utils.type_numeric()},\n {\"name\": \"likes\", \"datatype\": dbt_utils.type_numeric()},\n {\"name\": \"profile_visits\", \"datatype\": dbt_utils.type_numeric()},\n {\"name\": \"profile_visits_rate\", \"datatype\": dbt_utils.type_float()},\n {\"name\": \"reach\", \"datatype\": dbt_utils.type_numeric()},\n {\"name\": \"real_time_conversion\", \"datatype\": dbt_utils.type_numeric()},\n {\"name\": \"real_time_conversion_rate\", \"datatype\": dbt_utils.type_float()},\n {\"name\": \"real_time_cost_per_conversion\", \"datatype\": dbt_utils.type_float()},\n {\"name\": \"real_time_cost_per_result\", \"datatype\": dbt_utils.type_float()},\n {\"name\": \"real_time_result\", \"datatype\": dbt_utils.type_numeric()},\n {\"name\": \"real_time_result_rate\", \"datatype\": dbt_utils.type_float()},\n {\"name\": \"result\", \"datatype\": dbt_utils.type_numeric()},\n {\"name\": \"result_rate\", \"datatype\": dbt_utils.type_float()},\n {\"name\": \"secondary_goal_result\", \"datatype\": dbt_utils.type_string()},\n {\"name\": \"secondary_goal_result_rate\", \"datatype\": dbt_utils.type_string()},\n {\"name\": \"shares\", \"datatype\": dbt_utils.type_numeric()},\n {\"name\": \"spend\", \"datatype\": dbt_utils.type_float()},\n {\"name\": \"stat_time_hour\", \"datatype\": dbt_utils.type_timestamp()},\n {\"name\": \"video_play_actions\", \"datatype\": dbt_utils.type_numeric()},\n {\"name\": \"video_views_p_100\", \"datatype\": dbt_utils.type_numeric()},\n {\"name\": \"video_views_p_25\", \"datatype\": dbt_utils.type_numeric()},\n {\"name\": \"video_views_p_50\", \"datatype\": dbt_utils.type_numeric()},\n {\"name\": \"video_views_p_75\", \"datatype\": dbt_utils.type_numeric()},\n {\"name\": \"video_watched_2_s\", \"datatype\": dbt_utils.type_numeric()},\n {\"name\": \"video_watched_6_s\", \"datatype\": dbt_utils.type_numeric()}\n] %}\n\n{{ return(columns) }}\n\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.dbt_utils.type_timestamp", "macro.dbt_utils.type_float", "macro.dbt_utils.type_numeric", "macro.dbt_utils.type_string"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1641494962.225078}, "macro.tiktok_ads_source.get_ad_history_columns": {"unique_id": "macro.tiktok_ads_source.get_ad_history_columns", "package_name": "tiktok_ads_source", "root_path": "/Users/renee.li/Documents/dbt/tiktok/develop/dbt_packages/tiktok_ads_source", "path": "macros/get_ad_history_columns.sql", "original_file_path": "macros/get_ad_history_columns.sql", "name": "get_ad_history_columns", "macro_sql": "{% macro get_ad_history_columns() %}\n\n{% set columns = [\n {\"name\": \"_fivetran_synced\", \"datatype\": dbt_utils.type_timestamp()},\n {\"name\": \"ad_id\", \"datatype\": dbt_utils.type_numeric()},\n {\"name\": \"ad_name\", \"datatype\": dbt_utils.type_string()},\n {\"name\": \"ad_text\", \"datatype\": dbt_utils.type_string()},\n {\"name\": \"adgroup_id\", \"datatype\": dbt_utils.type_numeric()},\n {\"name\": \"advertiser_id\", \"datatype\": dbt_utils.type_numeric()},\n {\"name\": \"app_name\", \"datatype\": dbt_utils.type_string()},\n {\"name\": \"call_to_action\", \"datatype\": dbt_utils.type_string()},\n {\"name\": \"campaign_id\", \"datatype\": dbt_utils.type_numeric()},\n {\"name\": \"click_tracking_url\", \"datatype\": dbt_utils.type_string()},\n {\"name\": \"create_time\", \"datatype\": dbt_utils.type_timestamp()},\n {\"name\": \"display_name\", \"datatype\": dbt_utils.type_string()},\n {\"name\": \"impression_tracking_url\", \"datatype\": dbt_utils.type_string()},\n {\"name\": \"is_aco\", \"datatype\": \"boolean\"},\n {\"name\": \"is_creative_authorized\", \"datatype\": \"boolean\"},\n {\"name\": \"is_new_structure\", \"datatype\": \"boolean\"},\n {\"name\": \"landing_page_url\", \"datatype\": dbt_utils.type_string()},\n {\"name\": \"open_url\", \"datatype\": dbt_utils.type_string()},\n {\"name\": \"opt_status\", \"datatype\": dbt_utils.type_string()},\n {\"name\": \"playable_url\", \"datatype\": dbt_utils.type_string()},\n {\"name\": \"profile_image\", \"datatype\": dbt_utils.type_string()},\n {\"name\": \"status\", \"datatype\": dbt_utils.type_string()},\n {\"name\": \"updated_at\", \"datatype\": dbt_utils.type_timestamp()},\n {\"name\": \"video_id\", \"datatype\": dbt_utils.type_string()},\n {\"name\": \"image_ids\", \"datatype\": dbt_utils.type_string()}\n\n] %}\n\n{{ return(columns) }}\n\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.dbt_utils.type_timestamp", "macro.dbt_utils.type_numeric", "macro.dbt_utils.type_string"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1641494962.230725}, "macro.tiktok_ads_source.get_ad_report_hourly_columns": {"unique_id": "macro.tiktok_ads_source.get_ad_report_hourly_columns", "package_name": "tiktok_ads_source", "root_path": "/Users/renee.li/Documents/dbt/tiktok/develop/dbt_packages/tiktok_ads_source", "path": "macros/get_ad_report_hourly_columns.sql", "original_file_path": "macros/get_ad_report_hourly_columns.sql", "name": "get_ad_report_hourly_columns", "macro_sql": "{% macro get_ad_report_hourly_columns() %}\n\n{% set columns = [\n {\"name\": \"_fivetran_synced\", \"datatype\": dbt_utils.type_timestamp()},\n {\"name\": \"ad_id\", \"datatype\": dbt_utils.type_numeric()},\n {\"name\": \"average_video_play\", \"datatype\": dbt_utils.type_float()},\n {\"name\": \"average_video_play_per_user\", \"datatype\": dbt_utils.type_float()},\n {\"name\": \"clicks\", \"datatype\": dbt_utils.type_numeric()},\n {\"name\": \"comments\", \"datatype\": dbt_utils.type_numeric()},\n {\"name\": \"conversion\", \"datatype\": dbt_utils.type_numeric()},\n {\"name\": \"conversion_rate\", \"datatype\": dbt_utils.type_float()},\n {\"name\": \"cost_per_1000_reached\", \"datatype\": dbt_utils.type_float()},\n {\"name\": \"cost_per_conversion\", \"datatype\": dbt_utils.type_float()},\n {\"name\": \"cost_per_result\", \"datatype\": dbt_utils.type_float()},\n {\"name\": \"cost_per_secondary_goal_result\", \"datatype\": dbt_utils.type_string()},\n {\"name\": \"cpc\", \"datatype\": dbt_utils.type_float()},\n {\"name\": \"cpm\", \"datatype\": dbt_utils.type_float()},\n {\"name\": \"ctr\", \"datatype\": dbt_utils.type_float()},\n {\"name\": \"follows\", \"datatype\": dbt_utils.type_numeric()},\n {\"name\": \"impressions\", \"datatype\": dbt_utils.type_numeric()},\n {\"name\": \"likes\", \"datatype\": dbt_utils.type_numeric()},\n {\"name\": \"profile_visits\", \"datatype\": dbt_utils.type_numeric()},\n {\"name\": \"profile_visits_rate\", \"datatype\": dbt_utils.type_float()},\n {\"name\": \"reach\", \"datatype\": dbt_utils.type_numeric()},\n {\"name\": \"real_time_conversion\", \"datatype\": dbt_utils.type_numeric()},\n {\"name\": \"real_time_conversion_rate\", \"datatype\": dbt_utils.type_float()},\n {\"name\": \"real_time_cost_per_conversion\", \"datatype\": dbt_utils.type_float()},\n {\"name\": \"real_time_cost_per_result\", \"datatype\": dbt_utils.type_float()},\n {\"name\": \"real_time_result\", \"datatype\": dbt_utils.type_numeric()},\n {\"name\": \"real_time_result_rate\", \"datatype\": dbt_utils.type_float()},\n {\"name\": \"result\", \"datatype\": dbt_utils.type_numeric()},\n {\"name\": \"result_rate\", \"datatype\": dbt_utils.type_float()},\n {\"name\": \"secondary_goal_result\", \"datatype\": dbt_utils.type_string()},\n {\"name\": \"secondary_goal_result_rate\", \"datatype\": dbt_utils.type_string()},\n {\"name\": \"shares\", \"datatype\": dbt_utils.type_numeric()},\n {\"name\": \"spend\", \"datatype\": dbt_utils.type_float()},\n {\"name\": \"stat_time_hour\", \"datatype\": dbt_utils.type_timestamp()},\n {\"name\": \"video_play_actions\", \"datatype\": dbt_utils.type_numeric()},\n {\"name\": \"video_views_p_100\", \"datatype\": dbt_utils.type_numeric()},\n {\"name\": \"video_views_p_25\", \"datatype\": dbt_utils.type_numeric()},\n {\"name\": \"video_views_p_50\", \"datatype\": dbt_utils.type_numeric()},\n {\"name\": \"video_views_p_75\", \"datatype\": dbt_utils.type_numeric()},\n {\"name\": \"video_watched_2_s\", \"datatype\": dbt_utils.type_numeric()},\n {\"name\": \"video_watched_6_s\", \"datatype\": dbt_utils.type_numeric()}\n] %}\n\n{{ return(columns) }}\n\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.dbt_utils.type_timestamp", "macro.dbt_utils.type_numeric", "macro.dbt_utils.type_float", "macro.dbt_utils.type_string"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1641494962.240277}}, "docs": {"dbt.__overview__": {"unique_id": "dbt.__overview__", "package_name": "dbt", "root_path": "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages/dbt/include/global_project", "path": "overview.md", "original_file_path": "docs/overview.md", "name": "__overview__", "block_contents": "### Welcome!\n\nWelcome to the auto-generated documentation for your dbt project!\n\n### Navigation\n\nYou can use the `Project` and `Database` navigation tabs on the left side of the window to explore the models\nin your project.\n\n#### Project Tab\nThe `Project` tab mirrors the directory structure of your dbt project. In this tab, you can see all of the\nmodels defined in your dbt project, as well as models imported from dbt packages.\n\n#### Database Tab\nThe `Database` tab also exposes your models, but in a format that looks more like a database explorer. This view\nshows relations (tables and views) grouped into database schemas. Note that ephemeral models are _not_ shown\nin this interface, as they do not exist in the database.\n\n### Graph Exploration\nYou can click the blue icon on the bottom-right corner of the page to view the lineage graph of your models.\n\nOn model pages, you'll see the immediate parents and children of the model you're exploring. By clicking the `Expand`\nbutton at the top-right of this lineage pane, you'll be able to see all of the models that are used to build,\nor are built from, the model you're exploring.\n\nOnce expanded, you'll be able to use the `--select` and `--exclude` model selection syntax to filter the\nmodels in the graph. For more information on model selection, check out the [dbt docs](https://docs.getdbt.com/docs/model-selection-syntax).\n\nNote that you can also right-click on models to interactively filter and explore the graph.\n\n---\n\n### More information\n\n- [What is dbt](https://docs.getdbt.com/docs/overview)?\n- Read the [dbt viewpoint](https://docs.getdbt.com/docs/viewpoint)\n- [Installation](https://docs.getdbt.com/docs/installation)\n- Join the [dbt Community](https://www.getdbt.com/community/) for questions and discussion"}}, "exposures": {}, "metrics": {}, "selectors": {}, "disabled": {}, "parent_map": {"model.tiktok_ads.tiktok_ads__ad_adapter": ["model.tiktok_ads.int_tiktok_ads__most_recent_ad", "model.tiktok_ads.int_tiktok_ads__most_recent_ad_group", "model.tiktok_ads.int_tiktok_ads__most_recent_campaign", "model.tiktok_ads_source.stg_tiktok_ads__ad_report_hourly", "model.tiktok_ads_source.stg_tiktok_ads__advertiser"], "model.tiktok_ads.tiktok_ads__ad_group_report": ["model.tiktok_ads.int_tiktok_ads__most_recent_ad_group", "model.tiktok_ads.tiktok_ads__ad_adapter"], "model.tiktok_ads.tiktok_ads__campaign_report": ["model.tiktok_ads.tiktok_ads__ad_adapter"], "model.tiktok_ads.int_tiktok_ads__most_recent_campaign": ["model.tiktok_ads_source.stg_tiktok_ads__campaign_history"], "model.tiktok_ads.int_tiktok_ads__most_recent_ad": ["model.tiktok_ads_source.stg_tiktok_ads__ad_history"], "model.tiktok_ads.int_tiktok_ads__most_recent_ad_group": ["model.tiktok_ads_source.stg_tiktok_ads__ad_group_history"], "model.tiktok_ads_source.stg_tiktok_ads__campaign_report_hourly": ["model.tiktok_ads_source.stg_tiktok_ads__campaign_report_hourly_tmp", "model.tiktok_ads_source.stg_tiktok_ads__campaign_report_hourly_tmp"], "model.tiktok_ads_source.stg_tiktok_ads__ad_group_report_hourly": ["model.tiktok_ads_source.stg_tiktok_ads__ad_group_report_hourly_tmp", "model.tiktok_ads_source.stg_tiktok_ads__ad_group_report_hourly_tmp"], "model.tiktok_ads_source.stg_tiktok_ads__ad_group_history": ["model.tiktok_ads_source.stg_tiktok_ads__ad_group_history_tmp", "model.tiktok_ads_source.stg_tiktok_ads__ad_group_history_tmp"], "model.tiktok_ads_source.stg_tiktok_ads__ad_report_hourly": ["model.tiktok_ads_source.stg_tiktok_ads__ad_report_hourly_tmp", "model.tiktok_ads_source.stg_tiktok_ads__ad_report_hourly_tmp"], "model.tiktok_ads_source.stg_tiktok_ads__advertiser": ["model.tiktok_ads_source.stg_tiktok_ads__advertiser_tmp", "model.tiktok_ads_source.stg_tiktok_ads__advertiser_tmp"], "model.tiktok_ads_source.stg_tiktok_ads__ad_history": ["model.tiktok_ads_source.stg_tiktok_ads__ad_history_tmp", "model.tiktok_ads_source.stg_tiktok_ads__ad_history_tmp"], "model.tiktok_ads_source.stg_tiktok_ads__campaign_history": ["model.tiktok_ads_source.stg_tiktok_ads__campaign_history_tmp", "model.tiktok_ads_source.stg_tiktok_ads__campaign_history_tmp"], "model.tiktok_ads_source.stg_tiktok_ads__ad_report_hourly_tmp": ["source.tiktok_ads_source.tiktok_ads.ad_report_hourly"], "model.tiktok_ads_source.stg_tiktok_ads__ad_history_tmp": ["source.tiktok_ads_source.tiktok_ads.ad_history"], "model.tiktok_ads_source.stg_tiktok_ads__ad_group_history_tmp": ["source.tiktok_ads_source.tiktok_ads.adgroup_history"], "model.tiktok_ads_source.stg_tiktok_ads__campaign_report_hourly_tmp": ["source.tiktok_ads_source.tiktok_ads.campaign_report_hourly"], "model.tiktok_ads_source.stg_tiktok_ads__ad_group_report_hourly_tmp": ["source.tiktok_ads_source.tiktok_ads.adgroup_report_hourly"], "model.tiktok_ads_source.stg_tiktok_ads__campaign_history_tmp": ["source.tiktok_ads_source.tiktok_ads.campaign_history"], "model.tiktok_ads_source.stg_tiktok_ads__advertiser_tmp": ["source.tiktok_ads_source.tiktok_ads.advertiser"], "test.tiktok_ads.dbt_utils_unique_combination_of_columns_tiktok_ads__ad_adapter_ad_id__date_day.c70f86f560": ["model.tiktok_ads.tiktok_ads__ad_adapter"], "test.tiktok_ads.dbt_utils_unique_combination_of_columns_tiktok_ads__ad_group_report_ad_group_id__date_day.2eb4c2ff6d": ["model.tiktok_ads.tiktok_ads__ad_group_report"], "test.tiktok_ads.dbt_utils_unique_combination_of_columns_tiktok_ads__campaign_report_campaign_id__date_day.cc5f756c69": ["model.tiktok_ads.tiktok_ads__campaign_report"], "test.tiktok_ads.not_null_int_tiktok_ads__most_recent_ad_group_ad_group_id.fcb8c561bc": ["model.tiktok_ads.int_tiktok_ads__most_recent_ad_group"], "test.tiktok_ads.dbt_utils_unique_combination_of_columns_int_tiktok_ads__most_recent_ad_group_ad_group_id__updated_at.e2e9914076": ["model.tiktok_ads.int_tiktok_ads__most_recent_ad_group"], "test.tiktok_ads.not_null_int_tiktok_ads__most_recent_ad_ad_id.14e9c145ca": ["model.tiktok_ads.int_tiktok_ads__most_recent_ad"], "test.tiktok_ads.dbt_utils_unique_combination_of_columns_int_tiktok_ads__most_recent_ad_ad_id__updated_at.f58d824f65": ["model.tiktok_ads.int_tiktok_ads__most_recent_ad"], "test.tiktok_ads.not_null_int_tiktok_ads__most_recent_campaign_campaign_id.8cefa8981c": ["model.tiktok_ads.int_tiktok_ads__most_recent_campaign"], "test.tiktok_ads.dbt_utils_unique_combination_of_columns_int_tiktok_ads__most_recent_campaign_campaign_id__updated_at.39077adf71": ["model.tiktok_ads.int_tiktok_ads__most_recent_campaign"], "test.tiktok_ads_source.unique_stg_tiktok_ads__advertiser_advertiser_id.078391ba66": ["model.tiktok_ads_source.stg_tiktok_ads__advertiser"], "test.tiktok_ads_source.not_null_stg_tiktok_ads__advertiser_advertiser_id.5deab92def": ["model.tiktok_ads_source.stg_tiktok_ads__advertiser"], "test.tiktok_ads_source.not_null_stg_tiktok_ads__ad_group_history_ad_group_id.04778d7fad": ["model.tiktok_ads_source.stg_tiktok_ads__ad_group_history"], "test.tiktok_ads_source.dbt_utils_unique_combination_of_columns_stg_tiktok_ads__ad_group_history_ad_group_id__updated_at.cec78c01de": ["model.tiktok_ads_source.stg_tiktok_ads__ad_group_history"], "test.tiktok_ads_source.not_null_stg_tiktok_ads__ad_history_ad_id.4ffd05b23a": ["model.tiktok_ads_source.stg_tiktok_ads__ad_history"], "test.tiktok_ads_source.dbt_utils_unique_combination_of_columns_stg_tiktok_ads__ad_history_ad_id__updated_at.66b86b4dd1": ["model.tiktok_ads_source.stg_tiktok_ads__ad_history"], "test.tiktok_ads_source.not_null_stg_tiktok_ads__campaign_history_campaign_id.7f9147d1e1": ["model.tiktok_ads_source.stg_tiktok_ads__campaign_history"], "test.tiktok_ads_source.dbt_utils_unique_combination_of_columns_stg_tiktok_ads__campaign_history_campaign_id__updated_at.72bf07011b": ["model.tiktok_ads_source.stg_tiktok_ads__campaign_history"], "test.tiktok_ads_source.dbt_utils_unique_combination_of_columns_stg_tiktok_ads__ad_report_hourly_ad_id__stat_time_hour.e70f8cef6d": ["model.tiktok_ads_source.stg_tiktok_ads__ad_report_hourly"], "test.tiktok_ads_source.not_null_stg_tiktok_ads__ad_group_report_hourly_ad_group_id.8da17119f1": ["model.tiktok_ads_source.stg_tiktok_ads__ad_group_report_hourly"], "test.tiktok_ads_source.dbt_utils_unique_combination_of_columns_stg_tiktok_ads__ad_group_report_hourly_ad_group_id__stat_time_hour.1aeaeb71ad": ["model.tiktok_ads_source.stg_tiktok_ads__ad_group_report_hourly"], "test.tiktok_ads_source.not_null_stg_tiktok_ads__campaign_report_hourly_campaign_id.ef898379fb": ["model.tiktok_ads_source.stg_tiktok_ads__campaign_report_hourly"], "test.tiktok_ads_source.dbt_utils_unique_combination_of_columns_stg_tiktok_ads__campaign_report_hourly_campaign_id__stat_time_hour.8e4a1e4b34": ["model.tiktok_ads_source.stg_tiktok_ads__campaign_report_hourly"], "source.tiktok_ads_source.tiktok_ads.advertiser": [], "source.tiktok_ads_source.tiktok_ads.campaign_history": [], "source.tiktok_ads_source.tiktok_ads.adgroup_history": [], "source.tiktok_ads_source.tiktok_ads.ad_history": [], "source.tiktok_ads_source.tiktok_ads.ad_report_hourly": [], "source.tiktok_ads_source.tiktok_ads.campaign_report_hourly": [], "source.tiktok_ads_source.tiktok_ads.adgroup_report_hourly": []}, "child_map": {"model.tiktok_ads.tiktok_ads__ad_adapter": ["model.tiktok_ads.tiktok_ads__ad_group_report", "model.tiktok_ads.tiktok_ads__campaign_report", "test.tiktok_ads.dbt_utils_unique_combination_of_columns_tiktok_ads__ad_adapter_ad_id__date_day.c70f86f560"], "model.tiktok_ads.tiktok_ads__ad_group_report": ["test.tiktok_ads.dbt_utils_unique_combination_of_columns_tiktok_ads__ad_group_report_ad_group_id__date_day.2eb4c2ff6d"], "model.tiktok_ads.tiktok_ads__campaign_report": ["test.tiktok_ads.dbt_utils_unique_combination_of_columns_tiktok_ads__campaign_report_campaign_id__date_day.cc5f756c69"], "model.tiktok_ads.int_tiktok_ads__most_recent_campaign": ["model.tiktok_ads.tiktok_ads__ad_adapter", "test.tiktok_ads.dbt_utils_unique_combination_of_columns_int_tiktok_ads__most_recent_campaign_campaign_id__updated_at.39077adf71", "test.tiktok_ads.not_null_int_tiktok_ads__most_recent_campaign_campaign_id.8cefa8981c"], "model.tiktok_ads.int_tiktok_ads__most_recent_ad": ["model.tiktok_ads.tiktok_ads__ad_adapter", "test.tiktok_ads.dbt_utils_unique_combination_of_columns_int_tiktok_ads__most_recent_ad_ad_id__updated_at.f58d824f65", "test.tiktok_ads.not_null_int_tiktok_ads__most_recent_ad_ad_id.14e9c145ca"], "model.tiktok_ads.int_tiktok_ads__most_recent_ad_group": ["model.tiktok_ads.tiktok_ads__ad_adapter", "model.tiktok_ads.tiktok_ads__ad_group_report", "test.tiktok_ads.dbt_utils_unique_combination_of_columns_int_tiktok_ads__most_recent_ad_group_ad_group_id__updated_at.e2e9914076", "test.tiktok_ads.not_null_int_tiktok_ads__most_recent_ad_group_ad_group_id.fcb8c561bc"], "model.tiktok_ads_source.stg_tiktok_ads__campaign_report_hourly": ["test.tiktok_ads_source.dbt_utils_unique_combination_of_columns_stg_tiktok_ads__campaign_report_hourly_campaign_id__stat_time_hour.8e4a1e4b34", "test.tiktok_ads_source.not_null_stg_tiktok_ads__campaign_report_hourly_campaign_id.ef898379fb"], "model.tiktok_ads_source.stg_tiktok_ads__ad_group_report_hourly": ["test.tiktok_ads_source.dbt_utils_unique_combination_of_columns_stg_tiktok_ads__ad_group_report_hourly_ad_group_id__stat_time_hour.1aeaeb71ad", "test.tiktok_ads_source.not_null_stg_tiktok_ads__ad_group_report_hourly_ad_group_id.8da17119f1"], "model.tiktok_ads_source.stg_tiktok_ads__ad_group_history": ["model.tiktok_ads.int_tiktok_ads__most_recent_ad_group", "test.tiktok_ads_source.dbt_utils_unique_combination_of_columns_stg_tiktok_ads__ad_group_history_ad_group_id__updated_at.cec78c01de", "test.tiktok_ads_source.not_null_stg_tiktok_ads__ad_group_history_ad_group_id.04778d7fad"], "model.tiktok_ads_source.stg_tiktok_ads__ad_report_hourly": ["model.tiktok_ads.tiktok_ads__ad_adapter", "test.tiktok_ads_source.dbt_utils_unique_combination_of_columns_stg_tiktok_ads__ad_report_hourly_ad_id__stat_time_hour.e70f8cef6d"], "model.tiktok_ads_source.stg_tiktok_ads__advertiser": ["model.tiktok_ads.tiktok_ads__ad_adapter", "test.tiktok_ads_source.not_null_stg_tiktok_ads__advertiser_advertiser_id.5deab92def", "test.tiktok_ads_source.unique_stg_tiktok_ads__advertiser_advertiser_id.078391ba66"], "model.tiktok_ads_source.stg_tiktok_ads__ad_history": ["model.tiktok_ads.int_tiktok_ads__most_recent_ad", "test.tiktok_ads_source.dbt_utils_unique_combination_of_columns_stg_tiktok_ads__ad_history_ad_id__updated_at.66b86b4dd1", "test.tiktok_ads_source.not_null_stg_tiktok_ads__ad_history_ad_id.4ffd05b23a"], "model.tiktok_ads_source.stg_tiktok_ads__campaign_history": ["model.tiktok_ads.int_tiktok_ads__most_recent_campaign", "test.tiktok_ads_source.dbt_utils_unique_combination_of_columns_stg_tiktok_ads__campaign_history_campaign_id__updated_at.72bf07011b", "test.tiktok_ads_source.not_null_stg_tiktok_ads__campaign_history_campaign_id.7f9147d1e1"], "model.tiktok_ads_source.stg_tiktok_ads__ad_report_hourly_tmp": ["model.tiktok_ads_source.stg_tiktok_ads__ad_report_hourly", "model.tiktok_ads_source.stg_tiktok_ads__ad_report_hourly"], "model.tiktok_ads_source.stg_tiktok_ads__ad_history_tmp": ["model.tiktok_ads_source.stg_tiktok_ads__ad_history", "model.tiktok_ads_source.stg_tiktok_ads__ad_history"], "model.tiktok_ads_source.stg_tiktok_ads__ad_group_history_tmp": ["model.tiktok_ads_source.stg_tiktok_ads__ad_group_history", "model.tiktok_ads_source.stg_tiktok_ads__ad_group_history"], "model.tiktok_ads_source.stg_tiktok_ads__campaign_report_hourly_tmp": ["model.tiktok_ads_source.stg_tiktok_ads__campaign_report_hourly", "model.tiktok_ads_source.stg_tiktok_ads__campaign_report_hourly"], "model.tiktok_ads_source.stg_tiktok_ads__ad_group_report_hourly_tmp": ["model.tiktok_ads_source.stg_tiktok_ads__ad_group_report_hourly", "model.tiktok_ads_source.stg_tiktok_ads__ad_group_report_hourly"], "model.tiktok_ads_source.stg_tiktok_ads__campaign_history_tmp": ["model.tiktok_ads_source.stg_tiktok_ads__campaign_history", "model.tiktok_ads_source.stg_tiktok_ads__campaign_history"], "model.tiktok_ads_source.stg_tiktok_ads__advertiser_tmp": ["model.tiktok_ads_source.stg_tiktok_ads__advertiser", "model.tiktok_ads_source.stg_tiktok_ads__advertiser"], "test.tiktok_ads.dbt_utils_unique_combination_of_columns_tiktok_ads__ad_adapter_ad_id__date_day.c70f86f560": [], "test.tiktok_ads.dbt_utils_unique_combination_of_columns_tiktok_ads__ad_group_report_ad_group_id__date_day.2eb4c2ff6d": [], "test.tiktok_ads.dbt_utils_unique_combination_of_columns_tiktok_ads__campaign_report_campaign_id__date_day.cc5f756c69": [], "test.tiktok_ads.not_null_int_tiktok_ads__most_recent_ad_group_ad_group_id.fcb8c561bc": [], "test.tiktok_ads.dbt_utils_unique_combination_of_columns_int_tiktok_ads__most_recent_ad_group_ad_group_id__updated_at.e2e9914076": [], "test.tiktok_ads.not_null_int_tiktok_ads__most_recent_ad_ad_id.14e9c145ca": [], "test.tiktok_ads.dbt_utils_unique_combination_of_columns_int_tiktok_ads__most_recent_ad_ad_id__updated_at.f58d824f65": [], "test.tiktok_ads.not_null_int_tiktok_ads__most_recent_campaign_campaign_id.8cefa8981c": [], "test.tiktok_ads.dbt_utils_unique_combination_of_columns_int_tiktok_ads__most_recent_campaign_campaign_id__updated_at.39077adf71": [], "test.tiktok_ads_source.unique_stg_tiktok_ads__advertiser_advertiser_id.078391ba66": [], "test.tiktok_ads_source.not_null_stg_tiktok_ads__advertiser_advertiser_id.5deab92def": [], "test.tiktok_ads_source.not_null_stg_tiktok_ads__ad_group_history_ad_group_id.04778d7fad": [], "test.tiktok_ads_source.dbt_utils_unique_combination_of_columns_stg_tiktok_ads__ad_group_history_ad_group_id__updated_at.cec78c01de": [], "test.tiktok_ads_source.not_null_stg_tiktok_ads__ad_history_ad_id.4ffd05b23a": [], "test.tiktok_ads_source.dbt_utils_unique_combination_of_columns_stg_tiktok_ads__ad_history_ad_id__updated_at.66b86b4dd1": [], "test.tiktok_ads_source.not_null_stg_tiktok_ads__campaign_history_campaign_id.7f9147d1e1": [], "test.tiktok_ads_source.dbt_utils_unique_combination_of_columns_stg_tiktok_ads__campaign_history_campaign_id__updated_at.72bf07011b": [], "test.tiktok_ads_source.dbt_utils_unique_combination_of_columns_stg_tiktok_ads__ad_report_hourly_ad_id__stat_time_hour.e70f8cef6d": [], "test.tiktok_ads_source.not_null_stg_tiktok_ads__ad_group_report_hourly_ad_group_id.8da17119f1": [], "test.tiktok_ads_source.dbt_utils_unique_combination_of_columns_stg_tiktok_ads__ad_group_report_hourly_ad_group_id__stat_time_hour.1aeaeb71ad": [], "test.tiktok_ads_source.not_null_stg_tiktok_ads__campaign_report_hourly_campaign_id.ef898379fb": [], "test.tiktok_ads_source.dbt_utils_unique_combination_of_columns_stg_tiktok_ads__campaign_report_hourly_campaign_id__stat_time_hour.8e4a1e4b34": [], "source.tiktok_ads_source.tiktok_ads.advertiser": ["model.tiktok_ads_source.stg_tiktok_ads__advertiser_tmp"], "source.tiktok_ads_source.tiktok_ads.campaign_history": ["model.tiktok_ads_source.stg_tiktok_ads__campaign_history_tmp"], "source.tiktok_ads_source.tiktok_ads.adgroup_history": ["model.tiktok_ads_source.stg_tiktok_ads__ad_group_history_tmp"], "source.tiktok_ads_source.tiktok_ads.ad_history": ["model.tiktok_ads_source.stg_tiktok_ads__ad_history_tmp"], "source.tiktok_ads_source.tiktok_ads.ad_report_hourly": ["model.tiktok_ads_source.stg_tiktok_ads__ad_report_hourly_tmp"], "source.tiktok_ads_source.tiktok_ads.campaign_report_hourly": ["model.tiktok_ads_source.stg_tiktok_ads__campaign_report_hourly_tmp"], "source.tiktok_ads_source.tiktok_ads.adgroup_report_hourly": ["model.tiktok_ads_source.stg_tiktok_ads__ad_group_report_hourly_tmp"]}} \ No newline at end of file +{"metadata": {"dbt_schema_version": "https://schemas.getdbt.com/dbt/manifest/v4.json", "dbt_version": "1.0.4", "generated_at": "2022-08-26T20:02:11.120390Z", "invocation_id": "9fdbca68-4741-4af7-99ac-be7d5e1618c0", "env": {}, "project_id": "1569d852c0a4744484a39557ad94feef", "user_id": "8929baf0-9bc1-477e-9a57-eb8b0db4da62", "send_anonymous_usage_stats": true, "adapter_type": "postgres"}, "nodes": {"seed.tiktok_ads_source_integration_tests.tiktok_ad_history_data": {"raw_sql": "", "compiled": true, "resource_type": "seed", "depends_on": {"macros": [], "nodes": []}, "config": {"enabled": true, "alias": null, "schema": null, "database": null, "tags": [], "meta": {}, "materialized": "seed", "persist_docs": {}, "quoting": {}, "column_types": {}, "full_refresh": null, "on_schema_change": "ignore", "quote_columns": false, "post-hook": [], "pre-hook": []}, "database": "postgres", "schema": "tiktok_ads_source_integration_tests_1", "fqn": ["tiktok_ads_source_integration_tests", "tiktok_ad_history_data"], "unique_id": "seed.tiktok_ads_source_integration_tests.tiktok_ad_history_data", "package_name": "tiktok_ads_source_integration_tests", "root_path": "/Users/joseph.markiewicz/Documents/dbt_packages/ad_reporting/tiktok/dbt_tiktok_ads_source/integration_tests", "path": "tiktok_ad_history_data.csv", "original_file_path": "seeds/tiktok_ad_history_data.csv", "name": "tiktok_ad_history_data", "alias": "tiktok_ad_history_data", "checksum": {"name": "sha256", "checksum": "a23cb08122e58b4b6b75a79b8aaec8018ddb0fa2c2091b3755b92ddf12871abf"}, "tags": [], "refs": [], "sources": [], "description": "", "columns": {}, "meta": {}, "docs": {"show": true}, "patch_path": null, "compiled_path": null, "build_path": null, "deferred": false, "unrendered_config": {"quote_columns": "{{ true if target.type == 'redshift' else false }}"}, "created_at": 1661544121.8387089, "compiled_sql": "", "extra_ctes_injected": true, "extra_ctes": [], "relation_name": "\"postgres\".\"tiktok_ads_source_integration_tests_1\".\"tiktok_ad_history_data\""}, "seed.tiktok_ads_source_integration_tests.tiktok_adgroup_report_hourly_data": {"raw_sql": "", "compiled": true, "resource_type": "seed", "depends_on": {"macros": [], "nodes": []}, "config": {"enabled": true, "alias": null, "schema": null, "database": null, "tags": [], "meta": {}, "materialized": "seed", "persist_docs": {}, "quoting": {}, "column_types": {}, "full_refresh": null, "on_schema_change": "ignore", "quote_columns": false, "post-hook": [], "pre-hook": []}, "database": "postgres", "schema": "tiktok_ads_source_integration_tests_1", "fqn": ["tiktok_ads_source_integration_tests", "tiktok_adgroup_report_hourly_data"], "unique_id": "seed.tiktok_ads_source_integration_tests.tiktok_adgroup_report_hourly_data", "package_name": "tiktok_ads_source_integration_tests", "root_path": "/Users/joseph.markiewicz/Documents/dbt_packages/ad_reporting/tiktok/dbt_tiktok_ads_source/integration_tests", "path": "tiktok_adgroup_report_hourly_data.csv", "original_file_path": "seeds/tiktok_adgroup_report_hourly_data.csv", "name": "tiktok_adgroup_report_hourly_data", "alias": "tiktok_adgroup_report_hourly_data", "checksum": {"name": "sha256", "checksum": "c86e47500a8c2bd232e46ba2bd55582f97b17193366c430ff22e55f557ffa5e0"}, "tags": [], "refs": [], "sources": [], "description": "", "columns": {}, "meta": {}, "docs": {"show": true}, "patch_path": null, "compiled_path": null, "build_path": null, "deferred": false, "unrendered_config": {"quote_columns": "{{ true if target.type == 'redshift' else false }}"}, "created_at": 1661544121.84461, "compiled_sql": "", "extra_ctes_injected": true, "extra_ctes": [], "relation_name": "\"postgres\".\"tiktok_ads_source_integration_tests_1\".\"tiktok_adgroup_report_hourly_data\""}, "seed.tiktok_ads_source_integration_tests.tiktok_campaign_history_data": {"raw_sql": "", "compiled": true, "resource_type": "seed", "depends_on": {"macros": [], "nodes": []}, "config": {"enabled": true, "alias": null, "schema": null, "database": null, "tags": [], "meta": {}, "materialized": "seed", "persist_docs": {}, "quoting": {}, "column_types": {}, "full_refresh": null, "on_schema_change": "ignore", "quote_columns": false, "post-hook": [], "pre-hook": []}, "database": "postgres", "schema": "tiktok_ads_source_integration_tests_1", "fqn": ["tiktok_ads_source_integration_tests", "tiktok_campaign_history_data"], "unique_id": "seed.tiktok_ads_source_integration_tests.tiktok_campaign_history_data", "package_name": "tiktok_ads_source_integration_tests", "root_path": "/Users/joseph.markiewicz/Documents/dbt_packages/ad_reporting/tiktok/dbt_tiktok_ads_source/integration_tests", "path": "tiktok_campaign_history_data.csv", "original_file_path": "seeds/tiktok_campaign_history_data.csv", "name": "tiktok_campaign_history_data", "alias": "tiktok_campaign_history_data", "checksum": {"name": "sha256", "checksum": "17b993557179ddbe2864473f23bd7eafd8cae8b87833789478bf0ec162212a4a"}, "tags": [], "refs": [], "sources": [], "description": "", "columns": {}, "meta": {}, "docs": {"show": true}, "patch_path": null, "compiled_path": null, "build_path": null, "deferred": false, "unrendered_config": {"quote_columns": "{{ true if target.type == 'redshift' else false }}"}, "created_at": 1661544121.845644, "compiled_sql": "", "extra_ctes_injected": true, "extra_ctes": [], "relation_name": "\"postgres\".\"tiktok_ads_source_integration_tests_1\".\"tiktok_campaign_history_data\""}, "seed.tiktok_ads_source_integration_tests.tiktok_advertiser_data": {"raw_sql": "", "compiled": true, "resource_type": "seed", "depends_on": {"macros": [], "nodes": []}, "config": {"enabled": true, "alias": null, "schema": null, "database": null, "tags": [], "meta": {}, "materialized": "seed", "persist_docs": {}, "quoting": {}, "column_types": {}, "full_refresh": null, "on_schema_change": "ignore", "quote_columns": false, "post-hook": [], "pre-hook": []}, "database": "postgres", "schema": "tiktok_ads_source_integration_tests_1", "fqn": ["tiktok_ads_source_integration_tests", "tiktok_advertiser_data"], "unique_id": "seed.tiktok_ads_source_integration_tests.tiktok_advertiser_data", "package_name": "tiktok_ads_source_integration_tests", "root_path": "/Users/joseph.markiewicz/Documents/dbt_packages/ad_reporting/tiktok/dbt_tiktok_ads_source/integration_tests", "path": "tiktok_advertiser_data.csv", "original_file_path": "seeds/tiktok_advertiser_data.csv", "name": "tiktok_advertiser_data", "alias": "tiktok_advertiser_data", "checksum": {"name": "sha256", "checksum": "c9469d87d4c4e87caafdefdbd438d6198d07b8bcab1c76d1c4dc155da2a297b3"}, "tags": [], "refs": [], "sources": [], "description": "", "columns": {}, "meta": {}, "docs": {"show": true}, "patch_path": null, "compiled_path": null, "build_path": null, "deferred": false, "unrendered_config": {"quote_columns": "{{ true if target.type == 'redshift' else false }}"}, "created_at": 1661544121.846598, "compiled_sql": "", "extra_ctes_injected": true, "extra_ctes": [], "relation_name": "\"postgres\".\"tiktok_ads_source_integration_tests_1\".\"tiktok_advertiser_data\""}, "seed.tiktok_ads_source_integration_tests.tiktok_ad_report_hourly_data": {"raw_sql": "", "compiled": true, "resource_type": "seed", "depends_on": {"macros": [], "nodes": []}, "config": {"enabled": true, "alias": null, "schema": null, "database": null, "tags": [], "meta": {}, "materialized": "seed", "persist_docs": {}, "quoting": {}, "column_types": {}, "full_refresh": null, "on_schema_change": "ignore", "quote_columns": false, "post-hook": [], "pre-hook": []}, "database": "postgres", "schema": "tiktok_ads_source_integration_tests_1", "fqn": ["tiktok_ads_source_integration_tests", "tiktok_ad_report_hourly_data"], "unique_id": "seed.tiktok_ads_source_integration_tests.tiktok_ad_report_hourly_data", "package_name": "tiktok_ads_source_integration_tests", "root_path": "/Users/joseph.markiewicz/Documents/dbt_packages/ad_reporting/tiktok/dbt_tiktok_ads_source/integration_tests", "path": "tiktok_ad_report_hourly_data.csv", "original_file_path": "seeds/tiktok_ad_report_hourly_data.csv", "name": "tiktok_ad_report_hourly_data", "alias": "tiktok_ad_report_hourly_data", "checksum": {"name": "sha256", "checksum": "2516b0b613f1bf3b57ca99e58b95dff99d8addab29406308800372337fa9b629"}, "tags": [], "refs": [], "sources": [], "description": "", "columns": {}, "meta": {}, "docs": {"show": true}, "patch_path": null, "compiled_path": null, "build_path": null, "deferred": false, "unrendered_config": {"quote_columns": "{{ true if target.type == 'redshift' else false }}"}, "created_at": 1661544121.847664, "compiled_sql": "", "extra_ctes_injected": true, "extra_ctes": [], "relation_name": "\"postgres\".\"tiktok_ads_source_integration_tests_1\".\"tiktok_ad_report_hourly_data\""}, "seed.tiktok_ads_source_integration_tests.tiktok_campaign_report_hourly_data": {"raw_sql": "", "compiled": true, "resource_type": "seed", "depends_on": {"macros": [], "nodes": []}, "config": {"enabled": true, "alias": null, "schema": null, "database": null, "tags": [], "meta": {}, "materialized": "seed", "persist_docs": {}, "quoting": {}, "column_types": {}, "full_refresh": null, "on_schema_change": "ignore", "quote_columns": false, "post-hook": [], "pre-hook": []}, "database": "postgres", "schema": "tiktok_ads_source_integration_tests_1", "fqn": ["tiktok_ads_source_integration_tests", "tiktok_campaign_report_hourly_data"], "unique_id": "seed.tiktok_ads_source_integration_tests.tiktok_campaign_report_hourly_data", "package_name": "tiktok_ads_source_integration_tests", "root_path": "/Users/joseph.markiewicz/Documents/dbt_packages/ad_reporting/tiktok/dbt_tiktok_ads_source/integration_tests", "path": "tiktok_campaign_report_hourly_data.csv", "original_file_path": "seeds/tiktok_campaign_report_hourly_data.csv", "name": "tiktok_campaign_report_hourly_data", "alias": "tiktok_campaign_report_hourly_data", "checksum": {"name": "sha256", "checksum": "01927965b607137c0da80efde5d724a2659046ec9c77d8bbe41245eba08630d3"}, "tags": [], "refs": [], "sources": [], "description": "", "columns": {}, "meta": {}, "docs": {"show": true}, "patch_path": null, "compiled_path": null, "build_path": null, "deferred": false, "unrendered_config": {"quote_columns": "{{ true if target.type == 'redshift' else false }}"}, "created_at": 1661544121.848583, "compiled_sql": "", "extra_ctes_injected": true, "extra_ctes": [], "relation_name": "\"postgres\".\"tiktok_ads_source_integration_tests_1\".\"tiktok_campaign_report_hourly_data\""}, "seed.tiktok_ads_source_integration_tests.tiktok_adgroup_history_data": {"raw_sql": "", "compiled": true, "resource_type": "seed", "depends_on": {"macros": [], "nodes": []}, "config": {"enabled": true, "alias": null, "schema": null, "database": null, "tags": [], "meta": {}, "materialized": "seed", "persist_docs": {}, "quoting": {}, "column_types": {}, "full_refresh": null, "on_schema_change": "ignore", "quote_columns": false, "post-hook": [], "pre-hook": []}, "database": "postgres", "schema": "tiktok_ads_source_integration_tests_1", "fqn": ["tiktok_ads_source_integration_tests", "tiktok_adgroup_history_data"], "unique_id": "seed.tiktok_ads_source_integration_tests.tiktok_adgroup_history_data", "package_name": "tiktok_ads_source_integration_tests", "root_path": "/Users/joseph.markiewicz/Documents/dbt_packages/ad_reporting/tiktok/dbt_tiktok_ads_source/integration_tests", "path": "tiktok_adgroup_history_data.csv", "original_file_path": "seeds/tiktok_adgroup_history_data.csv", "name": "tiktok_adgroup_history_data", "alias": "tiktok_adgroup_history_data", "checksum": {"name": "sha256", "checksum": "d72ca48dd6be2e96faf07d3d03415510691da2a8cca69f7b8a8bb543c04100a5"}, "tags": [], "refs": [], "sources": [], "description": "", "columns": {}, "meta": {}, "docs": {"show": true}, "patch_path": null, "compiled_path": null, "build_path": null, "deferred": false, "unrendered_config": {"quote_columns": "{{ true if target.type == 'redshift' else false }}"}, "created_at": 1661544121.849698, "compiled_sql": "", "extra_ctes_injected": true, "extra_ctes": [], "relation_name": "\"postgres\".\"tiktok_ads_source_integration_tests_1\".\"tiktok_adgroup_history_data\""}, "model.tiktok_ads_source.stg_tiktok_ads__campaign_report_hourly": {"raw_sql": "{{ config(enabled=var('ad_reporting__tiktok_ads_enabled', true)) }}\n\nwith base as (\n\n select *\n from {{ ref('stg_tiktok_ads__campaign_report_hourly_tmp') }}\n), \n\nfields as (\n\n select\n {{\n fivetran_utils.fill_staging_columns(\n source_columns=adapter.get_columns_in_relation(ref('stg_tiktok_ads__campaign_report_hourly_tmp')),\n staging_columns=get_campaign_report_hourly_columns()\n )\n }}\n from base\n), \n\nfinal as (\n\n select \n campaign_id,\n cast(stat_time_hour as {{ dbt_utils.type_timestamp() }}) as stat_time_hour,\n cpc, \n cpm,\n ctr,\n impressions,\n clicks,\n spend,\n reach,\n conversion,\n cost_per_conversion,\n conversion_rate,\n likes,\n comments,\n shares,\n profile_visits,\n follows,\n video_play_actions,\n video_watched_2_s,\n video_watched_6_s,\n video_views_p_25,\n video_views_p_50,\n video_views_p_75,\n average_video_play,\n average_video_play_per_user\n\n {{ fivetran_utils.fill_pass_through_columns('tiktok_ads__campaign_hourly_passthrough_metrics') }}\n \n from fields\n)\n\nselect *\nfrom final", "compiled": true, "resource_type": "model", "depends_on": {"macros": ["macro.tiktok_ads_source.get_campaign_report_hourly_columns", "macro.fivetran_utils.fill_staging_columns", "macro.dbt_utils.type_timestamp", "macro.fivetran_utils.fill_pass_through_columns"], "nodes": ["model.tiktok_ads_source.stg_tiktok_ads__campaign_report_hourly_tmp", "model.tiktok_ads_source.stg_tiktok_ads__campaign_report_hourly_tmp"]}, "config": {"enabled": true, "alias": null, "schema": "stg_tiktok_ads", "database": null, "tags": [], "meta": {}, "materialized": "table", "persist_docs": {}, "quoting": {}, "column_types": {}, "full_refresh": null, "on_schema_change": "ignore", "post-hook": [], "pre-hook": []}, "database": "postgres", "schema": "tiktok_ads_source_integration_tests_1_stg_tiktok_ads", "fqn": ["tiktok_ads_source", "stg_tiktok_ads__campaign_report_hourly"], "unique_id": "model.tiktok_ads_source.stg_tiktok_ads__campaign_report_hourly", "package_name": "tiktok_ads_source", "root_path": "/Users/joseph.markiewicz/Documents/dbt_packages/ad_reporting/tiktok/dbt_tiktok_ads_source/integration_tests/dbt_packages/tiktok_ads_source", "path": "stg_tiktok_ads__campaign_report_hourly.sql", "original_file_path": "models/stg_tiktok_ads__campaign_report_hourly.sql", "name": "stg_tiktok_ads__campaign_report_hourly", "alias": "stg_tiktok_ads__campaign_report_hourly", "checksum": {"name": "sha256", "checksum": "2c2bc92ccb26a7f8380b5b2e5215b7c52e10b3ca4937629549065874793b2293"}, "tags": [], "refs": [["stg_tiktok_ads__campaign_report_hourly_tmp"], ["stg_tiktok_ads__campaign_report_hourly_tmp"]], "sources": [], "description": "Each record represent data for each campaign for each hour.", "columns": {"campaign_id": {"name": "campaign_id", "description": "Campaign id", "meta": {}, "data_type": null, "quote": null, "tags": []}, "stat_time_hour": {"name": "stat_time_hour", "description": "Hour of activity", "meta": {}, "data_type": null, "quote": null, "tags": []}, "cost_per_conversion": {"name": "cost_per_conversion", "description": "The average amount of money you've spent on a conversion. (The total count is calculated based on the time each ad impression occurred.)\n", "meta": {}, "data_type": null, "quote": null, "tags": []}, "cpc": {"name": "cpc", "description": "The average amount of money you've spent on a click.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "video_play_actions": {"name": "video_play_actions", "description": "The number of times your video starts to play. Replays will not be counted.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "conversion_rate": {"name": "conversion_rate", "description": "The percentage of results you received out of all the clicks of your ads. (The total count is calculated based on the time each ad impression occurred.)\n", "meta": {}, "data_type": null, "quote": null, "tags": []}, "video_views_p_75": {"name": "video_views_p_75", "description": "The number of times your video was played at 75% of its length. Replays will not be counted.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "video_views_p_50": {"name": "video_views_p_50", "description": "The number of times your video was played at 50% of its length. Replays will not be counted.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "impressions": {"name": "impressions", "description": "The number of times your ads were on screen.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "comments": {"name": "comments", "description": "The number of comments your video creative received within 1 day of a user seeing a paid ad.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "conversion": {"name": "conversion", "description": "The number of times your ad achieved an outcome, based on the secondary goal you selected. As one campaign may have a number of different secondary goals, this statistic is not supported for campaigns. Please go to ad groups or ads to view. (The total count is calculated based on the time each ad impression occurred.)\n", "meta": {}, "data_type": null, "quote": null, "tags": []}, "shares": {"name": "shares", "description": "The number of shares your video creative received within 1 day of a user seeing a paid ad.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "clicks": {"name": "clicks", "description": "The number of clicks on your ads.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "cost_per_1000_reached": {"name": "cost_per_1000_reached", "description": "The average cost to reach 1,000 unique users. This metric is estimated.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "video_views_p_25": {"name": "video_views_p_25", "description": "The number of times your video was played at 25% of its length. Replays will not be counted.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "reach": {"name": "reach", "description": "The number of unique users who saw your ads at least once. This metric is estimated.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "profile_visits_rate": {"name": "profile_visits_rate", "description": "The rate of profile visits per impression the paid ad drove during the campaign. This metric is only for Boosted TikToks.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "average_video_play": {"name": "average_video_play", "description": "The average time your video was played per single video view, including any time spent replaying the video.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "average_video_play_per_user": {"name": "average_video_play_per_user", "description": "The average time per user your video was played per single video view, including any time spent replaying the video.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "profile_visits": {"name": "profile_visits", "description": "The number of profile visits the ad drove during the campaign. This metric is only for Boosted TikToks.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "cpm": {"name": "cpm", "description": "The average amount of money you've spent per 1,000 impressions.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "ctr": {"name": "ctr", "description": "The percentage of times people saw your ad and performed a click.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "video_watched_2_s": {"name": "video_watched_2_s", "description": "The number of times your video played for at least 2 seconds. Replays will not be counted.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "follows": {"name": "follows", "description": "The number of new followers that were gained within 1 day of a user seeing a paid ad. This metric is only for Boosted TikToks.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "video_watched_6_s": {"name": "video_watched_6_s", "description": "The number of times your video played for at least 6 seconds, or completely played. Replays will not be counted.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "spend": {"name": "spend", "description": "The estimated total amount of money you've spent on your campaign, ad group or ad during its schedule.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "likes": {"name": "likes", "description": "The number of likes your video creative received within 1 day of a user seeing a paid ad.", "meta": {}, "data_type": null, "quote": null, "tags": []}}, "meta": {}, "docs": {"show": true}, "patch_path": "tiktok_ads_source://models/stg_tiktok_ads.yml", "compiled_path": "target/compiled/tiktok_ads_source/models/stg_tiktok_ads__campaign_report_hourly.sql", "build_path": null, "deferred": false, "unrendered_config": {"materialized": "table", "schema": "stg_tiktok_ads", "enabled": true}, "created_at": 1661544122.091248, "compiled_sql": "\n\nwith base as (\n\n select *\n from \"postgres\".\"tiktok_ads_source_integration_tests_1_stg_tiktok_ads\".\"stg_tiktok_ads__campaign_report_hourly_tmp\"\n), \n\nfields as (\n\n select\n \n \n \n campaign_id\n \n as \n \n campaign_id\n \n, \n \n \n average_video_play\n \n as \n \n average_video_play\n \n, \n \n \n average_video_play_per_user\n \n as \n \n average_video_play_per_user\n \n, \n \n \n clicks\n \n as \n \n clicks\n \n, \n \n \n comments\n \n as \n \n comments\n \n, \n \n \n conversion\n \n as \n \n conversion\n \n, \n \n \n conversion_rate\n \n as \n \n conversion_rate\n \n, \n \n \n cost_per_conversion\n \n as \n \n cost_per_conversion\n \n, \n \n \n cpc\n \n as \n \n cpc\n \n, \n \n \n cpm\n \n as \n \n cpm\n \n, \n \n \n ctr\n \n as \n \n ctr\n \n, \n \n \n follows\n \n as \n \n follows\n \n, \n \n \n impressions\n \n as \n \n impressions\n \n, \n \n \n likes\n \n as \n \n likes\n \n, \n \n \n profile_visits\n \n as \n \n profile_visits\n \n, \n \n \n reach\n \n as \n \n reach\n \n, \n \n \n shares\n \n as \n \n shares\n \n, \n \n \n spend\n \n as \n \n spend\n \n, \n \n \n stat_time_hour\n \n as \n \n stat_time_hour\n \n, \n \n \n video_play_actions\n \n as \n \n video_play_actions\n \n, \n \n \n video_views_p_25\n \n as \n \n video_views_p_25\n \n, \n \n \n video_views_p_50\n \n as \n \n video_views_p_50\n \n, \n \n \n video_views_p_75\n \n as \n \n video_views_p_75\n \n, \n \n \n video_watched_2_s\n \n as \n \n video_watched_2_s\n \n, \n \n \n video_watched_6_s\n \n as \n \n video_watched_6_s\n \n\n\n\n from base\n), \n\nfinal as (\n\n select \n campaign_id,\n cast(stat_time_hour as \n timestamp without time zone\n) as stat_time_hour,\n cpc, \n cpm,\n ctr,\n impressions,\n clicks,\n spend,\n reach,\n conversion,\n cost_per_conversion,\n conversion_rate,\n likes,\n comments,\n shares,\n profile_visits,\n follows,\n video_play_actions,\n video_watched_2_s,\n video_watched_6_s,\n video_views_p_25,\n video_views_p_50,\n video_views_p_75,\n average_video_play,\n average_video_play_per_user\n\n \n\n\n\n\n \n from fields\n)\n\nselect *\nfrom final", "extra_ctes_injected": true, "extra_ctes": [], "relation_name": "\"postgres\".\"tiktok_ads_source_integration_tests_1_stg_tiktok_ads\".\"stg_tiktok_ads__campaign_report_hourly\""}, "model.tiktok_ads_source.stg_tiktok_ads__ad_group_report_hourly": {"raw_sql": "{{ config(enabled=var('ad_reporting__tiktok_ads_enabled', true)) }}\n\nwith base as (\n\n select *\n from {{ ref('stg_tiktok_ads__ad_group_report_hourly_tmp') }}\n), \n\nfields as (\n\n select\n {{\n fivetran_utils.fill_staging_columns(\n source_columns=adapter.get_columns_in_relation(ref('stg_tiktok_ads__ad_group_report_hourly_tmp')),\n staging_columns=get_ad_group_report_hourly_columns()\n )\n }}\n from base\n), \n\nfinal as (\n\n select \n adgroup_id as ad_group_id,\n cast(stat_time_hour as {{ dbt_utils.type_timestamp() }}) as stat_time_hour, \n cpc, \n cpm, \n ctr, \n impressions, \n clicks, \n spend, \n reach, \n conversion, \n cost_per_conversion, \n conversion_rate, \n likes, \n comments, \n shares, \n profile_visits,\n follows, \n video_play_actions, \n video_watched_2_s, \n video_watched_6_s, \n video_views_p_25, \n video_views_p_50,\n video_views_p_75, \n average_video_play, \n average_video_play_per_user\n\n {{ fivetran_utils.fill_pass_through_columns('tiktok_ads__ad_group_hourly_passthrough_metrics') }}\n\n from fields\n) \n\nselect *\nfrom final", "compiled": true, "resource_type": "model", "depends_on": {"macros": ["macro.tiktok_ads_source.get_ad_group_report_hourly_columns", "macro.fivetran_utils.fill_staging_columns", "macro.dbt_utils.type_timestamp", "macro.fivetran_utils.fill_pass_through_columns"], "nodes": ["model.tiktok_ads_source.stg_tiktok_ads__ad_group_report_hourly_tmp", "model.tiktok_ads_source.stg_tiktok_ads__ad_group_report_hourly_tmp"]}, "config": {"enabled": true, "alias": null, "schema": "stg_tiktok_ads", "database": null, "tags": [], "meta": {}, "materialized": "table", "persist_docs": {}, "quoting": {}, "column_types": {}, "full_refresh": null, "on_schema_change": "ignore", "post-hook": [], "pre-hook": []}, "database": "postgres", "schema": "tiktok_ads_source_integration_tests_1_stg_tiktok_ads", "fqn": ["tiktok_ads_source", "stg_tiktok_ads__ad_group_report_hourly"], "unique_id": "model.tiktok_ads_source.stg_tiktok_ads__ad_group_report_hourly", "package_name": "tiktok_ads_source", "root_path": "/Users/joseph.markiewicz/Documents/dbt_packages/ad_reporting/tiktok/dbt_tiktok_ads_source/integration_tests/dbt_packages/tiktok_ads_source", "path": "stg_tiktok_ads__ad_group_report_hourly.sql", "original_file_path": "models/stg_tiktok_ads__ad_group_report_hourly.sql", "name": "stg_tiktok_ads__ad_group_report_hourly", "alias": "stg_tiktok_ads__ad_group_report_hourly", "checksum": {"name": "sha256", "checksum": "5d0c1cb8954787126a2141c59e4c8b849fe3c13112073fef2b08c553df4d5ad5"}, "tags": [], "refs": [["stg_tiktok_ads__ad_group_report_hourly_tmp"], ["stg_tiktok_ads__ad_group_report_hourly_tmp"]], "sources": [], "description": "Each record represents data for each ad group for each hour.", "columns": {"ad_group_id": {"name": "ad_group_id", "description": "Ad group id", "meta": {}, "data_type": null, "quote": null, "tags": []}, "stat_time_hour": {"name": "stat_time_hour", "description": "Hour of activity", "meta": {}, "data_type": null, "quote": null, "tags": []}, "cost_per_conversion": {"name": "cost_per_conversion", "description": "The average amount of money you've spent on a conversion. (The total count is calculated based on the time each ad impression occurred.)\n", "meta": {}, "data_type": null, "quote": null, "tags": []}, "cpc": {"name": "cpc", "description": "The average amount of money you've spent on a click.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "video_play_actions": {"name": "video_play_actions", "description": "The number of times your video starts to play. Replays will not be counted.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "conversion_rate": {"name": "conversion_rate", "description": "The percentage of results you received out of all the clicks of your ads. (The total count is calculated based on the time each ad impression occurred.)\n", "meta": {}, "data_type": null, "quote": null, "tags": []}, "video_views_p_75": {"name": "video_views_p_75", "description": "The number of times your video was played at 75% of its length. Replays will not be counted.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "video_views_p_50": {"name": "video_views_p_50", "description": "The number of times your video was played at 50% of its length. Replays will not be counted.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "impressions": {"name": "impressions", "description": "The number of times your ads were on screen.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "comments": {"name": "comments", "description": "The number of comments your video creative received within 1 day of a user seeing a paid ad.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "conversion": {"name": "conversion", "description": "The number of times your ad achieved an outcome, based on the secondary goal you selected. As one campaign may have a number of different secondary goals, this statistic is not supported for campaigns. Please go to ad groups or ads to view. (The total count is calculated based on the time each ad impression occurred.)\n", "meta": {}, "data_type": null, "quote": null, "tags": []}, "shares": {"name": "shares", "description": "The number of shares your video creative received within 1 day of a user seeing a paid ad.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "clicks": {"name": "clicks", "description": "The number of clicks on your ads.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "cost_per_1000_reached": {"name": "cost_per_1000_reached", "description": "The average cost to reach 1,000 unique users. This metric is estimated.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "video_views_p_25": {"name": "video_views_p_25", "description": "The number of times your video was played at 25% of its length. Replays will not be counted.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "reach": {"name": "reach", "description": "The number of unique users who saw your ads at least once. This metric is estimated.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "profile_visits_rate": {"name": "profile_visits_rate", "description": "The rate of profile visits per impression the paid ad drove during the campaign. This metric is only for Boosted TikToks.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "average_video_play": {"name": "average_video_play", "description": "The average time your video was played per single video view, including any time spent replaying the video.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "average_video_play_per_user": {"name": "average_video_play_per_user", "description": "The average time per user your video was played per single video view, including any time spent replaying the video.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "profile_visits": {"name": "profile_visits", "description": "The number of profile visits the ad drove during the campaign. This metric is only for Boosted TikToks.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "cpm": {"name": "cpm", "description": "The average amount of money you've spent per 1,000 impressions.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "ctr": {"name": "ctr", "description": "The percentage of times people saw your ad and performed a click.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "video_watched_2_s": {"name": "video_watched_2_s", "description": "The number of times your video played for at least 2 seconds. Replays will not be counted.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "follows": {"name": "follows", "description": "The number of new followers that were gained within 1 day of a user seeing a paid ad. This metric is only for Boosted TikToks.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "video_watched_6_s": {"name": "video_watched_6_s", "description": "The number of times your video played for at least 6 seconds, or completely played. Replays will not be counted.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "spend": {"name": "spend", "description": "The estimated total amount of money you've spent on your campaign, ad group or ad during its schedule.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "likes": {"name": "likes", "description": "The number of likes your video creative received within 1 day of a user seeing a paid ad.", "meta": {}, "data_type": null, "quote": null, "tags": []}}, "meta": {}, "docs": {"show": true}, "patch_path": "tiktok_ads_source://models/stg_tiktok_ads.yml", "compiled_path": "target/compiled/tiktok_ads_source/models/stg_tiktok_ads__ad_group_report_hourly.sql", "build_path": null, "deferred": false, "unrendered_config": {"materialized": "table", "schema": "stg_tiktok_ads", "enabled": true}, "created_at": 1661544122.0872152, "compiled_sql": "\n\nwith base as (\n\n select *\n from \"postgres\".\"tiktok_ads_source_integration_tests_1_stg_tiktok_ads\".\"stg_tiktok_ads__ad_group_report_hourly_tmp\"\n), \n\nfields as (\n\n select\n \n \n \n adgroup_id\n \n as \n \n adgroup_id\n \n, \n \n \n average_video_play\n \n as \n \n average_video_play\n \n, \n \n \n average_video_play_per_user\n \n as \n \n average_video_play_per_user\n \n, \n \n \n clicks\n \n as \n \n clicks\n \n, \n \n \n comments\n \n as \n \n comments\n \n, \n \n \n conversion\n \n as \n \n conversion\n \n, \n \n \n conversion_rate\n \n as \n \n conversion_rate\n \n, \n \n \n cost_per_conversion\n \n as \n \n cost_per_conversion\n \n, \n \n \n cpc\n \n as \n \n cpc\n \n, \n \n \n cpm\n \n as \n \n cpm\n \n, \n \n \n ctr\n \n as \n \n ctr\n \n, \n \n \n follows\n \n as \n \n follows\n \n, \n \n \n impressions\n \n as \n \n impressions\n \n, \n \n \n likes\n \n as \n \n likes\n \n, \n \n \n profile_visits\n \n as \n \n profile_visits\n \n, \n \n \n reach\n \n as \n \n reach\n \n, \n \n \n shares\n \n as \n \n shares\n \n, \n \n \n spend\n \n as \n \n spend\n \n, \n \n \n stat_time_hour\n \n as \n \n stat_time_hour\n \n, \n \n \n video_play_actions\n \n as \n \n video_play_actions\n \n, \n \n \n video_views_p_25\n \n as \n \n video_views_p_25\n \n, \n \n \n video_views_p_50\n \n as \n \n video_views_p_50\n \n, \n \n \n video_views_p_75\n \n as \n \n video_views_p_75\n \n, \n \n \n video_watched_2_s\n \n as \n \n video_watched_2_s\n \n, \n \n \n video_watched_6_s\n \n as \n \n video_watched_6_s\n \n\n\n\n from base\n), \n\nfinal as (\n\n select \n adgroup_id as ad_group_id,\n cast(stat_time_hour as \n timestamp without time zone\n) as stat_time_hour, \n cpc, \n cpm, \n ctr, \n impressions, \n clicks, \n spend, \n reach, \n conversion, \n cost_per_conversion, \n conversion_rate, \n likes, \n comments, \n shares, \n profile_visits,\n follows, \n video_play_actions, \n video_watched_2_s, \n video_watched_6_s, \n video_views_p_25, \n video_views_p_50,\n video_views_p_75, \n average_video_play, \n average_video_play_per_user\n\n \n\n\n\n\n\n from fields\n) \n\nselect *\nfrom final", "extra_ctes_injected": true, "extra_ctes": [], "relation_name": "\"postgres\".\"tiktok_ads_source_integration_tests_1_stg_tiktok_ads\".\"stg_tiktok_ads__ad_group_report_hourly\""}, "model.tiktok_ads_source.stg_tiktok_ads__ad_group_history": {"raw_sql": "{{ config(enabled=var('ad_reporting__tiktok_ads_enabled', true)) }}\n\nwith base as (\n\n select *\n from {{ ref('stg_tiktok_ads__ad_group_history_tmp') }}\n), \n\nfields as (\n\n select\n {{\n fivetran_utils.fill_staging_columns(\n source_columns=adapter.get_columns_in_relation(ref('stg_tiktok_ads__ad_group_history_tmp')),\n staging_columns=get_ad_group_history_columns()\n )\n }}\n\n from base\n), \n\nfinal as (\n\n select\n adgroup_id as ad_group_id,\n cast(updated_at as {{ dbt_utils.type_timestamp() }}) as updated_at,\n advertiser_id,\n campaign_id,\n action_days,\n action_categories,\n adgroup_name as ad_group_name,\n age,\n audience_type,\n budget,\n category,\n display_name,\n interest_category_v_2 as interest_category,\n frequency,\n frequency_schedule,\n gender,\n languages, \n landing_page_url,\n row_number() over (partition by adgroup_id order by updated_at desc) = 1 as is_most_recent_record\n from fields\n)\n\nselect * \nfrom final", "compiled": true, "resource_type": "model", "depends_on": {"macros": ["macro.tiktok_ads_source.get_ad_group_history_columns", "macro.fivetran_utils.fill_staging_columns", "macro.dbt_utils.type_timestamp"], "nodes": ["model.tiktok_ads_source.stg_tiktok_ads__ad_group_history_tmp", "model.tiktok_ads_source.stg_tiktok_ads__ad_group_history_tmp"]}, "config": {"enabled": true, "alias": null, "schema": "stg_tiktok_ads", "database": null, "tags": [], "meta": {}, "materialized": "table", "persist_docs": {}, "quoting": {}, "column_types": {}, "full_refresh": null, "on_schema_change": "ignore", "post-hook": [], "pre-hook": []}, "database": "postgres", "schema": "tiktok_ads_source_integration_tests_1_stg_tiktok_ads", "fqn": ["tiktok_ads_source", "stg_tiktok_ads__ad_group_history"], "unique_id": "model.tiktok_ads_source.stg_tiktok_ads__ad_group_history", "package_name": "tiktok_ads_source", "root_path": "/Users/joseph.markiewicz/Documents/dbt_packages/ad_reporting/tiktok/dbt_tiktok_ads_source/integration_tests/dbt_packages/tiktok_ads_source", "path": "stg_tiktok_ads__ad_group_history.sql", "original_file_path": "models/stg_tiktok_ads__ad_group_history.sql", "name": "stg_tiktok_ads__ad_group_history", "alias": "stg_tiktok_ads__ad_group_history", "checksum": {"name": "sha256", "checksum": "6f17a6500d8cf7d6eecca042fe00b62ad408285f7716b933ffb34bdf41daf60b"}, "tags": [], "refs": [["stg_tiktok_ads__ad_group_history_tmp"], ["stg_tiktok_ads__ad_group_history_tmp"]], "sources": [], "description": "Each record represents data for each ad group.", "columns": {"ad_group_id": {"name": "ad_group_id", "description": "Ad group ID", "meta": {}, "data_type": null, "quote": null, "tags": []}, "updated_at": {"name": "updated_at", "description": "Time the record was updated.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "advertiser_id": {"name": "advertiser_id", "description": "Advertiser ID", "meta": {}, "data_type": null, "quote": null, "tags": []}, "action_categories": {"name": "action_categories", "description": "IDs of the action categories (behaviors) that you want to target.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "campaign_id": {"name": "campaign_id", "description": "The Ad group's campaign ID.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "action_days": {"name": "action_days", "description": "Action days", "meta": {}, "data_type": null, "quote": null, "tags": []}, "ad_group_name": {"name": "ad_group_name", "description": "Ad group name. Character limit is 512 and cannot contain emoji.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "age": {"name": "age", "description": "Age groups you want to target.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "audience_type": {"name": "audience_type", "description": "Audience Type", "meta": {}, "data_type": null, "quote": null, "tags": []}, "budget": {"name": "budget", "description": "Ad budget. Returns 0.0 when Campaign Budget Optimization (budget_optimize_switch) is on.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "category": {"name": "category", "description": "Ad group category.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "display_name": {"name": "display_name", "description": "Display name of ad group.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "interest_category": {"name": "interest_category", "description": "Interest classification. If the interest is specified, users that do not meet interest target will be excluded during delivery.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "frequency": {"name": "frequency", "description": "frequency, together with frequency_schedule, controls how often people see your ad (only available for REACH ads). For example, frequency = 2 frequency_schedule = 3 means \"show ads no more than twice every 3 day\".\n", "meta": {}, "data_type": null, "quote": null, "tags": []}, "frequency_schedule": {"name": "frequency_schedule", "description": "frequency, together with frequency, controls how often people see your ad (only available for REACH ads).", "meta": {}, "data_type": null, "quote": null, "tags": []}, "gender": {"name": "gender", "description": "Gender that you want to target.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "landing_page_url": {"name": "landing_page_url", "description": "Landing page URL.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "languages": {"name": "languages", "description": "Codes of the languages that you want to target.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "is_most_recent_record": {"name": "is_most_recent_record", "description": "Whether record is the most recent one for this particular grain.", "meta": {}, "data_type": null, "quote": null, "tags": []}}, "meta": {}, "docs": {"show": true}, "patch_path": "tiktok_ads_source://models/stg_tiktok_ads.yml", "compiled_path": "target/compiled/tiktok_ads_source/models/stg_tiktok_ads__ad_group_history.sql", "build_path": null, "deferred": false, "unrendered_config": {"materialized": "table", "schema": "stg_tiktok_ads", "enabled": true}, "created_at": 1661544122.074492, "compiled_sql": "\n\nwith base as (\n\n select *\n from \"postgres\".\"tiktok_ads_source_integration_tests_1_stg_tiktok_ads\".\"stg_tiktok_ads__ad_group_history_tmp\"\n), \n\nfields as (\n\n select\n \n \n \n action_days\n \n as \n \n action_days\n \n, \n \n \n adgroup_id\n \n as \n \n adgroup_id\n \n, \n \n \n adgroup_name\n \n as \n \n adgroup_name\n \n, \n \n \n advertiser_id\n \n as \n \n advertiser_id\n \n, \n \n \n audience_type\n \n as \n \n audience_type\n \n, \n \n \n budget\n \n as \n \n budget\n \n, \n \n \n campaign_id\n \n as \n \n campaign_id\n \n, \n \n \n category\n \n as \n \n category\n \n, \n \n \n display_name\n \n as \n \n display_name\n \n, \n \n \n frequency\n \n as \n \n frequency\n \n, \n \n \n frequency_schedule\n \n as \n \n frequency_schedule\n \n, \n \n \n gender\n \n as \n \n gender\n \n, \n \n \n landing_page_url\n \n as \n \n landing_page_url\n \n, \n \n \n updated_at\n \n as \n \n updated_at\n \n, \n \n \n interest_category_v_2\n \n as \n \n interest_category_v_2\n \n, \n \n \n action_categories\n \n as \n \n action_categories\n \n, \n \n \n age\n \n as \n \n age\n \n, \n \n \n languages\n \n as \n \n languages\n \n\n\n\n\n from base\n), \n\nfinal as (\n\n select\n adgroup_id as ad_group_id,\n cast(updated_at as \n timestamp without time zone\n) as updated_at,\n advertiser_id,\n campaign_id,\n action_days,\n action_categories,\n adgroup_name as ad_group_name,\n age,\n audience_type,\n budget,\n category,\n display_name,\n interest_category_v_2 as interest_category,\n frequency,\n frequency_schedule,\n gender,\n languages, \n landing_page_url,\n row_number() over (partition by adgroup_id order by updated_at desc) = 1 as is_most_recent_record\n from fields\n)\n\nselect * \nfrom final", "extra_ctes_injected": true, "extra_ctes": [], "relation_name": "\"postgres\".\"tiktok_ads_source_integration_tests_1_stg_tiktok_ads\".\"stg_tiktok_ads__ad_group_history\""}, "model.tiktok_ads_source.stg_tiktok_ads__ad_report_hourly": {"raw_sql": "{{ config(enabled=var('ad_reporting__tiktok_ads_enabled', true)) }}\n\nwith base as (\n\n select *\n from {{ ref('stg_tiktok_ads__ad_report_hourly_tmp') }}\n), \n\nfields as (\n\n select\n {{\n fivetran_utils.fill_staging_columns(\n source_columns=adapter.get_columns_in_relation(ref('stg_tiktok_ads__ad_report_hourly_tmp')),\n staging_columns=get_ad_report_hourly_columns()\n )\n }}\n from base\n), \n\nfinal as (\n\n select \n ad_id, \n cast(stat_time_hour as {{ dbt_utils.type_timestamp() }}) as stat_time_hour, \n cpc, \n cpm, \n ctr, \n impressions, \n clicks, \n spend, \n reach, \n conversion, \n cost_per_conversion, \n conversion_rate, \n likes, \n comments, \n shares, \n profile_visits,\n follows, \n video_play_actions, \n video_watched_2_s, \n video_watched_6_s, \n video_views_p_25, \n video_views_p_50,\n video_views_p_75, \n average_video_play, \n average_video_play_per_user\n\n {{ fivetran_utils.fill_pass_through_columns('tiktok_ads__ad_hourly_passthrough_metrics') }}\n from fields\n)\n\nselect * \nfrom final", "compiled": true, "resource_type": "model", "depends_on": {"macros": ["macro.tiktok_ads_source.get_ad_report_hourly_columns", "macro.fivetran_utils.fill_staging_columns", "macro.dbt_utils.type_timestamp", "macro.fivetran_utils.fill_pass_through_columns"], "nodes": ["model.tiktok_ads_source.stg_tiktok_ads__ad_report_hourly_tmp", "model.tiktok_ads_source.stg_tiktok_ads__ad_report_hourly_tmp"]}, "config": {"enabled": true, "alias": null, "schema": "stg_tiktok_ads", "database": null, "tags": [], "meta": {}, "materialized": "table", "persist_docs": {}, "quoting": {}, "column_types": {}, "full_refresh": null, "on_schema_change": "ignore", "post-hook": [], "pre-hook": []}, "database": "postgres", "schema": "tiktok_ads_source_integration_tests_1_stg_tiktok_ads", "fqn": ["tiktok_ads_source", "stg_tiktok_ads__ad_report_hourly"], "unique_id": "model.tiktok_ads_source.stg_tiktok_ads__ad_report_hourly", "package_name": "tiktok_ads_source", "root_path": "/Users/joseph.markiewicz/Documents/dbt_packages/ad_reporting/tiktok/dbt_tiktok_ads_source/integration_tests/dbt_packages/tiktok_ads_source", "path": "stg_tiktok_ads__ad_report_hourly.sql", "original_file_path": "models/stg_tiktok_ads__ad_report_hourly.sql", "name": "stg_tiktok_ads__ad_report_hourly", "alias": "stg_tiktok_ads__ad_report_hourly", "checksum": {"name": "sha256", "checksum": "1f2059be82b502ed2cecb9c75baba870edffc38b0da6eb933fbf28dffaf10a7a"}, "tags": [], "refs": [["stg_tiktok_ads__ad_report_hourly_tmp"], ["stg_tiktok_ads__ad_report_hourly_tmp"]], "sources": [], "description": "Each record represents data for each ad for each hour.", "columns": {"ad_id": {"name": "ad_id", "description": "Ad id", "meta": {}, "data_type": null, "quote": null, "tags": []}, "stat_time_hour": {"name": "stat_time_hour", "description": "Hour of activity", "meta": {}, "data_type": null, "quote": null, "tags": []}, "cost_per_conversion": {"name": "cost_per_conversion", "description": "The average amount of money you've spent on a conversion. (The total count is calculated based on the time each ad impression occurred.)\n", "meta": {}, "data_type": null, "quote": null, "tags": []}, "cpc": {"name": "cpc", "description": "The average amount of money you've spent on a click.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "video_play_actions": {"name": "video_play_actions", "description": "The number of times your video starts to play. Replays will not be counted.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "conversion_rate": {"name": "conversion_rate", "description": "The percentage of results you received out of all the clicks of your ads. (The total count is calculated based on the time each ad impression occurred.)\n", "meta": {}, "data_type": null, "quote": null, "tags": []}, "video_views_p_75": {"name": "video_views_p_75", "description": "The number of times your video was played at 75% of its length. Replays will not be counted.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "video_views_p_50": {"name": "video_views_p_50", "description": "The number of times your video was played at 50% of its length. Replays will not be counted.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "impressions": {"name": "impressions", "description": "The number of times your ads were on screen.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "comments": {"name": "comments", "description": "The number of comments your video creative received within 1 day of a user seeing a paid ad.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "conversion": {"name": "conversion", "description": "The number of times your ad achieved an outcome, based on the secondary goal you selected. As one campaign may have a number of different secondary goals, this statistic is not supported for campaigns. Please go to ad groups or ads to view. (The total count is calculated based on the time each ad impression occurred.)\n", "meta": {}, "data_type": null, "quote": null, "tags": []}, "shares": {"name": "shares", "description": "The number of shares your video creative received within 1 day of a user seeing a paid ad.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "clicks": {"name": "clicks", "description": "The number of clicks on your ads.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "cost_per_1000_reached": {"name": "cost_per_1000_reached", "description": "The average cost to reach 1,000 unique users. This metric is estimated.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "video_views_p_25": {"name": "video_views_p_25", "description": "The number of times your video was played at 25% of its length. Replays will not be counted.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "reach": {"name": "reach", "description": "The number of unique users who saw your ads at least once. This metric is estimated.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "profile_visits_rate": {"name": "profile_visits_rate", "description": "The rate of profile visits per impression the paid ad drove during the campaign. This metric is only for Boosted TikToks.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "average_video_play": {"name": "average_video_play", "description": "The average time your video was played per single video view, including any time spent replaying the video.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "average_video_play_per_user": {"name": "average_video_play_per_user", "description": "The average time per user your video was played per single video view, including any time spent replaying the video.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "profile_visits": {"name": "profile_visits", "description": "The number of profile visits the ad drove during the campaign. This metric is only for Boosted TikToks.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "cpm": {"name": "cpm", "description": "The average amount of money you've spent per 1,000 impressions.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "ctr": {"name": "ctr", "description": "The percentage of times people saw your ad and performed a click.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "video_watched_2_s": {"name": "video_watched_2_s", "description": "The number of times your video played for at least 2 seconds. Replays will not be counted.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "follows": {"name": "follows", "description": "The number of new followers that were gained within 1 day of a user seeing a paid ad. This metric is only for Boosted TikToks.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "video_watched_6_s": {"name": "video_watched_6_s", "description": "The number of times your video played for at least 6 seconds, or completely played. Replays will not be counted.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "spend": {"name": "spend", "description": "The estimated total amount of money you've spent on your campaign, ad group or ad during its schedule.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "likes": {"name": "likes", "description": "The number of likes your video creative received within 1 day of a user seeing a paid ad.", "meta": {}, "data_type": null, "quote": null, "tags": []}}, "meta": {}, "docs": {"show": true}, "patch_path": "tiktok_ads_source://models/stg_tiktok_ads.yml", "compiled_path": "target/compiled/tiktok_ads_source/models/stg_tiktok_ads__ad_report_hourly.sql", "build_path": null, "deferred": false, "unrendered_config": {"materialized": "table", "schema": "stg_tiktok_ads", "enabled": true}, "created_at": 1661544122.082569, "compiled_sql": "\n\nwith base as (\n\n select *\n from \"postgres\".\"tiktok_ads_source_integration_tests_1_stg_tiktok_ads\".\"stg_tiktok_ads__ad_report_hourly_tmp\"\n), \n\nfields as (\n\n select\n \n \n \n ad_id\n \n as \n \n ad_id\n \n, \n \n \n average_video_play\n \n as \n \n average_video_play\n \n, \n \n \n average_video_play_per_user\n \n as \n \n average_video_play_per_user\n \n, \n \n \n clicks\n \n as \n \n clicks\n \n, \n \n \n comments\n \n as \n \n comments\n \n, \n \n \n conversion\n \n as \n \n conversion\n \n, \n \n \n conversion_rate\n \n as \n \n conversion_rate\n \n, \n \n \n cost_per_conversion\n \n as \n \n cost_per_conversion\n \n, \n \n \n cpc\n \n as \n \n cpc\n \n, \n \n \n cpm\n \n as \n \n cpm\n \n, \n \n \n ctr\n \n as \n \n ctr\n \n, \n \n \n follows\n \n as \n \n follows\n \n, \n \n \n impressions\n \n as \n \n impressions\n \n, \n \n \n likes\n \n as \n \n likes\n \n, \n \n \n profile_visits\n \n as \n \n profile_visits\n \n, \n \n \n reach\n \n as \n \n reach\n \n, \n \n \n shares\n \n as \n \n shares\n \n, \n \n \n spend\n \n as \n \n spend\n \n, \n \n \n stat_time_hour\n \n as \n \n stat_time_hour\n \n, \n \n \n video_play_actions\n \n as \n \n video_play_actions\n \n, \n \n \n video_views_p_25\n \n as \n \n video_views_p_25\n \n, \n \n \n video_views_p_50\n \n as \n \n video_views_p_50\n \n, \n \n \n video_views_p_75\n \n as \n \n video_views_p_75\n \n, \n \n \n video_watched_2_s\n \n as \n \n video_watched_2_s\n \n, \n \n \n video_watched_6_s\n \n as \n \n video_watched_6_s\n \n\n\n\n from base\n), \n\nfinal as (\n\n select \n ad_id, \n cast(stat_time_hour as \n timestamp without time zone\n) as stat_time_hour, \n cpc, \n cpm, \n ctr, \n impressions, \n clicks, \n spend, \n reach, \n conversion, \n cost_per_conversion, \n conversion_rate, \n likes, \n comments, \n shares, \n profile_visits,\n follows, \n video_play_actions, \n video_watched_2_s, \n video_watched_6_s, \n video_views_p_25, \n video_views_p_50,\n video_views_p_75, \n average_video_play, \n average_video_play_per_user\n\n \n\n\n\n\n from fields\n)\n\nselect * \nfrom final", "extra_ctes_injected": true, "extra_ctes": [], "relation_name": "\"postgres\".\"tiktok_ads_source_integration_tests_1_stg_tiktok_ads\".\"stg_tiktok_ads__ad_report_hourly\""}, "model.tiktok_ads_source.stg_tiktok_ads__advertiser": {"raw_sql": "{{ config(enabled=var('ad_reporting__tiktok_ads_enabled', true)) }}\n\nwith base as (\n\n select *\n from {{ ref('stg_tiktok_ads__advertiser_tmp') }}\n), \n\nfields as (\n\n select\n {{\n fivetran_utils.fill_staging_columns(\n source_columns=adapter.get_columns_in_relation(ref('stg_tiktok_ads__advertiser_tmp')),\n staging_columns=get_advertiser_columns()\n )\n }}\n\n from base\n),\n\nfinal as (\n\n select \n id as advertiser_id, \n address, \n balance, \n company, \n contacter, \n country, \n currency, \n description, \n email, \n industry, \n language,\n name as advertiser_name, \n phone_number, \n telephone, \n timezone\n from fields\n)\n\nselect *\nfrom final", "compiled": true, "resource_type": "model", "depends_on": {"macros": ["macro.tiktok_ads_source.get_advertiser_columns", "macro.fivetran_utils.fill_staging_columns"], "nodes": ["model.tiktok_ads_source.stg_tiktok_ads__advertiser_tmp", "model.tiktok_ads_source.stg_tiktok_ads__advertiser_tmp"]}, "config": {"enabled": true, "alias": null, "schema": "stg_tiktok_ads", "database": null, "tags": [], "meta": {}, "materialized": "table", "persist_docs": {}, "quoting": {}, "column_types": {}, "full_refresh": null, "on_schema_change": "ignore", "post-hook": [], "pre-hook": []}, "database": "postgres", "schema": "tiktok_ads_source_integration_tests_1_stg_tiktok_ads", "fqn": ["tiktok_ads_source", "stg_tiktok_ads__advertiser"], "unique_id": "model.tiktok_ads_source.stg_tiktok_ads__advertiser", "package_name": "tiktok_ads_source", "root_path": "/Users/joseph.markiewicz/Documents/dbt_packages/ad_reporting/tiktok/dbt_tiktok_ads_source/integration_tests/dbt_packages/tiktok_ads_source", "path": "stg_tiktok_ads__advertiser.sql", "original_file_path": "models/stg_tiktok_ads__advertiser.sql", "name": "stg_tiktok_ads__advertiser", "alias": "stg_tiktok_ads__advertiser", "checksum": {"name": "sha256", "checksum": "759a97a786242ecdb350f1852e0861bbeae8218dc19a4047fee98c96ea0ba8be"}, "tags": [], "refs": [["stg_tiktok_ads__advertiser_tmp"], ["stg_tiktok_ads__advertiser_tmp"]], "sources": [], "description": "Each record represents data for each advertiser.", "columns": {"advertiser_id": {"name": "advertiser_id", "description": "Advertiser ID", "meta": {}, "data_type": null, "quote": null, "tags": []}, "address": {"name": "address", "description": "Advertiser address information", "meta": {}, "data_type": null, "quote": null, "tags": []}, "balance": {"name": "balance", "description": "Account available balance", "meta": {}, "data_type": null, "quote": null, "tags": []}, "company": {"name": "company", "description": "Advertiser's company name", "meta": {}, "data_type": null, "quote": null, "tags": []}, "contacter": {"name": "contacter", "description": "Contact Person", "meta": {}, "data_type": null, "quote": null, "tags": []}, "country": {"name": "country", "description": "The advertiser's country", "meta": {}, "data_type": null, "quote": null, "tags": []}, "create_time": {"name": "create_time", "description": "Advertiser's create time", "meta": {}, "data_type": null, "quote": null, "tags": []}, "currency": {"name": "currency", "description": "Type of currency used by advertisers", "meta": {}, "data_type": null, "quote": null, "tags": []}, "description": {"name": "description", "description": "Brand description, i.e. promotional content", "meta": {}, "data_type": null, "quote": null, "tags": []}, "email": {"name": "email", "description": "Advertiser contact email, desensitised data", "meta": {}, "data_type": null, "quote": null, "tags": []}, "industry": {"name": "industry", "description": "Advertiser industry category", "meta": {}, "data_type": null, "quote": null, "tags": []}, "language": {"name": "language", "description": "Language used by advertisers", "meta": {}, "data_type": null, "quote": null, "tags": []}, "license_no": {"name": "license_no", "description": "License number", "meta": {}, "data_type": null, "quote": null, "tags": []}, "license_url": {"name": "license_url", "description": "License preview address, the link is valid for an hour by default.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "advertiser_name": {"name": "advertiser_name", "description": "Advertiser name", "meta": {}, "data_type": null, "quote": null, "tags": []}, "phone_number": {"name": "phone_number", "description": "Contact mobile number, desensitised data", "meta": {}, "data_type": null, "quote": null, "tags": []}, "telephone": {"name": "telephone", "description": "Fixed phone number, desensitised data", "meta": {}, "data_type": null, "quote": null, "tags": []}, "timezone": {"name": "timezone", "description": "Ad account time zone including GMT offset", "meta": {}, "data_type": null, "quote": null, "tags": []}}, "meta": {}, "docs": {"show": true}, "patch_path": "tiktok_ads_source://models/stg_tiktok_ads.yml", "compiled_path": "target/compiled/tiktok_ads_source/models/stg_tiktok_ads__advertiser.sql", "build_path": null, "deferred": false, "unrendered_config": {"materialized": "table", "schema": "stg_tiktok_ads", "enabled": true}, "created_at": 1661544122.071532, "compiled_sql": "\n\nwith base as (\n\n select *\n from \"postgres\".\"tiktok_ads_source_integration_tests_1_stg_tiktok_ads\".\"stg_tiktok_ads__advertiser_tmp\"\n), \n\nfields as (\n\n select\n \n \n \n address\n \n as \n \n address\n \n, \n \n \n balance\n \n as \n \n balance\n \n, \n \n \n company\n \n as \n \n company\n \n, \n \n \n contacter\n \n as \n \n contacter\n \n, \n \n \n country\n \n as \n \n country\n \n, \n \n \n currency\n \n as \n \n currency\n \n, \n \n \n description\n \n as \n \n description\n \n, \n \n \n email\n \n as \n \n email\n \n, \n \n \n id\n \n as \n \n id\n \n, \n \n \n industry\n \n as \n \n industry\n \n, \n \n \n language\n \n as \n \n language\n \n, \n \n \n name\n \n as \n \n name\n \n, \n \n \n phone_number\n \n as \n \n phone_number\n \n, \n \n \n telephone\n \n as \n \n telephone\n \n, \n \n \n timezone\n \n as \n \n timezone\n \n\n\n\n\n from base\n),\n\nfinal as (\n\n select \n id as advertiser_id, \n address, \n balance, \n company, \n contacter, \n country, \n currency, \n description, \n email, \n industry, \n language,\n name as advertiser_name, \n phone_number, \n telephone, \n timezone\n from fields\n)\n\nselect *\nfrom final", "extra_ctes_injected": true, "extra_ctes": [], "relation_name": "\"postgres\".\"tiktok_ads_source_integration_tests_1_stg_tiktok_ads\".\"stg_tiktok_ads__advertiser\""}, "model.tiktok_ads_source.stg_tiktok_ads__ad_history": {"raw_sql": "{{ config(enabled=var('ad_reporting__tiktok_ads_enabled', true)) }}\n\nwith base as (\n\n select *\n from {{ ref('stg_tiktok_ads__ad_history_tmp') }}\n), \n\nfields as (\n\n select\n {{\n fivetran_utils.fill_staging_columns(\n source_columns=adapter.get_columns_in_relation(ref('stg_tiktok_ads__ad_history_tmp')),\n staging_columns=get_ad_history_columns()\n )\n }}\n\n from base\n), \n\nfinal as (\n\n select \n ad_id,\n cast(updated_at as {{ dbt_utils.type_timestamp() }}) as updated_at,\n adgroup_id as ad_group_id,\n advertiser_id,\n campaign_id,\n ad_name,\n call_to_action,\n click_tracking_url,\n impression_tracking_url,\n {{ dbt_utils.split_part('landing_page_url', \"'?'\", 1) }} as base_url,\n {{ dbt_utils.get_url_host('landing_page_url') }} as url_host,\n '/' || {{ dbt_utils.get_url_path('landing_page_url') }} as url_path,\n {{ dbt_utils.get_url_parameter('landing_page_url', 'utm_source') }} as utm_source,\n {{ dbt_utils.get_url_parameter('landing_page_url', 'utm_medium') }} as utm_medium,\n {{ dbt_utils.get_url_parameter('landing_page_url', 'utm_campaign') }} as utm_campaign,\n {{ dbt_utils.get_url_parameter('landing_page_url', 'utm_content') }} as utm_content,\n {{ dbt_utils.get_url_parameter('landing_page_url', 'utm_term') }} as utm_term,\n landing_page_url,\n row_number() over (partition by ad_id order by updated_at desc) = 1 as is_most_recent_record\n from fields\n)\n\nselect * \nfrom final", "compiled": true, "resource_type": "model", "depends_on": {"macros": ["macro.tiktok_ads_source.get_ad_history_columns", "macro.fivetran_utils.fill_staging_columns", "macro.dbt_utils.type_timestamp", "macro.dbt_utils.split_part", "macro.dbt_utils.get_url_host", "macro.dbt_utils.get_url_path", "macro.dbt_utils.get_url_parameter"], "nodes": ["model.tiktok_ads_source.stg_tiktok_ads__ad_history_tmp", "model.tiktok_ads_source.stg_tiktok_ads__ad_history_tmp"]}, "config": {"enabled": true, "alias": null, "schema": "stg_tiktok_ads", "database": null, "tags": [], "meta": {}, "materialized": "table", "persist_docs": {}, "quoting": {}, "column_types": {}, "full_refresh": null, "on_schema_change": "ignore", "post-hook": [], "pre-hook": []}, "database": "postgres", "schema": "tiktok_ads_source_integration_tests_1_stg_tiktok_ads", "fqn": ["tiktok_ads_source", "stg_tiktok_ads__ad_history"], "unique_id": "model.tiktok_ads_source.stg_tiktok_ads__ad_history", "package_name": "tiktok_ads_source", "root_path": "/Users/joseph.markiewicz/Documents/dbt_packages/ad_reporting/tiktok/dbt_tiktok_ads_source/integration_tests/dbt_packages/tiktok_ads_source", "path": "stg_tiktok_ads__ad_history.sql", "original_file_path": "models/stg_tiktok_ads__ad_history.sql", "name": "stg_tiktok_ads__ad_history", "alias": "stg_tiktok_ads__ad_history", "checksum": {"name": "sha256", "checksum": "5053436d29ee6e8509235feb281623ffe08680916c5aabb03638be0c21f9ec60"}, "tags": [], "refs": [["stg_tiktok_ads__ad_history_tmp"], ["stg_tiktok_ads__ad_history_tmp"]], "sources": [], "description": "Each record represents data for each ad.", "columns": {"ad_id": {"name": "ad_id", "description": "Ad ID", "meta": {}, "data_type": null, "quote": null, "tags": []}, "updated_at": {"name": "updated_at", "description": "Time the record was updated.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "ad_group_id": {"name": "ad_group_id", "description": "Ad group ID", "meta": {}, "data_type": null, "quote": null, "tags": []}, "advertiser_id": {"name": "advertiser_id", "description": "Advertiser ID", "meta": {}, "data_type": null, "quote": null, "tags": []}, "base_url": {"name": "base_url", "description": "The base URL of the ad, extracted from the `landing page url`.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "campaign_id": {"name": "campaign_id", "description": "Campaign ID", "meta": {}, "data_type": null, "quote": null, "tags": []}, "ad_name": {"name": "ad_name", "description": "Ad Name.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "call_to_action": {"name": "call_to_action", "description": "Call to action values.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "click_tracking_url": {"name": "click_tracking_url", "description": "Click monitoring URL.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "impression_tracking_url": {"name": "impression_tracking_url", "description": "Display monitoring URL.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "landing_page_url": {"name": "landing_page_url", "description": "Landing page URL.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "url_host": {"name": "url_host", "description": "The URL host of the ad, extracted from the `landing_page_url`.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "url_path": {"name": "url_path", "description": "The URL path of the ad, extracted from the `landing_page_url`.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "utm_source": {"name": "utm_source", "description": "The utm_source parameter of the ad, extracted from the `landing_page_url`.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "utm_medium": {"name": "utm_medium", "description": "The utm_medium parameter of the ad, extracted from the `landing_page_url`.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "utm_campaign": {"name": "utm_campaign", "description": "The utm_campaign parameter of the ad, extracted from the `landing_page_url`.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "utm_content": {"name": "utm_content", "description": "The utm_content parameter of the ad, extracted from the `landing_page_url`.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "utm_term": {"name": "utm_term", "description": "The utm_term parameter of the ad, extracted from the `landing_page_url`.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "is_most_recent_record": {"name": "is_most_recent_record", "description": "Whether record is the most recent one for this particular grain.", "meta": {}, "data_type": null, "quote": null, "tags": []}}, "meta": {}, "docs": {"show": true}, "patch_path": "tiktok_ads_source://models/stg_tiktok_ads.yml", "compiled_path": "target/compiled/tiktok_ads_source/models/stg_tiktok_ads__ad_history.sql", "build_path": null, "deferred": false, "unrendered_config": {"materialized": "table", "schema": "stg_tiktok_ads", "enabled": true}, "created_at": 1661544122.0773308, "compiled_sql": "\n\nwith base as (\n\n select *\n from \"postgres\".\"tiktok_ads_source_integration_tests_1_stg_tiktok_ads\".\"stg_tiktok_ads__ad_history_tmp\"\n), \n\nfields as (\n\n select\n \n \n \n ad_id\n \n as \n \n ad_id\n \n, \n \n \n ad_name\n \n as \n \n ad_name\n \n, \n \n \n adgroup_id\n \n as \n \n adgroup_id\n \n, \n \n \n advertiser_id\n \n as \n \n advertiser_id\n \n, \n \n \n call_to_action\n \n as \n \n call_to_action\n \n, \n \n \n campaign_id\n \n as \n \n campaign_id\n \n, \n \n \n click_tracking_url\n \n as \n \n click_tracking_url\n \n, \n \n \n impression_tracking_url\n \n as \n \n impression_tracking_url\n \n, \n \n \n landing_page_url\n \n as \n \n landing_page_url\n \n, \n \n \n updated_at\n \n as \n \n updated_at\n \n\n\n\n\n from base\n), \n\nfinal as (\n\n select \n ad_id,\n cast(updated_at as \n timestamp without time zone\n) as updated_at,\n adgroup_id as ad_group_id,\n advertiser_id,\n campaign_id,\n ad_name,\n call_to_action,\n click_tracking_url,\n impression_tracking_url,\n \n\n \n \n\n split_part(\n landing_page_url,\n '?',\n 1\n )\n\n\n \n\n as base_url,\n \n \n cast(\n\n \n \n\n split_part(\n \n\n \n \n\n split_part(\n \n\n replace(\n \n\n replace(\n \n\n replace(\n landing_page_url,\n 'android-app://',\n ''\n )\n \n\n,\n 'http://',\n ''\n )\n \n\n,\n 'https://',\n ''\n )\n \n\n,\n '/',\n 1\n )\n\n\n \n\n,\n '?',\n 1\n )\n\n\n \n\n as \n varchar\n)\n as url_host,\n '/' || \n \n cast(\n\n \n \n\n split_part(\n \n\n right(\n \n\n replace(\n \n\n replace(\n landing_page_url,\n 'http://',\n ''\n )\n \n\n,\n 'https://',\n ''\n )\n \n\n,\n \n \n length(\n \n\n replace(\n \n\n replace(\n landing_page_url,\n 'http://',\n ''\n )\n \n\n,\n 'https://',\n ''\n )\n \n\n\n )-coalesce(\n nullif(\n\n position(\n '/' in \n\n replace(\n \n\n replace(\n landing_page_url,\n 'http://',\n ''\n )\n \n\n,\n 'https://',\n ''\n )\n \n\n\n ), 0),\n \n\n position(\n '?' in \n\n replace(\n \n\n replace(\n landing_page_url,\n 'http://',\n ''\n )\n \n\n,\n 'https://',\n ''\n )\n \n\n\n ) - 1\n )\n ),\n '?',\n 1\n )\n\n\n \n\n as \n varchar\n)\n as url_path,\n nullif(\n\n \n \n\n split_part(\n \n\n \n \n\n split_part(\n landing_page_url,\n 'utm_source=',\n 2\n )\n\n\n \n\n,\n '&',\n 1\n )\n\n\n \n\n,'') as utm_source,\n nullif(\n\n \n \n\n split_part(\n \n\n \n \n\n split_part(\n landing_page_url,\n 'utm_medium=',\n 2\n )\n\n\n \n\n,\n '&',\n 1\n )\n\n\n \n\n,'') as utm_medium,\n nullif(\n\n \n \n\n split_part(\n \n\n \n \n\n split_part(\n landing_page_url,\n 'utm_campaign=',\n 2\n )\n\n\n \n\n,\n '&',\n 1\n )\n\n\n \n\n,'') as utm_campaign,\n nullif(\n\n \n \n\n split_part(\n \n\n \n \n\n split_part(\n landing_page_url,\n 'utm_content=',\n 2\n )\n\n\n \n\n,\n '&',\n 1\n )\n\n\n \n\n,'') as utm_content,\n nullif(\n\n \n \n\n split_part(\n \n\n \n \n\n split_part(\n landing_page_url,\n 'utm_term=',\n 2\n )\n\n\n \n\n,\n '&',\n 1\n )\n\n\n \n\n,'') as utm_term,\n landing_page_url,\n row_number() over (partition by ad_id order by updated_at desc) = 1 as is_most_recent_record\n from fields\n)\n\nselect * \nfrom final", "extra_ctes_injected": true, "extra_ctes": [], "relation_name": "\"postgres\".\"tiktok_ads_source_integration_tests_1_stg_tiktok_ads\".\"stg_tiktok_ads__ad_history\""}, "model.tiktok_ads_source.stg_tiktok_ads__campaign_history": {"raw_sql": "{{ config(enabled=var('ad_reporting__tiktok_ads_enabled', true)) }}\n\nwith base as (\n\n select *\n from {{ ref('stg_tiktok_ads__campaign_history_tmp') }}\n), \n\nfields as (\n\n select\n {{\n fivetran_utils.fill_staging_columns(\n source_columns=adapter.get_columns_in_relation(ref('stg_tiktok_ads__campaign_history_tmp')),\n staging_columns=get_campaign_history_columns()\n )\n }}\n from base\n), \n\nfinal as (\n\n select \n campaign_id,\n cast(updated_at as {{ dbt_utils.type_timestamp() }}) as updated_at,\n advertiser_id,\n campaign_name,\n campaign_type,\n split_test_variable,\n row_number() over (partition by campaign_id order by updated_at desc) = 1 as is_most_recent_record\n from fields\n)\n\nselect *\nfrom final", "compiled": true, "resource_type": "model", "depends_on": {"macros": ["macro.tiktok_ads_source.get_campaign_history_columns", "macro.fivetran_utils.fill_staging_columns", "macro.dbt_utils.type_timestamp"], "nodes": ["model.tiktok_ads_source.stg_tiktok_ads__campaign_history_tmp", "model.tiktok_ads_source.stg_tiktok_ads__campaign_history_tmp"]}, "config": {"enabled": true, "alias": null, "schema": "stg_tiktok_ads", "database": null, "tags": [], "meta": {}, "materialized": "table", "persist_docs": {}, "quoting": {}, "column_types": {}, "full_refresh": null, "on_schema_change": "ignore", "post-hook": [], "pre-hook": []}, "database": "postgres", "schema": "tiktok_ads_source_integration_tests_1_stg_tiktok_ads", "fqn": ["tiktok_ads_source", "stg_tiktok_ads__campaign_history"], "unique_id": "model.tiktok_ads_source.stg_tiktok_ads__campaign_history", "package_name": "tiktok_ads_source", "root_path": "/Users/joseph.markiewicz/Documents/dbt_packages/ad_reporting/tiktok/dbt_tiktok_ads_source/integration_tests/dbt_packages/tiktok_ads_source", "path": "stg_tiktok_ads__campaign_history.sql", "original_file_path": "models/stg_tiktok_ads__campaign_history.sql", "name": "stg_tiktok_ads__campaign_history", "alias": "stg_tiktok_ads__campaign_history", "checksum": {"name": "sha256", "checksum": "16c836c95f7cc17d3baf3e4ac360fbde750e492f12a828db8c5850068f96a30e"}, "tags": [], "refs": [["stg_tiktok_ads__campaign_history_tmp"], ["stg_tiktok_ads__campaign_history_tmp"]], "sources": [], "description": "Each record represents data for each campaign.", "columns": {"campaign_id": {"name": "campaign_id", "description": "Campaign ID", "meta": {}, "data_type": null, "quote": null, "tags": []}, "updated_at": {"name": "updated_at", "description": "Time the record was updated.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "advertiser_id": {"name": "advertiser_id", "description": "Advertiser ID", "meta": {}, "data_type": null, "quote": null, "tags": []}, "campaign_name": {"name": "campaign_name", "description": "Campaign name", "meta": {}, "data_type": null, "quote": null, "tags": []}, "campaign_type": {"name": "campaign_type", "description": "Campaign Type, indicates the campaign is a regular campaign or iOS 14 campaign.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "split_test_variable": {"name": "split_test_variable", "description": "Split Test variables. Optional values; TARGETING, BIDDING_OPTIMIZATION , CREATIVE.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "is_most_recent_record": {"name": "is_most_recent_record", "description": "Whether record is the most recent one for this particular grain.", "meta": {}, "data_type": null, "quote": null, "tags": []}}, "meta": {}, "docs": {"show": true}, "patch_path": "tiktok_ads_source://models/stg_tiktok_ads.yml", "compiled_path": "target/compiled/tiktok_ads_source/models/stg_tiktok_ads__campaign_history.sql", "build_path": null, "deferred": false, "unrendered_config": {"materialized": "table", "schema": "stg_tiktok_ads", "enabled": true}, "created_at": 1661544122.078624, "compiled_sql": "\n\nwith base as (\n\n select *\n from \"postgres\".\"tiktok_ads_source_integration_tests_1_stg_tiktok_ads\".\"stg_tiktok_ads__campaign_history_tmp\"\n), \n\nfields as (\n\n select\n \n \n \n advertiser_id\n \n as \n \n advertiser_id\n \n, \n \n \n campaign_id\n \n as \n \n campaign_id\n \n, \n \n \n campaign_name\n \n as \n \n campaign_name\n \n, \n \n \n campaign_type\n \n as \n \n campaign_type\n \n, \n \n \n split_test_variable\n \n as \n \n split_test_variable\n \n, \n \n \n updated_at\n \n as \n \n updated_at\n \n\n\n\n from base\n), \n\nfinal as (\n\n select \n campaign_id,\n cast(updated_at as \n timestamp without time zone\n) as updated_at,\n advertiser_id,\n campaign_name,\n campaign_type,\n split_test_variable,\n row_number() over (partition by campaign_id order by updated_at desc) = 1 as is_most_recent_record\n from fields\n)\n\nselect *\nfrom final", "extra_ctes_injected": true, "extra_ctes": [], "relation_name": "\"postgres\".\"tiktok_ads_source_integration_tests_1_stg_tiktok_ads\".\"stg_tiktok_ads__campaign_history\""}, "model.tiktok_ads_source.stg_tiktok_ads__ad_report_hourly_tmp": {"raw_sql": "{{ config(enabled=var('ad_reporting__tiktok_ads_enabled', true)) }}\n\nselect *\nfrom {{ var('ad_report_hourly') }}", "compiled": true, "resource_type": "model", "depends_on": {"macros": [], "nodes": ["source.tiktok_ads_source.tiktok_ads.ad_report_hourly"]}, "config": {"enabled": true, "alias": null, "schema": "stg_tiktok_ads", "database": null, "tags": [], "meta": {}, "materialized": "view", "persist_docs": {}, "quoting": {}, "column_types": {}, "full_refresh": null, "on_schema_change": "ignore", "post-hook": [], "pre-hook": []}, "database": "postgres", "schema": "tiktok_ads_source_integration_tests_1_stg_tiktok_ads", "fqn": ["tiktok_ads_source", "tmp", "stg_tiktok_ads__ad_report_hourly_tmp"], "unique_id": "model.tiktok_ads_source.stg_tiktok_ads__ad_report_hourly_tmp", "package_name": "tiktok_ads_source", "root_path": "/Users/joseph.markiewicz/Documents/dbt_packages/ad_reporting/tiktok/dbt_tiktok_ads_source/integration_tests/dbt_packages/tiktok_ads_source", "path": "tmp/stg_tiktok_ads__ad_report_hourly_tmp.sql", "original_file_path": "models/tmp/stg_tiktok_ads__ad_report_hourly_tmp.sql", "name": "stg_tiktok_ads__ad_report_hourly_tmp", "alias": "stg_tiktok_ads__ad_report_hourly_tmp", "checksum": {"name": "sha256", "checksum": "30949b79355e85af66a3df6de9ef124c666c0bf8ecc911ad673eb56cf3124b7e"}, "tags": [], "refs": [], "sources": [["tiktok_ads", "ad_report_hourly"]], "description": "", "columns": {}, "meta": {}, "docs": {"show": true}, "patch_path": null, "compiled_path": "target/compiled/tiktok_ads_source/models/tmp/stg_tiktok_ads__ad_report_hourly_tmp.sql", "build_path": null, "deferred": false, "unrendered_config": {"materialized": "view", "schema": "stg_tiktok_ads", "enabled": true}, "created_at": 1661544121.9735732, "compiled_sql": "\n\nselect *\nfrom \"postgres\".\"tiktok_ads_source_integration_tests_1\".\"tiktok_ad_report_hourly_data\"", "extra_ctes_injected": true, "extra_ctes": [], "relation_name": "\"postgres\".\"tiktok_ads_source_integration_tests_1_stg_tiktok_ads\".\"stg_tiktok_ads__ad_report_hourly_tmp\""}, "model.tiktok_ads_source.stg_tiktok_ads__ad_history_tmp": {"raw_sql": "{{ config(enabled=var('ad_reporting__tiktok_ads_enabled', true)) }}\n\nselect *\nfrom {{ var('ad_history') }}", "compiled": true, "resource_type": "model", "depends_on": {"macros": [], "nodes": ["source.tiktok_ads_source.tiktok_ads.ad_history"]}, "config": {"enabled": true, "alias": null, "schema": "stg_tiktok_ads", "database": null, "tags": [], "meta": {}, "materialized": "view", "persist_docs": {}, "quoting": {}, "column_types": {}, "full_refresh": null, "on_schema_change": "ignore", "post-hook": [], "pre-hook": []}, "database": "postgres", "schema": "tiktok_ads_source_integration_tests_1_stg_tiktok_ads", "fqn": ["tiktok_ads_source", "tmp", "stg_tiktok_ads__ad_history_tmp"], "unique_id": "model.tiktok_ads_source.stg_tiktok_ads__ad_history_tmp", "package_name": "tiktok_ads_source", "root_path": "/Users/joseph.markiewicz/Documents/dbt_packages/ad_reporting/tiktok/dbt_tiktok_ads_source/integration_tests/dbt_packages/tiktok_ads_source", "path": "tmp/stg_tiktok_ads__ad_history_tmp.sql", "original_file_path": "models/tmp/stg_tiktok_ads__ad_history_tmp.sql", "name": "stg_tiktok_ads__ad_history_tmp", "alias": "stg_tiktok_ads__ad_history_tmp", "checksum": {"name": "sha256", "checksum": "70d0e01a26a5250c141b3a67fd3b1ffcfceea35645e82096257852badea2b9d2"}, "tags": [], "refs": [], "sources": [["tiktok_ads", "ad_history"]], "description": "", "columns": {}, "meta": {}, "docs": {"show": true}, "patch_path": null, "compiled_path": "target/compiled/tiktok_ads_source/models/tmp/stg_tiktok_ads__ad_history_tmp.sql", "build_path": null, "deferred": false, "unrendered_config": {"materialized": "view", "schema": "stg_tiktok_ads", "enabled": true}, "created_at": 1661544121.976979, "compiled_sql": "\n\nselect *\nfrom \"postgres\".\"tiktok_ads_source_integration_tests_1\".\"tiktok_ad_history_data\"", "extra_ctes_injected": true, "extra_ctes": [], "relation_name": "\"postgres\".\"tiktok_ads_source_integration_tests_1_stg_tiktok_ads\".\"stg_tiktok_ads__ad_history_tmp\""}, "model.tiktok_ads_source.stg_tiktok_ads__ad_group_history_tmp": {"raw_sql": "{{ config(enabled=var('ad_reporting__tiktok_ads_enabled', true)) }}\n\nselect *\nfrom {{ var('ad_group_history') }}", "compiled": true, "resource_type": "model", "depends_on": {"macros": [], "nodes": ["source.tiktok_ads_source.tiktok_ads.adgroup_history"]}, "config": {"enabled": true, "alias": null, "schema": "stg_tiktok_ads", "database": null, "tags": [], "meta": {}, "materialized": "view", "persist_docs": {}, "quoting": {}, "column_types": {}, "full_refresh": null, "on_schema_change": "ignore", "post-hook": [], "pre-hook": []}, "database": "postgres", "schema": "tiktok_ads_source_integration_tests_1_stg_tiktok_ads", "fqn": ["tiktok_ads_source", "tmp", "stg_tiktok_ads__ad_group_history_tmp"], "unique_id": "model.tiktok_ads_source.stg_tiktok_ads__ad_group_history_tmp", "package_name": "tiktok_ads_source", "root_path": "/Users/joseph.markiewicz/Documents/dbt_packages/ad_reporting/tiktok/dbt_tiktok_ads_source/integration_tests/dbt_packages/tiktok_ads_source", "path": "tmp/stg_tiktok_ads__ad_group_history_tmp.sql", "original_file_path": "models/tmp/stg_tiktok_ads__ad_group_history_tmp.sql", "name": "stg_tiktok_ads__ad_group_history_tmp", "alias": "stg_tiktok_ads__ad_group_history_tmp", "checksum": {"name": "sha256", "checksum": "656a88662bd5fe65b7e782c1d24ecfc5459e7541ec41b4418f4472f3633aa347"}, "tags": [], "refs": [], "sources": [["tiktok_ads", "adgroup_history"]], "description": "", "columns": {}, "meta": {}, "docs": {"show": true}, "patch_path": null, "compiled_path": "target/compiled/tiktok_ads_source/models/tmp/stg_tiktok_ads__ad_group_history_tmp.sql", "build_path": null, "deferred": false, "unrendered_config": {"materialized": "view", "schema": "stg_tiktok_ads", "enabled": true}, "created_at": 1661544121.980187, "compiled_sql": "\n\nselect *\nfrom \"postgres\".\"tiktok_ads_source_integration_tests_1\".\"tiktok_adgroup_history_data\"", "extra_ctes_injected": true, "extra_ctes": [], "relation_name": "\"postgres\".\"tiktok_ads_source_integration_tests_1_stg_tiktok_ads\".\"stg_tiktok_ads__ad_group_history_tmp\""}, "model.tiktok_ads_source.stg_tiktok_ads__campaign_report_hourly_tmp": {"raw_sql": "{{ config(enabled=var('ad_reporting__tiktok_ads_enabled', true)) }}\n\nselect *\nfrom {{ var('campaign_report_hourly') }}", "compiled": true, "resource_type": "model", "depends_on": {"macros": [], "nodes": ["source.tiktok_ads_source.tiktok_ads.campaign_report_hourly"]}, "config": {"enabled": true, "alias": null, "schema": "stg_tiktok_ads", "database": null, "tags": [], "meta": {}, "materialized": "view", "persist_docs": {}, "quoting": {}, "column_types": {}, "full_refresh": null, "on_schema_change": "ignore", "post-hook": [], "pre-hook": []}, "database": "postgres", "schema": "tiktok_ads_source_integration_tests_1_stg_tiktok_ads", "fqn": ["tiktok_ads_source", "tmp", "stg_tiktok_ads__campaign_report_hourly_tmp"], "unique_id": "model.tiktok_ads_source.stg_tiktok_ads__campaign_report_hourly_tmp", "package_name": "tiktok_ads_source", "root_path": "/Users/joseph.markiewicz/Documents/dbt_packages/ad_reporting/tiktok/dbt_tiktok_ads_source/integration_tests/dbt_packages/tiktok_ads_source", "path": "tmp/stg_tiktok_ads__campaign_report_hourly_tmp.sql", "original_file_path": "models/tmp/stg_tiktok_ads__campaign_report_hourly_tmp.sql", "name": "stg_tiktok_ads__campaign_report_hourly_tmp", "alias": "stg_tiktok_ads__campaign_report_hourly_tmp", "checksum": {"name": "sha256", "checksum": "3a734b2b71b67ce84e5c0fadfff18429e2aa52abcae9f16aa3832a7c5e94c25e"}, "tags": [], "refs": [], "sources": [["tiktok_ads", "campaign_report_hourly"]], "description": "", "columns": {}, "meta": {}, "docs": {"show": true}, "patch_path": null, "compiled_path": "target/compiled/tiktok_ads_source/models/tmp/stg_tiktok_ads__campaign_report_hourly_tmp.sql", "build_path": null, "deferred": false, "unrendered_config": {"materialized": "view", "schema": "stg_tiktok_ads", "enabled": true}, "created_at": 1661544121.983655, "compiled_sql": "\n\nselect *\nfrom \"postgres\".\"tiktok_ads_source_integration_tests_1\".\"tiktok_campaign_report_hourly_data\"", "extra_ctes_injected": true, "extra_ctes": [], "relation_name": "\"postgres\".\"tiktok_ads_source_integration_tests_1_stg_tiktok_ads\".\"stg_tiktok_ads__campaign_report_hourly_tmp\""}, "model.tiktok_ads_source.stg_tiktok_ads__ad_group_report_hourly_tmp": {"raw_sql": "{{ config(enabled=var('ad_reporting__tiktok_ads_enabled', true)) }}\n\nselect *\nfrom {{ var('ad_group_hourly') }}", "compiled": true, "resource_type": "model", "depends_on": {"macros": [], "nodes": ["source.tiktok_ads_source.tiktok_ads.adgroup_report_hourly"]}, "config": {"enabled": true, "alias": null, "schema": "stg_tiktok_ads", "database": null, "tags": [], "meta": {}, "materialized": "view", "persist_docs": {}, "quoting": {}, "column_types": {}, "full_refresh": null, "on_schema_change": "ignore", "post-hook": [], "pre-hook": []}, "database": "postgres", "schema": "tiktok_ads_source_integration_tests_1_stg_tiktok_ads", "fqn": ["tiktok_ads_source", "tmp", "stg_tiktok_ads__ad_group_report_hourly_tmp"], "unique_id": "model.tiktok_ads_source.stg_tiktok_ads__ad_group_report_hourly_tmp", "package_name": "tiktok_ads_source", "root_path": "/Users/joseph.markiewicz/Documents/dbt_packages/ad_reporting/tiktok/dbt_tiktok_ads_source/integration_tests/dbt_packages/tiktok_ads_source", "path": "tmp/stg_tiktok_ads__ad_group_report_hourly_tmp.sql", "original_file_path": "models/tmp/stg_tiktok_ads__ad_group_report_hourly_tmp.sql", "name": "stg_tiktok_ads__ad_group_report_hourly_tmp", "alias": "stg_tiktok_ads__ad_group_report_hourly_tmp", "checksum": {"name": "sha256", "checksum": "5e607a6ea02a4f66c2d50b092e2d37d6b07d0de03b0490dddde773197364937e"}, "tags": [], "refs": [], "sources": [["tiktok_ads", "adgroup_report_hourly"]], "description": "", "columns": {}, "meta": {}, "docs": {"show": true}, "patch_path": null, "compiled_path": "target/compiled/tiktok_ads_source/models/tmp/stg_tiktok_ads__ad_group_report_hourly_tmp.sql", "build_path": null, "deferred": false, "unrendered_config": {"materialized": "view", "schema": "stg_tiktok_ads", "enabled": true}, "created_at": 1661544121.9865978, "compiled_sql": "\n\nselect *\nfrom \"postgres\".\"tiktok_ads_source_integration_tests_1\".\"tiktok_adgroup_report_hourly_data\"", "extra_ctes_injected": true, "extra_ctes": [], "relation_name": "\"postgres\".\"tiktok_ads_source_integration_tests_1_stg_tiktok_ads\".\"stg_tiktok_ads__ad_group_report_hourly_tmp\""}, "model.tiktok_ads_source.stg_tiktok_ads__campaign_history_tmp": {"raw_sql": "{{ config(enabled=var('ad_reporting__tiktok_ads_enabled', true)) }}\n\nselect *\nfrom {{ var('campaign_history') }}", "compiled": true, "resource_type": "model", "depends_on": {"macros": [], "nodes": ["source.tiktok_ads_source.tiktok_ads.campaign_history"]}, "config": {"enabled": true, "alias": null, "schema": "stg_tiktok_ads", "database": null, "tags": [], "meta": {}, "materialized": "view", "persist_docs": {}, "quoting": {}, "column_types": {}, "full_refresh": null, "on_schema_change": "ignore", "post-hook": [], "pre-hook": []}, "database": "postgres", "schema": "tiktok_ads_source_integration_tests_1_stg_tiktok_ads", "fqn": ["tiktok_ads_source", "tmp", "stg_tiktok_ads__campaign_history_tmp"], "unique_id": "model.tiktok_ads_source.stg_tiktok_ads__campaign_history_tmp", "package_name": "tiktok_ads_source", "root_path": "/Users/joseph.markiewicz/Documents/dbt_packages/ad_reporting/tiktok/dbt_tiktok_ads_source/integration_tests/dbt_packages/tiktok_ads_source", "path": "tmp/stg_tiktok_ads__campaign_history_tmp.sql", "original_file_path": "models/tmp/stg_tiktok_ads__campaign_history_tmp.sql", "name": "stg_tiktok_ads__campaign_history_tmp", "alias": "stg_tiktok_ads__campaign_history_tmp", "checksum": {"name": "sha256", "checksum": "1c8e0405cc5ddf7b7748f613590108b0b3f786b44a35ac4382079c19072febe5"}, "tags": [], "refs": [], "sources": [["tiktok_ads", "campaign_history"]], "description": "", "columns": {}, "meta": {}, "docs": {"show": true}, "patch_path": null, "compiled_path": "target/compiled/tiktok_ads_source/models/tmp/stg_tiktok_ads__campaign_history_tmp.sql", "build_path": null, "deferred": false, "unrendered_config": {"materialized": "view", "schema": "stg_tiktok_ads", "enabled": true}, "created_at": 1661544121.989386, "compiled_sql": "\n\nselect *\nfrom \"postgres\".\"tiktok_ads_source_integration_tests_1\".\"tiktok_campaign_history_data\"", "extra_ctes_injected": true, "extra_ctes": [], "relation_name": "\"postgres\".\"tiktok_ads_source_integration_tests_1_stg_tiktok_ads\".\"stg_tiktok_ads__campaign_history_tmp\""}, "model.tiktok_ads_source.stg_tiktok_ads__advertiser_tmp": {"raw_sql": "{{ config(enabled=var('ad_reporting__tiktok_ads_enabled', true)) }}\n\nselect *\nfrom {{ var('advertiser') }}", "compiled": true, "resource_type": "model", "depends_on": {"macros": [], "nodes": ["source.tiktok_ads_source.tiktok_ads.advertiser"]}, "config": {"enabled": true, "alias": null, "schema": "stg_tiktok_ads", "database": null, "tags": [], "meta": {}, "materialized": "view", "persist_docs": {}, "quoting": {}, "column_types": {}, "full_refresh": null, "on_schema_change": "ignore", "post-hook": [], "pre-hook": []}, "database": "postgres", "schema": "tiktok_ads_source_integration_tests_1_stg_tiktok_ads", "fqn": ["tiktok_ads_source", "tmp", "stg_tiktok_ads__advertiser_tmp"], "unique_id": "model.tiktok_ads_source.stg_tiktok_ads__advertiser_tmp", "package_name": "tiktok_ads_source", "root_path": "/Users/joseph.markiewicz/Documents/dbt_packages/ad_reporting/tiktok/dbt_tiktok_ads_source/integration_tests/dbt_packages/tiktok_ads_source", "path": "tmp/stg_tiktok_ads__advertiser_tmp.sql", "original_file_path": "models/tmp/stg_tiktok_ads__advertiser_tmp.sql", "name": "stg_tiktok_ads__advertiser_tmp", "alias": "stg_tiktok_ads__advertiser_tmp", "checksum": {"name": "sha256", "checksum": "43da3da14719af2f23e901aa756fc51b3bd807b1172a7776a811541ee26e8688"}, "tags": [], "refs": [], "sources": [["tiktok_ads", "advertiser"]], "description": "", "columns": {}, "meta": {}, "docs": {"show": true}, "patch_path": null, "compiled_path": "target/compiled/tiktok_ads_source/models/tmp/stg_tiktok_ads__advertiser_tmp.sql", "build_path": null, "deferred": false, "unrendered_config": {"materialized": "view", "schema": "stg_tiktok_ads", "enabled": true}, "created_at": 1661544121.993717, "compiled_sql": "\n\nselect *\nfrom \"postgres\".\"tiktok_ads_source_integration_tests_1\".\"tiktok_advertiser_data\"", "extra_ctes_injected": true, "extra_ctes": [], "relation_name": "\"postgres\".\"tiktok_ads_source_integration_tests_1_stg_tiktok_ads\".\"stg_tiktok_ads__advertiser_tmp\""}, "test.tiktok_ads_source.unique_stg_tiktok_ads__advertiser_advertiser_id.078391ba66": {"raw_sql": "{{ test_unique(**_dbt_generic_test_kwargs) }}", "test_metadata": {"name": "unique", "kwargs": {"column_name": "advertiser_id", "model": "{{ get_where_subquery(ref('stg_tiktok_ads__advertiser')) }}"}, "namespace": null}, "compiled": true, "resource_type": "test", "depends_on": {"macros": ["macro.dbt.test_unique", "macro.dbt.get_where_subquery"], "nodes": ["model.tiktok_ads_source.stg_tiktok_ads__advertiser"]}, "config": {"enabled": true, "alias": null, "schema": "dbt_test__audit", "database": null, "tags": [], "meta": {}, "materialized": "test", "severity": "ERROR", "store_failures": null, "where": null, "limit": null, "fail_calc": "count(*)", "warn_if": "!= 0", "error_if": "!= 0"}, "database": "postgres", "schema": "tiktok_ads_source_integration_tests_1_dbt_test__audit", "fqn": ["tiktok_ads_source", "unique_stg_tiktok_ads__advertiser_advertiser_id"], "unique_id": "test.tiktok_ads_source.unique_stg_tiktok_ads__advertiser_advertiser_id.078391ba66", "package_name": "tiktok_ads_source", "root_path": "/Users/joseph.markiewicz/Documents/dbt_packages/ad_reporting/tiktok/dbt_tiktok_ads_source/integration_tests/dbt_packages/tiktok_ads_source", "path": "unique_stg_tiktok_ads__advertiser_advertiser_id.sql", "original_file_path": "models/stg_tiktok_ads.yml", "name": "unique_stg_tiktok_ads__advertiser_advertiser_id", "alias": "unique_stg_tiktok_ads__advertiser_advertiser_id", "checksum": {"name": "none", "checksum": ""}, "tags": [], "refs": [["stg_tiktok_ads__advertiser"]], "sources": [], "description": "", "columns": {}, "meta": {}, "docs": {"show": true}, "patch_path": null, "compiled_path": "target/compiled/tiktok_ads_source/models/stg_tiktok_ads.yml/unique_stg_tiktok_ads__advertiser_advertiser_id.sql", "build_path": null, "deferred": false, "unrendered_config": {}, "created_at": 1661544122.095383, "compiled_sql": "\n \n \n\nselect\n advertiser_id as unique_field,\n count(*) as n_records\n\nfrom \"postgres\".\"tiktok_ads_source_integration_tests_1_stg_tiktok_ads\".\"stg_tiktok_ads__advertiser\"\nwhere advertiser_id is not null\ngroup by advertiser_id\nhaving count(*) > 1\n\n\n", "extra_ctes_injected": true, "extra_ctes": [], "relation_name": null, "column_name": "advertiser_id", "file_key_name": "models.stg_tiktok_ads__advertiser"}, "test.tiktok_ads_source.not_null_stg_tiktok_ads__advertiser_advertiser_id.5deab92def": {"raw_sql": "{{ test_not_null(**_dbt_generic_test_kwargs) }}", "test_metadata": {"name": "not_null", "kwargs": {"column_name": "advertiser_id", "model": "{{ get_where_subquery(ref('stg_tiktok_ads__advertiser')) }}"}, "namespace": null}, "compiled": true, "resource_type": "test", "depends_on": {"macros": ["macro.dbt.test_not_null", "macro.dbt.get_where_subquery"], "nodes": ["model.tiktok_ads_source.stg_tiktok_ads__advertiser"]}, "config": {"enabled": true, "alias": null, "schema": "dbt_test__audit", "database": null, "tags": [], "meta": {}, "materialized": "test", "severity": "ERROR", "store_failures": null, "where": null, "limit": null, "fail_calc": "count(*)", "warn_if": "!= 0", "error_if": "!= 0"}, "database": "postgres", "schema": "tiktok_ads_source_integration_tests_1_dbt_test__audit", "fqn": ["tiktok_ads_source", "not_null_stg_tiktok_ads__advertiser_advertiser_id"], "unique_id": "test.tiktok_ads_source.not_null_stg_tiktok_ads__advertiser_advertiser_id.5deab92def", "package_name": "tiktok_ads_source", "root_path": "/Users/joseph.markiewicz/Documents/dbt_packages/ad_reporting/tiktok/dbt_tiktok_ads_source/integration_tests/dbt_packages/tiktok_ads_source", "path": "not_null_stg_tiktok_ads__advertiser_advertiser_id.sql", "original_file_path": "models/stg_tiktok_ads.yml", "name": "not_null_stg_tiktok_ads__advertiser_advertiser_id", "alias": "not_null_stg_tiktok_ads__advertiser_advertiser_id", "checksum": {"name": "none", "checksum": ""}, "tags": [], "refs": [["stg_tiktok_ads__advertiser"]], "sources": [], "description": "", "columns": {}, "meta": {}, "docs": {"show": true}, "patch_path": null, "compiled_path": "target/compiled/tiktok_ads_source/models/stg_tiktok_ads.yml/not_null_stg_tiktok_ads__advertiser_advertiser_id.sql", "build_path": null, "deferred": false, "unrendered_config": {}, "created_at": 1661544122.096692, "compiled_sql": "\n \n \n\nselect *\nfrom \"postgres\".\"tiktok_ads_source_integration_tests_1_stg_tiktok_ads\".\"stg_tiktok_ads__advertiser\"\nwhere advertiser_id is null\n\n\n", "extra_ctes_injected": true, "extra_ctes": [], "relation_name": null, "column_name": "advertiser_id", "file_key_name": "models.stg_tiktok_ads__advertiser"}, "test.tiktok_ads_source.not_null_stg_tiktok_ads__ad_group_history_ad_group_id.04778d7fad": {"raw_sql": "{{ test_not_null(**_dbt_generic_test_kwargs) }}", "test_metadata": {"name": "not_null", "kwargs": {"column_name": "ad_group_id", "model": "{{ get_where_subquery(ref('stg_tiktok_ads__ad_group_history')) }}"}, "namespace": null}, "compiled": true, "resource_type": "test", "depends_on": {"macros": ["macro.dbt.test_not_null", "macro.dbt.get_where_subquery"], "nodes": ["model.tiktok_ads_source.stg_tiktok_ads__ad_group_history"]}, "config": {"enabled": true, "alias": null, "schema": "dbt_test__audit", "database": null, "tags": [], "meta": {}, "materialized": "test", "severity": "ERROR", "store_failures": null, "where": null, "limit": null, "fail_calc": "count(*)", "warn_if": "!= 0", "error_if": "!= 0"}, "database": "postgres", "schema": "tiktok_ads_source_integration_tests_1_dbt_test__audit", "fqn": ["tiktok_ads_source", "not_null_stg_tiktok_ads__ad_group_history_ad_group_id"], "unique_id": "test.tiktok_ads_source.not_null_stg_tiktok_ads__ad_group_history_ad_group_id.04778d7fad", "package_name": "tiktok_ads_source", "root_path": "/Users/joseph.markiewicz/Documents/dbt_packages/ad_reporting/tiktok/dbt_tiktok_ads_source/integration_tests/dbt_packages/tiktok_ads_source", "path": "not_null_stg_tiktok_ads__ad_group_history_ad_group_id.sql", "original_file_path": "models/stg_tiktok_ads.yml", "name": "not_null_stg_tiktok_ads__ad_group_history_ad_group_id", "alias": "not_null_stg_tiktok_ads__ad_group_history_ad_group_id", "checksum": {"name": "none", "checksum": ""}, "tags": [], "refs": [["stg_tiktok_ads__ad_group_history"]], "sources": [], "description": "", "columns": {}, "meta": {}, "docs": {"show": true}, "patch_path": null, "compiled_path": "target/compiled/tiktok_ads_source/models/stg_tiktok_ads.yml/not_null_stg_tiktok_ads__ad_group_history_ad_group_id.sql", "build_path": null, "deferred": false, "unrendered_config": {}, "created_at": 1661544122.0977159, "compiled_sql": "\n \n \n\nselect *\nfrom \"postgres\".\"tiktok_ads_source_integration_tests_1_stg_tiktok_ads\".\"stg_tiktok_ads__ad_group_history\"\nwhere ad_group_id is null\n\n\n", "extra_ctes_injected": true, "extra_ctes": [], "relation_name": null, "column_name": "ad_group_id", "file_key_name": "models.stg_tiktok_ads__ad_group_history"}, "test.tiktok_ads_source.dbt_utils_unique_combination_of_columns_stg_tiktok_ads__ad_group_history_ad_group_id__updated_at.cec78c01de": {"raw_sql": "{{ dbt_utils.test_unique_combination_of_columns(**_dbt_generic_test_kwargs) }}{{ config(alias=\"dbt_utils_unique_combination_o_353c130a41ba5d6aab13dbda36b226c8\") }}", "test_metadata": {"name": "unique_combination_of_columns", "kwargs": {"combination_of_columns": ["ad_group_id", "updated_at"], "model": "{{ get_where_subquery(ref('stg_tiktok_ads__ad_group_history')) }}"}, "namespace": "dbt_utils"}, "compiled": true, "resource_type": "test", "depends_on": {"macros": ["macro.dbt_utils.test_unique_combination_of_columns", "macro.dbt.get_where_subquery"], "nodes": ["model.tiktok_ads_source.stg_tiktok_ads__ad_group_history"]}, "config": {"enabled": true, "alias": "dbt_utils_unique_combination_o_353c130a41ba5d6aab13dbda36b226c8", "schema": "dbt_test__audit", "database": null, "tags": [], "meta": {}, "materialized": "test", "severity": "ERROR", "store_failures": null, "where": null, "limit": null, "fail_calc": "count(*)", "warn_if": "!= 0", "error_if": "!= 0"}, "database": "postgres", "schema": "tiktok_ads_source_integration_tests_1_dbt_test__audit", "fqn": ["tiktok_ads_source", "dbt_utils_unique_combination_of_columns_stg_tiktok_ads__ad_group_history_ad_group_id__updated_at"], "unique_id": "test.tiktok_ads_source.dbt_utils_unique_combination_of_columns_stg_tiktok_ads__ad_group_history_ad_group_id__updated_at.cec78c01de", "package_name": "tiktok_ads_source", "root_path": "/Users/joseph.markiewicz/Documents/dbt_packages/ad_reporting/tiktok/dbt_tiktok_ads_source/integration_tests/dbt_packages/tiktok_ads_source", "path": "dbt_utils_unique_combination_o_353c130a41ba5d6aab13dbda36b226c8.sql", "original_file_path": "models/stg_tiktok_ads.yml", "name": "dbt_utils_unique_combination_of_columns_stg_tiktok_ads__ad_group_history_ad_group_id__updated_at", "alias": "dbt_utils_unique_combination_o_353c130a41ba5d6aab13dbda36b226c8", "checksum": {"name": "none", "checksum": ""}, "tags": [], "refs": [["stg_tiktok_ads__ad_group_history"]], "sources": [], "description": "", "columns": {}, "meta": {}, "docs": {"show": true}, "patch_path": null, "compiled_path": "target/compiled/tiktok_ads_source/models/stg_tiktok_ads.yml/dbt_utils_unique_combination_o_353c130a41ba5d6aab13dbda36b226c8.sql", "build_path": null, "deferred": false, "unrendered_config": {"alias": "dbt_utils_unique_combination_o_353c130a41ba5d6aab13dbda36b226c8"}, "created_at": 1661544122.0988538, "compiled_sql": "\n\n\n\n\n\nwith validation_errors as (\n\n select\n ad_group_id, updated_at\n from \"postgres\".\"tiktok_ads_source_integration_tests_1_stg_tiktok_ads\".\"stg_tiktok_ads__ad_group_history\"\n group by ad_group_id, updated_at\n having count(*) > 1\n\n)\n\nselect *\nfrom validation_errors\n\n\n", "extra_ctes_injected": true, "extra_ctes": [], "relation_name": null, "column_name": null, "file_key_name": "models.stg_tiktok_ads__ad_group_history"}, "test.tiktok_ads_source.not_null_stg_tiktok_ads__ad_history_ad_id.4ffd05b23a": {"raw_sql": "{{ test_not_null(**_dbt_generic_test_kwargs) }}", "test_metadata": {"name": "not_null", "kwargs": {"column_name": "ad_id", "model": "{{ get_where_subquery(ref('stg_tiktok_ads__ad_history')) }}"}, "namespace": null}, "compiled": true, "resource_type": "test", "depends_on": {"macros": ["macro.dbt.test_not_null", "macro.dbt.get_where_subquery"], "nodes": ["model.tiktok_ads_source.stg_tiktok_ads__ad_history"]}, "config": {"enabled": true, "alias": null, "schema": "dbt_test__audit", "database": null, "tags": [], "meta": {}, "materialized": "test", "severity": "ERROR", "store_failures": null, "where": null, "limit": null, "fail_calc": "count(*)", "warn_if": "!= 0", "error_if": "!= 0"}, "database": "postgres", "schema": "tiktok_ads_source_integration_tests_1_dbt_test__audit", "fqn": ["tiktok_ads_source", "not_null_stg_tiktok_ads__ad_history_ad_id"], "unique_id": "test.tiktok_ads_source.not_null_stg_tiktok_ads__ad_history_ad_id.4ffd05b23a", "package_name": "tiktok_ads_source", "root_path": "/Users/joseph.markiewicz/Documents/dbt_packages/ad_reporting/tiktok/dbt_tiktok_ads_source/integration_tests/dbt_packages/tiktok_ads_source", "path": "not_null_stg_tiktok_ads__ad_history_ad_id.sql", "original_file_path": "models/stg_tiktok_ads.yml", "name": "not_null_stg_tiktok_ads__ad_history_ad_id", "alias": "not_null_stg_tiktok_ads__ad_history_ad_id", "checksum": {"name": "none", "checksum": ""}, "tags": [], "refs": [["stg_tiktok_ads__ad_history"]], "sources": [], "description": "", "columns": {}, "meta": {}, "docs": {"show": true}, "patch_path": null, "compiled_path": "target/compiled/tiktok_ads_source/models/stg_tiktok_ads.yml/not_null_stg_tiktok_ads__ad_history_ad_id.sql", "build_path": null, "deferred": false, "unrendered_config": {}, "created_at": 1661544122.106347, "compiled_sql": "\n \n \n\nselect *\nfrom \"postgres\".\"tiktok_ads_source_integration_tests_1_stg_tiktok_ads\".\"stg_tiktok_ads__ad_history\"\nwhere ad_id is null\n\n\n", "extra_ctes_injected": true, "extra_ctes": [], "relation_name": null, "column_name": "ad_id", "file_key_name": "models.stg_tiktok_ads__ad_history"}, "test.tiktok_ads_source.dbt_utils_unique_combination_of_columns_stg_tiktok_ads__ad_history_ad_id__updated_at.66b86b4dd1": {"raw_sql": "{{ dbt_utils.test_unique_combination_of_columns(**_dbt_generic_test_kwargs) }}{{ config(alias=\"dbt_utils_unique_combination_o_fe2e43690b07f6a6cbd499af54b7738f\") }}", "test_metadata": {"name": "unique_combination_of_columns", "kwargs": {"combination_of_columns": ["ad_id", "updated_at"], "model": "{{ get_where_subquery(ref('stg_tiktok_ads__ad_history')) }}"}, "namespace": "dbt_utils"}, "compiled": true, "resource_type": "test", "depends_on": {"macros": ["macro.dbt_utils.test_unique_combination_of_columns", "macro.dbt.get_where_subquery"], "nodes": ["model.tiktok_ads_source.stg_tiktok_ads__ad_history"]}, "config": {"enabled": true, "alias": "dbt_utils_unique_combination_o_fe2e43690b07f6a6cbd499af54b7738f", "schema": "dbt_test__audit", "database": null, "tags": [], "meta": {}, "materialized": "test", "severity": "ERROR", "store_failures": null, "where": null, "limit": null, "fail_calc": "count(*)", "warn_if": "!= 0", "error_if": "!= 0"}, "database": "postgres", "schema": "tiktok_ads_source_integration_tests_1_dbt_test__audit", "fqn": ["tiktok_ads_source", "dbt_utils_unique_combination_of_columns_stg_tiktok_ads__ad_history_ad_id__updated_at"], "unique_id": "test.tiktok_ads_source.dbt_utils_unique_combination_of_columns_stg_tiktok_ads__ad_history_ad_id__updated_at.66b86b4dd1", "package_name": "tiktok_ads_source", "root_path": "/Users/joseph.markiewicz/Documents/dbt_packages/ad_reporting/tiktok/dbt_tiktok_ads_source/integration_tests/dbt_packages/tiktok_ads_source", "path": "dbt_utils_unique_combination_o_fe2e43690b07f6a6cbd499af54b7738f.sql", "original_file_path": "models/stg_tiktok_ads.yml", "name": "dbt_utils_unique_combination_of_columns_stg_tiktok_ads__ad_history_ad_id__updated_at", "alias": "dbt_utils_unique_combination_o_fe2e43690b07f6a6cbd499af54b7738f", "checksum": {"name": "none", "checksum": ""}, "tags": [], "refs": [["stg_tiktok_ads__ad_history"]], "sources": [], "description": "", "columns": {}, "meta": {}, "docs": {"show": true}, "patch_path": null, "compiled_path": "target/compiled/tiktok_ads_source/models/stg_tiktok_ads.yml/dbt_utils_unique_combination_o_fe2e43690b07f6a6cbd499af54b7738f.sql", "build_path": null, "deferred": false, "unrendered_config": {"alias": "dbt_utils_unique_combination_o_fe2e43690b07f6a6cbd499af54b7738f"}, "created_at": 1661544122.1073868, "compiled_sql": "\n\n\n\n\n\nwith validation_errors as (\n\n select\n ad_id, updated_at\n from \"postgres\".\"tiktok_ads_source_integration_tests_1_stg_tiktok_ads\".\"stg_tiktok_ads__ad_history\"\n group by ad_id, updated_at\n having count(*) > 1\n\n)\n\nselect *\nfrom validation_errors\n\n\n", "extra_ctes_injected": true, "extra_ctes": [], "relation_name": null, "column_name": null, "file_key_name": "models.stg_tiktok_ads__ad_history"}, "test.tiktok_ads_source.not_null_stg_tiktok_ads__campaign_history_campaign_id.7f9147d1e1": {"raw_sql": "{{ test_not_null(**_dbt_generic_test_kwargs) }}", "test_metadata": {"name": "not_null", "kwargs": {"column_name": "campaign_id", "model": "{{ get_where_subquery(ref('stg_tiktok_ads__campaign_history')) }}"}, "namespace": null}, "compiled": true, "resource_type": "test", "depends_on": {"macros": ["macro.dbt.test_not_null", "macro.dbt.get_where_subquery"], "nodes": ["model.tiktok_ads_source.stg_tiktok_ads__campaign_history"]}, "config": {"enabled": true, "alias": null, "schema": "dbt_test__audit", "database": null, "tags": [], "meta": {}, "materialized": "test", "severity": "ERROR", "store_failures": null, "where": null, "limit": null, "fail_calc": "count(*)", "warn_if": "!= 0", "error_if": "!= 0"}, "database": "postgres", "schema": "tiktok_ads_source_integration_tests_1_dbt_test__audit", "fqn": ["tiktok_ads_source", "not_null_stg_tiktok_ads__campaign_history_campaign_id"], "unique_id": "test.tiktok_ads_source.not_null_stg_tiktok_ads__campaign_history_campaign_id.7f9147d1e1", "package_name": "tiktok_ads_source", "root_path": "/Users/joseph.markiewicz/Documents/dbt_packages/ad_reporting/tiktok/dbt_tiktok_ads_source/integration_tests/dbt_packages/tiktok_ads_source", "path": "not_null_stg_tiktok_ads__campaign_history_campaign_id.sql", "original_file_path": "models/stg_tiktok_ads.yml", "name": "not_null_stg_tiktok_ads__campaign_history_campaign_id", "alias": "not_null_stg_tiktok_ads__campaign_history_campaign_id", "checksum": {"name": "none", "checksum": ""}, "tags": [], "refs": [["stg_tiktok_ads__campaign_history"]], "sources": [], "description": "", "columns": {}, "meta": {}, "docs": {"show": true}, "patch_path": null, "compiled_path": "target/compiled/tiktok_ads_source/models/stg_tiktok_ads.yml/not_null_stg_tiktok_ads__campaign_history_campaign_id.sql", "build_path": null, "deferred": false, "unrendered_config": {}, "created_at": 1661544122.1103349, "compiled_sql": "\n \n \n\nselect *\nfrom \"postgres\".\"tiktok_ads_source_integration_tests_1_stg_tiktok_ads\".\"stg_tiktok_ads__campaign_history\"\nwhere campaign_id is null\n\n\n", "extra_ctes_injected": true, "extra_ctes": [], "relation_name": null, "column_name": "campaign_id", "file_key_name": "models.stg_tiktok_ads__campaign_history"}, "test.tiktok_ads_source.dbt_utils_unique_combination_of_columns_stg_tiktok_ads__campaign_history_campaign_id__updated_at.72bf07011b": {"raw_sql": "{{ dbt_utils.test_unique_combination_of_columns(**_dbt_generic_test_kwargs) }}{{ config(alias=\"dbt_utils_unique_combination_o_843ebfc08785d00a296625f469aa2000\") }}", "test_metadata": {"name": "unique_combination_of_columns", "kwargs": {"combination_of_columns": ["campaign_id", "updated_at"], "model": "{{ get_where_subquery(ref('stg_tiktok_ads__campaign_history')) }}"}, "namespace": "dbt_utils"}, "compiled": true, "resource_type": "test", "depends_on": {"macros": ["macro.dbt_utils.test_unique_combination_of_columns", "macro.dbt.get_where_subquery"], "nodes": ["model.tiktok_ads_source.stg_tiktok_ads__campaign_history"]}, "config": {"enabled": true, "alias": "dbt_utils_unique_combination_o_843ebfc08785d00a296625f469aa2000", "schema": "dbt_test__audit", "database": null, "tags": [], "meta": {}, "materialized": "test", "severity": "ERROR", "store_failures": null, "where": null, "limit": null, "fail_calc": "count(*)", "warn_if": "!= 0", "error_if": "!= 0"}, "database": "postgres", "schema": "tiktok_ads_source_integration_tests_1_dbt_test__audit", "fqn": ["tiktok_ads_source", "dbt_utils_unique_combination_of_columns_stg_tiktok_ads__campaign_history_campaign_id__updated_at"], "unique_id": "test.tiktok_ads_source.dbt_utils_unique_combination_of_columns_stg_tiktok_ads__campaign_history_campaign_id__updated_at.72bf07011b", "package_name": "tiktok_ads_source", "root_path": "/Users/joseph.markiewicz/Documents/dbt_packages/ad_reporting/tiktok/dbt_tiktok_ads_source/integration_tests/dbt_packages/tiktok_ads_source", "path": "dbt_utils_unique_combination_o_843ebfc08785d00a296625f469aa2000.sql", "original_file_path": "models/stg_tiktok_ads.yml", "name": "dbt_utils_unique_combination_of_columns_stg_tiktok_ads__campaign_history_campaign_id__updated_at", "alias": "dbt_utils_unique_combination_o_843ebfc08785d00a296625f469aa2000", "checksum": {"name": "none", "checksum": ""}, "tags": [], "refs": [["stg_tiktok_ads__campaign_history"]], "sources": [], "description": "", "columns": {}, "meta": {}, "docs": {"show": true}, "patch_path": null, "compiled_path": "target/compiled/tiktok_ads_source/models/stg_tiktok_ads.yml/dbt_utils_unique_combination_o_843ebfc08785d00a296625f469aa2000.sql", "build_path": null, "deferred": false, "unrendered_config": {"alias": "dbt_utils_unique_combination_o_843ebfc08785d00a296625f469aa2000"}, "created_at": 1661544122.111508, "compiled_sql": "\n\n\n\n\n\nwith validation_errors as (\n\n select\n campaign_id, updated_at\n from \"postgres\".\"tiktok_ads_source_integration_tests_1_stg_tiktok_ads\".\"stg_tiktok_ads__campaign_history\"\n group by campaign_id, updated_at\n having count(*) > 1\n\n)\n\nselect *\nfrom validation_errors\n\n\n", "extra_ctes_injected": true, "extra_ctes": [], "relation_name": null, "column_name": null, "file_key_name": "models.stg_tiktok_ads__campaign_history"}, "test.tiktok_ads_source.not_null_stg_tiktok_ads__ad_report_hourly_ad_id.ee84d783ed": {"raw_sql": "{{ test_not_null(**_dbt_generic_test_kwargs) }}", "test_metadata": {"name": "not_null", "kwargs": {"column_name": "ad_id", "model": "{{ get_where_subquery(ref('stg_tiktok_ads__ad_report_hourly')) }}"}, "namespace": null}, "compiled": true, "resource_type": "test", "depends_on": {"macros": ["macro.dbt.test_not_null", "macro.dbt.get_where_subquery"], "nodes": ["model.tiktok_ads_source.stg_tiktok_ads__ad_report_hourly"]}, "config": {"enabled": true, "alias": null, "schema": "dbt_test__audit", "database": null, "tags": [], "meta": {}, "materialized": "test", "severity": "ERROR", "store_failures": null, "where": null, "limit": null, "fail_calc": "count(*)", "warn_if": "!= 0", "error_if": "!= 0"}, "database": "postgres", "schema": "tiktok_ads_source_integration_tests_1_dbt_test__audit", "fqn": ["tiktok_ads_source", "not_null_stg_tiktok_ads__ad_report_hourly_ad_id"], "unique_id": "test.tiktok_ads_source.not_null_stg_tiktok_ads__ad_report_hourly_ad_id.ee84d783ed", "package_name": "tiktok_ads_source", "root_path": "/Users/joseph.markiewicz/Documents/dbt_packages/ad_reporting/tiktok/dbt_tiktok_ads_source/integration_tests/dbt_packages/tiktok_ads_source", "path": "not_null_stg_tiktok_ads__ad_report_hourly_ad_id.sql", "original_file_path": "models/stg_tiktok_ads.yml", "name": "not_null_stg_tiktok_ads__ad_report_hourly_ad_id", "alias": "not_null_stg_tiktok_ads__ad_report_hourly_ad_id", "checksum": {"name": "none", "checksum": ""}, "tags": [], "refs": [["stg_tiktok_ads__ad_report_hourly"]], "sources": [], "description": "", "columns": {}, "meta": {}, "docs": {"show": true}, "patch_path": null, "compiled_path": "target/compiled/tiktok_ads_source/models/stg_tiktok_ads.yml/not_null_stg_tiktok_ads__ad_report_hourly_ad_id.sql", "build_path": null, "deferred": false, "unrendered_config": {}, "created_at": 1661544122.114251, "compiled_sql": "\n \n \n\nselect *\nfrom \"postgres\".\"tiktok_ads_source_integration_tests_1_stg_tiktok_ads\".\"stg_tiktok_ads__ad_report_hourly\"\nwhere ad_id is null\n\n\n", "extra_ctes_injected": true, "extra_ctes": [], "relation_name": null, "column_name": "ad_id", "file_key_name": "models.stg_tiktok_ads__ad_report_hourly"}, "test.tiktok_ads_source.not_null_stg_tiktok_ads__ad_report_hourly_stat_time_hour.9e2a2dca81": {"raw_sql": "{{ test_not_null(**_dbt_generic_test_kwargs) }}", "test_metadata": {"name": "not_null", "kwargs": {"column_name": "stat_time_hour", "model": "{{ get_where_subquery(ref('stg_tiktok_ads__ad_report_hourly')) }}"}, "namespace": null}, "compiled": true, "resource_type": "test", "depends_on": {"macros": ["macro.dbt.test_not_null", "macro.dbt.get_where_subquery"], "nodes": ["model.tiktok_ads_source.stg_tiktok_ads__ad_report_hourly"]}, "config": {"enabled": true, "alias": null, "schema": "dbt_test__audit", "database": null, "tags": [], "meta": {}, "materialized": "test", "severity": "ERROR", "store_failures": null, "where": null, "limit": null, "fail_calc": "count(*)", "warn_if": "!= 0", "error_if": "!= 0"}, "database": "postgres", "schema": "tiktok_ads_source_integration_tests_1_dbt_test__audit", "fqn": ["tiktok_ads_source", "not_null_stg_tiktok_ads__ad_report_hourly_stat_time_hour"], "unique_id": "test.tiktok_ads_source.not_null_stg_tiktok_ads__ad_report_hourly_stat_time_hour.9e2a2dca81", "package_name": "tiktok_ads_source", "root_path": "/Users/joseph.markiewicz/Documents/dbt_packages/ad_reporting/tiktok/dbt_tiktok_ads_source/integration_tests/dbt_packages/tiktok_ads_source", "path": "not_null_stg_tiktok_ads__ad_report_hourly_stat_time_hour.sql", "original_file_path": "models/stg_tiktok_ads.yml", "name": "not_null_stg_tiktok_ads__ad_report_hourly_stat_time_hour", "alias": "not_null_stg_tiktok_ads__ad_report_hourly_stat_time_hour", "checksum": {"name": "none", "checksum": ""}, "tags": [], "refs": [["stg_tiktok_ads__ad_report_hourly"]], "sources": [], "description": "", "columns": {}, "meta": {}, "docs": {"show": true}, "patch_path": null, "compiled_path": "target/compiled/tiktok_ads_source/models/stg_tiktok_ads.yml/not_null_stg_tiktok_ads__ad_report_hourly_stat_time_hour.sql", "build_path": null, "deferred": false, "unrendered_config": {}, "created_at": 1661544122.115433, "compiled_sql": "\n \n \n\nselect *\nfrom \"postgres\".\"tiktok_ads_source_integration_tests_1_stg_tiktok_ads\".\"stg_tiktok_ads__ad_report_hourly\"\nwhere stat_time_hour is null\n\n\n", "extra_ctes_injected": true, "extra_ctes": [], "relation_name": null, "column_name": "stat_time_hour", "file_key_name": "models.stg_tiktok_ads__ad_report_hourly"}, "test.tiktok_ads_source.dbt_utils_unique_combination_of_columns_stg_tiktok_ads__ad_report_hourly_ad_id__stat_time_hour.e70f8cef6d": {"raw_sql": "{{ dbt_utils.test_unique_combination_of_columns(**_dbt_generic_test_kwargs) }}{{ config(alias=\"dbt_utils_unique_combination_o_e6913172297a173fb855f92cf72b08dc\") }}", "test_metadata": {"name": "unique_combination_of_columns", "kwargs": {"combination_of_columns": ["ad_id", "stat_time_hour"], "model": "{{ get_where_subquery(ref('stg_tiktok_ads__ad_report_hourly')) }}"}, "namespace": "dbt_utils"}, "compiled": true, "resource_type": "test", "depends_on": {"macros": ["macro.dbt_utils.test_unique_combination_of_columns", "macro.dbt.get_where_subquery"], "nodes": ["model.tiktok_ads_source.stg_tiktok_ads__ad_report_hourly"]}, "config": {"enabled": true, "alias": "dbt_utils_unique_combination_o_e6913172297a173fb855f92cf72b08dc", "schema": "dbt_test__audit", "database": null, "tags": [], "meta": {}, "materialized": "test", "severity": "ERROR", "store_failures": null, "where": null, "limit": null, "fail_calc": "count(*)", "warn_if": "!= 0", "error_if": "!= 0"}, "database": "postgres", "schema": "tiktok_ads_source_integration_tests_1_dbt_test__audit", "fqn": ["tiktok_ads_source", "dbt_utils_unique_combination_of_columns_stg_tiktok_ads__ad_report_hourly_ad_id__stat_time_hour"], "unique_id": "test.tiktok_ads_source.dbt_utils_unique_combination_of_columns_stg_tiktok_ads__ad_report_hourly_ad_id__stat_time_hour.e70f8cef6d", "package_name": "tiktok_ads_source", "root_path": "/Users/joseph.markiewicz/Documents/dbt_packages/ad_reporting/tiktok/dbt_tiktok_ads_source/integration_tests/dbt_packages/tiktok_ads_source", "path": "dbt_utils_unique_combination_o_e6913172297a173fb855f92cf72b08dc.sql", "original_file_path": "models/stg_tiktok_ads.yml", "name": "dbt_utils_unique_combination_of_columns_stg_tiktok_ads__ad_report_hourly_ad_id__stat_time_hour", "alias": "dbt_utils_unique_combination_o_e6913172297a173fb855f92cf72b08dc", "checksum": {"name": "none", "checksum": ""}, "tags": [], "refs": [["stg_tiktok_ads__ad_report_hourly"]], "sources": [], "description": "", "columns": {}, "meta": {}, "docs": {"show": true}, "patch_path": null, "compiled_path": "target/compiled/tiktok_ads_source/models/stg_tiktok_ads.yml/dbt_utils_unique_combination_o_e6913172297a173fb855f92cf72b08dc.sql", "build_path": null, "deferred": false, "unrendered_config": {"alias": "dbt_utils_unique_combination_o_e6913172297a173fb855f92cf72b08dc"}, "created_at": 1661544122.116447, "compiled_sql": "\n\n\n\n\n\nwith validation_errors as (\n\n select\n ad_id, stat_time_hour\n from \"postgres\".\"tiktok_ads_source_integration_tests_1_stg_tiktok_ads\".\"stg_tiktok_ads__ad_report_hourly\"\n group by ad_id, stat_time_hour\n having count(*) > 1\n\n)\n\nselect *\nfrom validation_errors\n\n\n", "extra_ctes_injected": true, "extra_ctes": [], "relation_name": null, "column_name": null, "file_key_name": "models.stg_tiktok_ads__ad_report_hourly"}, "test.tiktok_ads_source.not_null_stg_tiktok_ads__ad_group_report_hourly_ad_group_id.8da17119f1": {"raw_sql": "{{ test_not_null(**_dbt_generic_test_kwargs) }}", "test_metadata": {"name": "not_null", "kwargs": {"column_name": "ad_group_id", "model": "{{ get_where_subquery(ref('stg_tiktok_ads__ad_group_report_hourly')) }}"}, "namespace": null}, "compiled": true, "resource_type": "test", "depends_on": {"macros": ["macro.dbt.test_not_null", "macro.dbt.get_where_subquery"], "nodes": ["model.tiktok_ads_source.stg_tiktok_ads__ad_group_report_hourly"]}, "config": {"enabled": true, "alias": null, "schema": "dbt_test__audit", "database": null, "tags": [], "meta": {}, "materialized": "test", "severity": "ERROR", "store_failures": null, "where": null, "limit": null, "fail_calc": "count(*)", "warn_if": "!= 0", "error_if": "!= 0"}, "database": "postgres", "schema": "tiktok_ads_source_integration_tests_1_dbt_test__audit", "fqn": ["tiktok_ads_source", "not_null_stg_tiktok_ads__ad_group_report_hourly_ad_group_id"], "unique_id": "test.tiktok_ads_source.not_null_stg_tiktok_ads__ad_group_report_hourly_ad_group_id.8da17119f1", "package_name": "tiktok_ads_source", "root_path": "/Users/joseph.markiewicz/Documents/dbt_packages/ad_reporting/tiktok/dbt_tiktok_ads_source/integration_tests/dbt_packages/tiktok_ads_source", "path": "not_null_stg_tiktok_ads__ad_group_report_hourly_ad_group_id.sql", "original_file_path": "models/stg_tiktok_ads.yml", "name": "not_null_stg_tiktok_ads__ad_group_report_hourly_ad_group_id", "alias": "not_null_stg_tiktok_ads__ad_group_report_hourly_ad_group_id", "checksum": {"name": "none", "checksum": ""}, "tags": [], "refs": [["stg_tiktok_ads__ad_group_report_hourly"]], "sources": [], "description": "", "columns": {}, "meta": {}, "docs": {"show": true}, "patch_path": null, "compiled_path": "target/compiled/tiktok_ads_source/models/stg_tiktok_ads.yml/not_null_stg_tiktok_ads__ad_group_report_hourly_ad_group_id.sql", "build_path": null, "deferred": false, "unrendered_config": {}, "created_at": 1661544122.1192908, "compiled_sql": "\n \n \n\nselect *\nfrom \"postgres\".\"tiktok_ads_source_integration_tests_1_stg_tiktok_ads\".\"stg_tiktok_ads__ad_group_report_hourly\"\nwhere ad_group_id is null\n\n\n", "extra_ctes_injected": true, "extra_ctes": [], "relation_name": null, "column_name": "ad_group_id", "file_key_name": "models.stg_tiktok_ads__ad_group_report_hourly"}, "test.tiktok_ads_source.not_null_stg_tiktok_ads__ad_group_report_hourly_stat_time_hour.ca4b495127": {"raw_sql": "{{ test_not_null(**_dbt_generic_test_kwargs) }}", "test_metadata": {"name": "not_null", "kwargs": {"column_name": "stat_time_hour", "model": "{{ get_where_subquery(ref('stg_tiktok_ads__ad_group_report_hourly')) }}"}, "namespace": null}, "compiled": true, "resource_type": "test", "depends_on": {"macros": ["macro.dbt.test_not_null", "macro.dbt.get_where_subquery"], "nodes": ["model.tiktok_ads_source.stg_tiktok_ads__ad_group_report_hourly"]}, "config": {"enabled": true, "alias": null, "schema": "dbt_test__audit", "database": null, "tags": [], "meta": {}, "materialized": "test", "severity": "ERROR", "store_failures": null, "where": null, "limit": null, "fail_calc": "count(*)", "warn_if": "!= 0", "error_if": "!= 0"}, "database": "postgres", "schema": "tiktok_ads_source_integration_tests_1_dbt_test__audit", "fqn": ["tiktok_ads_source", "not_null_stg_tiktok_ads__ad_group_report_hourly_stat_time_hour"], "unique_id": "test.tiktok_ads_source.not_null_stg_tiktok_ads__ad_group_report_hourly_stat_time_hour.ca4b495127", "package_name": "tiktok_ads_source", "root_path": "/Users/joseph.markiewicz/Documents/dbt_packages/ad_reporting/tiktok/dbt_tiktok_ads_source/integration_tests/dbt_packages/tiktok_ads_source", "path": "not_null_stg_tiktok_ads__ad_group_report_hourly_stat_time_hour.sql", "original_file_path": "models/stg_tiktok_ads.yml", "name": "not_null_stg_tiktok_ads__ad_group_report_hourly_stat_time_hour", "alias": "not_null_stg_tiktok_ads__ad_group_report_hourly_stat_time_hour", "checksum": {"name": "none", "checksum": ""}, "tags": [], "refs": [["stg_tiktok_ads__ad_group_report_hourly"]], "sources": [], "description": "", "columns": {}, "meta": {}, "docs": {"show": true}, "patch_path": null, "compiled_path": "target/compiled/tiktok_ads_source/models/stg_tiktok_ads.yml/not_null_stg_tiktok_ads__ad_group_report_hourly_stat_time_hour.sql", "build_path": null, "deferred": false, "unrendered_config": {}, "created_at": 1661544122.120436, "compiled_sql": "\n \n \n\nselect *\nfrom \"postgres\".\"tiktok_ads_source_integration_tests_1_stg_tiktok_ads\".\"stg_tiktok_ads__ad_group_report_hourly\"\nwhere stat_time_hour is null\n\n\n", "extra_ctes_injected": true, "extra_ctes": [], "relation_name": null, "column_name": "stat_time_hour", "file_key_name": "models.stg_tiktok_ads__ad_group_report_hourly"}, "test.tiktok_ads_source.dbt_utils_unique_combination_of_columns_stg_tiktok_ads__ad_group_report_hourly_ad_group_id__stat_time_hour.1aeaeb71ad": {"raw_sql": "{{ dbt_utils.test_unique_combination_of_columns(**_dbt_generic_test_kwargs) }}{{ config(alias=\"dbt_utils_unique_combination_o_b8146651452c0bd776f5ad7184463e60\") }}", "test_metadata": {"name": "unique_combination_of_columns", "kwargs": {"combination_of_columns": ["ad_group_id", "stat_time_hour"], "model": "{{ get_where_subquery(ref('stg_tiktok_ads__ad_group_report_hourly')) }}"}, "namespace": "dbt_utils"}, "compiled": true, "resource_type": "test", "depends_on": {"macros": ["macro.dbt_utils.test_unique_combination_of_columns", "macro.dbt.get_where_subquery"], "nodes": ["model.tiktok_ads_source.stg_tiktok_ads__ad_group_report_hourly"]}, "config": {"enabled": true, "alias": "dbt_utils_unique_combination_o_b8146651452c0bd776f5ad7184463e60", "schema": "dbt_test__audit", "database": null, "tags": [], "meta": {}, "materialized": "test", "severity": "ERROR", "store_failures": null, "where": null, "limit": null, "fail_calc": "count(*)", "warn_if": "!= 0", "error_if": "!= 0"}, "database": "postgres", "schema": "tiktok_ads_source_integration_tests_1_dbt_test__audit", "fqn": ["tiktok_ads_source", "dbt_utils_unique_combination_of_columns_stg_tiktok_ads__ad_group_report_hourly_ad_group_id__stat_time_hour"], "unique_id": "test.tiktok_ads_source.dbt_utils_unique_combination_of_columns_stg_tiktok_ads__ad_group_report_hourly_ad_group_id__stat_time_hour.1aeaeb71ad", "package_name": "tiktok_ads_source", "root_path": "/Users/joseph.markiewicz/Documents/dbt_packages/ad_reporting/tiktok/dbt_tiktok_ads_source/integration_tests/dbt_packages/tiktok_ads_source", "path": "dbt_utils_unique_combination_o_b8146651452c0bd776f5ad7184463e60.sql", "original_file_path": "models/stg_tiktok_ads.yml", "name": "dbt_utils_unique_combination_of_columns_stg_tiktok_ads__ad_group_report_hourly_ad_group_id__stat_time_hour", "alias": "dbt_utils_unique_combination_o_b8146651452c0bd776f5ad7184463e60", "checksum": {"name": "none", "checksum": ""}, "tags": [], "refs": [["stg_tiktok_ads__ad_group_report_hourly"]], "sources": [], "description": "", "columns": {}, "meta": {}, "docs": {"show": true}, "patch_path": null, "compiled_path": "target/compiled/tiktok_ads_source/models/stg_tiktok_ads.yml/dbt_utils_unique_combination_o_b8146651452c0bd776f5ad7184463e60.sql", "build_path": null, "deferred": false, "unrendered_config": {"alias": "dbt_utils_unique_combination_o_b8146651452c0bd776f5ad7184463e60"}, "created_at": 1661544122.121494, "compiled_sql": "\n\n\n\n\n\nwith validation_errors as (\n\n select\n ad_group_id, stat_time_hour\n from \"postgres\".\"tiktok_ads_source_integration_tests_1_stg_tiktok_ads\".\"stg_tiktok_ads__ad_group_report_hourly\"\n group by ad_group_id, stat_time_hour\n having count(*) > 1\n\n)\n\nselect *\nfrom validation_errors\n\n\n", "extra_ctes_injected": true, "extra_ctes": [], "relation_name": null, "column_name": null, "file_key_name": "models.stg_tiktok_ads__ad_group_report_hourly"}, "test.tiktok_ads_source.not_null_stg_tiktok_ads__campaign_report_hourly_campaign_id.ef898379fb": {"raw_sql": "{{ test_not_null(**_dbt_generic_test_kwargs) }}", "test_metadata": {"name": "not_null", "kwargs": {"column_name": "campaign_id", "model": "{{ get_where_subquery(ref('stg_tiktok_ads__campaign_report_hourly')) }}"}, "namespace": null}, "compiled": true, "resource_type": "test", "depends_on": {"macros": ["macro.dbt.test_not_null", "macro.dbt.get_where_subquery"], "nodes": ["model.tiktok_ads_source.stg_tiktok_ads__campaign_report_hourly"]}, "config": {"enabled": true, "alias": null, "schema": "dbt_test__audit", "database": null, "tags": [], "meta": {}, "materialized": "test", "severity": "ERROR", "store_failures": null, "where": null, "limit": null, "fail_calc": "count(*)", "warn_if": "!= 0", "error_if": "!= 0"}, "database": "postgres", "schema": "tiktok_ads_source_integration_tests_1_dbt_test__audit", "fqn": ["tiktok_ads_source", "not_null_stg_tiktok_ads__campaign_report_hourly_campaign_id"], "unique_id": "test.tiktok_ads_source.not_null_stg_tiktok_ads__campaign_report_hourly_campaign_id.ef898379fb", "package_name": "tiktok_ads_source", "root_path": "/Users/joseph.markiewicz/Documents/dbt_packages/ad_reporting/tiktok/dbt_tiktok_ads_source/integration_tests/dbt_packages/tiktok_ads_source", "path": "not_null_stg_tiktok_ads__campaign_report_hourly_campaign_id.sql", "original_file_path": "models/stg_tiktok_ads.yml", "name": "not_null_stg_tiktok_ads__campaign_report_hourly_campaign_id", "alias": "not_null_stg_tiktok_ads__campaign_report_hourly_campaign_id", "checksum": {"name": "none", "checksum": ""}, "tags": [], "refs": [["stg_tiktok_ads__campaign_report_hourly"]], "sources": [], "description": "", "columns": {}, "meta": {}, "docs": {"show": true}, "patch_path": null, "compiled_path": "target/compiled/tiktok_ads_source/models/stg_tiktok_ads.yml/not_null_stg_tiktok_ads__campaign_report_hourly_campaign_id.sql", "build_path": null, "deferred": false, "unrendered_config": {}, "created_at": 1661544122.1244469, "compiled_sql": "\n \n \n\nselect *\nfrom \"postgres\".\"tiktok_ads_source_integration_tests_1_stg_tiktok_ads\".\"stg_tiktok_ads__campaign_report_hourly\"\nwhere campaign_id is null\n\n\n", "extra_ctes_injected": true, "extra_ctes": [], "relation_name": null, "column_name": "campaign_id", "file_key_name": "models.stg_tiktok_ads__campaign_report_hourly"}, "test.tiktok_ads_source.not_null_stg_tiktok_ads__campaign_report_hourly_stat_time_hour.e75e13184c": {"raw_sql": "{{ test_not_null(**_dbt_generic_test_kwargs) }}", "test_metadata": {"name": "not_null", "kwargs": {"column_name": "stat_time_hour", "model": "{{ get_where_subquery(ref('stg_tiktok_ads__campaign_report_hourly')) }}"}, "namespace": null}, "compiled": true, "resource_type": "test", "depends_on": {"macros": ["macro.dbt.test_not_null", "macro.dbt.get_where_subquery"], "nodes": ["model.tiktok_ads_source.stg_tiktok_ads__campaign_report_hourly"]}, "config": {"enabled": true, "alias": null, "schema": "dbt_test__audit", "database": null, "tags": [], "meta": {}, "materialized": "test", "severity": "ERROR", "store_failures": null, "where": null, "limit": null, "fail_calc": "count(*)", "warn_if": "!= 0", "error_if": "!= 0"}, "database": "postgres", "schema": "tiktok_ads_source_integration_tests_1_dbt_test__audit", "fqn": ["tiktok_ads_source", "not_null_stg_tiktok_ads__campaign_report_hourly_stat_time_hour"], "unique_id": "test.tiktok_ads_source.not_null_stg_tiktok_ads__campaign_report_hourly_stat_time_hour.e75e13184c", "package_name": "tiktok_ads_source", "root_path": "/Users/joseph.markiewicz/Documents/dbt_packages/ad_reporting/tiktok/dbt_tiktok_ads_source/integration_tests/dbt_packages/tiktok_ads_source", "path": "not_null_stg_tiktok_ads__campaign_report_hourly_stat_time_hour.sql", "original_file_path": "models/stg_tiktok_ads.yml", "name": "not_null_stg_tiktok_ads__campaign_report_hourly_stat_time_hour", "alias": "not_null_stg_tiktok_ads__campaign_report_hourly_stat_time_hour", "checksum": {"name": "none", "checksum": ""}, "tags": [], "refs": [["stg_tiktok_ads__campaign_report_hourly"]], "sources": [], "description": "", "columns": {}, "meta": {}, "docs": {"show": true}, "patch_path": null, "compiled_path": "target/compiled/tiktok_ads_source/models/stg_tiktok_ads.yml/not_null_stg_tiktok_ads__campaign_report_hourly_stat_time_hour.sql", "build_path": null, "deferred": false, "unrendered_config": {}, "created_at": 1661544122.1256478, "compiled_sql": "\n \n \n\nselect *\nfrom \"postgres\".\"tiktok_ads_source_integration_tests_1_stg_tiktok_ads\".\"stg_tiktok_ads__campaign_report_hourly\"\nwhere stat_time_hour is null\n\n\n", "extra_ctes_injected": true, "extra_ctes": [], "relation_name": null, "column_name": "stat_time_hour", "file_key_name": "models.stg_tiktok_ads__campaign_report_hourly"}, "test.tiktok_ads_source.dbt_utils_unique_combination_of_columns_stg_tiktok_ads__campaign_report_hourly_campaign_id__stat_time_hour.8e4a1e4b34": {"raw_sql": "{{ dbt_utils.test_unique_combination_of_columns(**_dbt_generic_test_kwargs) }}{{ config(alias=\"dbt_utils_unique_combination_o_28d20c1f14a23926a21e229d68eb6b16\") }}", "test_metadata": {"name": "unique_combination_of_columns", "kwargs": {"combination_of_columns": ["campaign_id", "stat_time_hour"], "model": "{{ get_where_subquery(ref('stg_tiktok_ads__campaign_report_hourly')) }}"}, "namespace": "dbt_utils"}, "compiled": true, "resource_type": "test", "depends_on": {"macros": ["macro.dbt_utils.test_unique_combination_of_columns", "macro.dbt.get_where_subquery"], "nodes": ["model.tiktok_ads_source.stg_tiktok_ads__campaign_report_hourly"]}, "config": {"enabled": true, "alias": "dbt_utils_unique_combination_o_28d20c1f14a23926a21e229d68eb6b16", "schema": "dbt_test__audit", "database": null, "tags": [], "meta": {}, "materialized": "test", "severity": "ERROR", "store_failures": null, "where": null, "limit": null, "fail_calc": "count(*)", "warn_if": "!= 0", "error_if": "!= 0"}, "database": "postgres", "schema": "tiktok_ads_source_integration_tests_1_dbt_test__audit", "fqn": ["tiktok_ads_source", "dbt_utils_unique_combination_of_columns_stg_tiktok_ads__campaign_report_hourly_campaign_id__stat_time_hour"], "unique_id": "test.tiktok_ads_source.dbt_utils_unique_combination_of_columns_stg_tiktok_ads__campaign_report_hourly_campaign_id__stat_time_hour.8e4a1e4b34", "package_name": "tiktok_ads_source", "root_path": "/Users/joseph.markiewicz/Documents/dbt_packages/ad_reporting/tiktok/dbt_tiktok_ads_source/integration_tests/dbt_packages/tiktok_ads_source", "path": "dbt_utils_unique_combination_o_28d20c1f14a23926a21e229d68eb6b16.sql", "original_file_path": "models/stg_tiktok_ads.yml", "name": "dbt_utils_unique_combination_of_columns_stg_tiktok_ads__campaign_report_hourly_campaign_id__stat_time_hour", "alias": "dbt_utils_unique_combination_o_28d20c1f14a23926a21e229d68eb6b16", "checksum": {"name": "none", "checksum": ""}, "tags": [], "refs": [["stg_tiktok_ads__campaign_report_hourly"]], "sources": [], "description": "", "columns": {}, "meta": {}, "docs": {"show": true}, "patch_path": null, "compiled_path": "target/compiled/tiktok_ads_source/models/stg_tiktok_ads.yml/dbt_utils_unique_combination_o_28d20c1f14a23926a21e229d68eb6b16.sql", "build_path": null, "deferred": false, "unrendered_config": {"alias": "dbt_utils_unique_combination_o_28d20c1f14a23926a21e229d68eb6b16"}, "created_at": 1661544122.127014, "compiled_sql": "\n\n\n\n\n\nwith validation_errors as (\n\n select\n campaign_id, stat_time_hour\n from \"postgres\".\"tiktok_ads_source_integration_tests_1_stg_tiktok_ads\".\"stg_tiktok_ads__campaign_report_hourly\"\n group by campaign_id, stat_time_hour\n having count(*) > 1\n\n)\n\nselect *\nfrom validation_errors\n\n\n", "extra_ctes_injected": true, "extra_ctes": [], "relation_name": null, "column_name": null, "file_key_name": "models.stg_tiktok_ads__campaign_report_hourly"}}, "sources": {"source.tiktok_ads_source.tiktok_ads.advertiser": {"fqn": ["tiktok_ads_source", "tiktok_ads", "advertiser"], "database": "postgres", "schema": "tiktok_ads_source_integration_tests_1", "unique_id": "source.tiktok_ads_source.tiktok_ads.advertiser", "package_name": "tiktok_ads_source", "root_path": "/Users/joseph.markiewicz/Documents/dbt_packages/ad_reporting/tiktok/dbt_tiktok_ads_source/integration_tests/dbt_packages/tiktok_ads_source", "path": "models/src_tiktok_ads.yml", "original_file_path": "models/src_tiktok_ads.yml", "name": "advertiser", "source_name": "tiktok_ads", "source_description": "", "loader": "fivetran", "identifier": "tiktok_advertiser_data", "resource_type": "source", "quoting": {"database": null, "schema": null, "identifier": null, "column": null}, "loaded_at_field": "_fivetran_synced", "freshness": {"warn_after": {"count": 48, "period": "hour"}, "error_after": {"count": 168, "period": "hour"}, "filter": null}, "external": null, "description": "Each record represents data for one advertiser.", "columns": {"id": {"name": "id", "description": "Advertiser ID", "meta": {}, "data_type": null, "quote": null, "tags": []}, "address": {"name": "address", "description": "Advertiser address information", "meta": {}, "data_type": null, "quote": null, "tags": []}, "balance": {"name": "balance", "description": "Account available balance", "meta": {}, "data_type": null, "quote": null, "tags": []}, "company": {"name": "company", "description": "Advertiser's company name", "meta": {}, "data_type": null, "quote": null, "tags": []}, "contacter": {"name": "contacter", "description": "Contact Person", "meta": {}, "data_type": null, "quote": null, "tags": []}, "country": {"name": "country", "description": "The advertiser's country", "meta": {}, "data_type": null, "quote": null, "tags": []}, "create_time": {"name": "create_time", "description": "Advertiser's create time", "meta": {}, "data_type": null, "quote": null, "tags": []}, "currency": {"name": "currency", "description": "Type of currency used by advertisers", "meta": {}, "data_type": null, "quote": null, "tags": []}, "description": {"name": "description", "description": "Brand description, i.e. promotional content", "meta": {}, "data_type": null, "quote": null, "tags": []}, "email": {"name": "email", "description": "Advertiser contact email, desensitised data", "meta": {}, "data_type": null, "quote": null, "tags": []}, "industry": {"name": "industry", "description": "Advertiser industry category", "meta": {}, "data_type": null, "quote": null, "tags": []}, "language": {"name": "language", "description": "Language used by advertisers", "meta": {}, "data_type": null, "quote": null, "tags": []}, "license_no": {"name": "license_no", "description": "License number", "meta": {}, "data_type": null, "quote": null, "tags": []}, "license_url": {"name": "license_url", "description": "License preview address, the link is valid for an hour by default.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "name": {"name": "name", "description": "Advertiser name", "meta": {}, "data_type": null, "quote": null, "tags": []}, "phone_number": {"name": "phone_number", "description": "Contact mobile number, desensitised data", "meta": {}, "data_type": null, "quote": null, "tags": []}, "promotion_area": {"name": "promotion_area", "description": "Operation area", "meta": {}, "data_type": null, "quote": null, "tags": []}, "reason": {"name": "reason", "description": "Reason for rejection", "meta": {}, "data_type": null, "quote": null, "tags": []}, "role": {"name": "role", "description": "Advertiser role", "meta": {}, "data_type": null, "quote": null, "tags": []}, "status": {"name": "status", "description": "Advertiser status", "meta": {}, "data_type": null, "quote": null, "tags": []}, "telephone": {"name": "telephone", "description": "Fixed phone number, desensitised data", "meta": {}, "data_type": null, "quote": null, "tags": []}, "timezone": {"name": "timezone", "description": "Ad account time zone including GMT offset", "meta": {}, "data_type": null, "quote": null, "tags": []}, "_fivetran_synced": {"name": "_fivetran_synced", "description": "Timestamp of when Fivetran synced a record.", "meta": {}, "data_type": null, "quote": null, "tags": []}}, "meta": {}, "source_meta": {}, "tags": [], "config": {"enabled": true}, "patch_path": null, "unrendered_config": {}, "relation_name": "\"postgres\".\"tiktok_ads_source_integration_tests_1\".\"tiktok_advertiser_data\"", "created_at": 1661544122.1299121}, "source.tiktok_ads_source.tiktok_ads.campaign_history": {"fqn": ["tiktok_ads_source", "tiktok_ads", "campaign_history"], "database": "postgres", "schema": "tiktok_ads_source_integration_tests_1", "unique_id": "source.tiktok_ads_source.tiktok_ads.campaign_history", "package_name": "tiktok_ads_source", "root_path": "/Users/joseph.markiewicz/Documents/dbt_packages/ad_reporting/tiktok/dbt_tiktok_ads_source/integration_tests/dbt_packages/tiktok_ads_source", "path": "models/src_tiktok_ads.yml", "original_file_path": "models/src_tiktok_ads.yml", "name": "campaign_history", "source_name": "tiktok_ads", "source_description": "", "loader": "fivetran", "identifier": "tiktok_campaign_history_data", "resource_type": "source", "quoting": {"database": null, "schema": null, "identifier": null, "column": null}, "loaded_at_field": "_fivetran_synced", "freshness": {"warn_after": {"count": 48, "period": "hour"}, "error_after": {"count": 168, "period": "hour"}, "filter": null}, "external": null, "description": "Each record represents a version of a TikTok campaign.", "columns": {"campaign_id": {"name": "campaign_id", "description": "Campaign ID", "meta": {}, "data_type": null, "quote": null, "tags": []}, "updated_at": {"name": "updated_at", "description": "Time the record was updated.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "advertiser_id": {"name": "advertiser_id", "description": "Advertiser ID", "meta": {}, "data_type": null, "quote": null, "tags": []}, "budget": {"name": "budget", "description": "Campaign budget", "meta": {}, "data_type": null, "quote": null, "tags": []}, "budget_mode": {"name": "budget_mode", "description": "Budget type", "meta": {}, "data_type": null, "quote": null, "tags": []}, "campaign_name": {"name": "campaign_name", "description": "Campaign name", "meta": {}, "data_type": null, "quote": null, "tags": []}, "campaign_type": {"name": "campaign_type", "description": "Campaign Type, indicates the campaign is a regular campaign or iOS 14 campaign.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "create_time": {"name": "create_time", "description": "Time at which the campaign was created.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "is_new_structure": {"name": "is_new_structure", "description": "Whether the campaign is a new structure (for the same campaign, the structure of campaign, adgroups and ads are the same)", "meta": {}, "data_type": null, "quote": null, "tags": []}, "objective_type": {"name": "objective_type", "description": "Advertising objective.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "opt_status": {"name": "opt_status", "description": "Operation status.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "status": {"name": "status", "description": "Campaign status", "meta": {}, "data_type": null, "quote": null, "tags": []}, "split_test_variable": {"name": "split_test_variable", "description": "Split Test variables. Optional values; TARGETING, BIDDING_OPTIMIZATION , CREATIVE.", "meta": {}, "data_type": null, "quote": null, "tags": []}}, "meta": {}, "source_meta": {}, "tags": [], "config": {"enabled": true}, "patch_path": null, "unrendered_config": {}, "relation_name": "\"postgres\".\"tiktok_ads_source_integration_tests_1\".\"tiktok_campaign_history_data\"", "created_at": 1661544122.130006}, "source.tiktok_ads_source.tiktok_ads.adgroup_history": {"fqn": ["tiktok_ads_source", "tiktok_ads", "adgroup_history"], "database": "postgres", "schema": "tiktok_ads_source_integration_tests_1", "unique_id": "source.tiktok_ads_source.tiktok_ads.adgroup_history", "package_name": "tiktok_ads_source", "root_path": "/Users/joseph.markiewicz/Documents/dbt_packages/ad_reporting/tiktok/dbt_tiktok_ads_source/integration_tests/dbt_packages/tiktok_ads_source", "path": "models/src_tiktok_ads.yml", "original_file_path": "models/src_tiktok_ads.yml", "name": "adgroup_history", "source_name": "tiktok_ads", "source_description": "", "loader": "fivetran", "identifier": "tiktok_adgroup_history_data", "resource_type": "source", "quoting": {"database": null, "schema": null, "identifier": null, "column": null}, "loaded_at_field": "_fivetran_synced", "freshness": {"warn_after": {"count": 48, "period": "hour"}, "error_after": {"count": 168, "period": "hour"}, "filter": null}, "external": null, "description": "Each record represents a version of a TikTok ad group.", "columns": {"adgroup_id": {"name": "adgroup_id", "description": "Ad group ID", "meta": {}, "data_type": null, "quote": null, "tags": []}, "updated_at": {"name": "updated_at", "description": "Time the record was updated.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "advertiser_id": {"name": "advertiser_id", "description": "Advertiser ID", "meta": {}, "data_type": null, "quote": null, "tags": []}, "campaign_id": {"name": "campaign_id", "description": "The Ad group's campaign ID.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "action_categories": {"name": "action_categories", "description": "IDs of the action categories (behaviors) that you want to target.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "action_days": {"name": "action_days", "description": "The number of days of the time period to include action from.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "adgroup_name": {"name": "adgroup_name", "description": "Ad group name. Character limit is 512 and cannot contain emoji.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "age": {"name": "age", "description": "Age groups you want to target.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "android_osv": {"name": "android_osv", "description": "Minimum Android version.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "app_download_url": {"name": "app_download_url", "description": "App download link", "meta": {}, "data_type": null, "quote": null, "tags": []}, "app_id": {"name": "app_id", "description": "The Application id of the promoted app", "meta": {}, "data_type": null, "quote": null, "tags": []}, "app_name": {"name": "app_name", "description": "App name.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "app_type": {"name": "app_type", "description": "App type.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "audience": {"name": "audience", "description": "A list of audience IDs.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "audience_type": {"name": "audience_type", "description": "Audience Type", "meta": {}, "data_type": null, "quote": null, "tags": []}, "bid": {"name": "bid", "description": "CPC, CPM bidding, oCPM learning bidding", "meta": {}, "data_type": null, "quote": null, "tags": []}, "bid_type": {"name": "bid_type", "description": "Bidding Strategy", "meta": {}, "data_type": null, "quote": null, "tags": []}, "billing_event": {"name": "billing_event", "description": "Bid method.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "budget": {"name": "budget", "description": "Ad budget. Returns 0.0 when Campaign Budget Optimization (budget_optimize_switch) is on.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "budget_mode": {"name": "budget_mode", "description": "Budget mode. This field will be ignored when Campaign Budget Optimization (budget_optimize_switch) is enabled.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "carriers": {"name": "carriers", "description": "Carriers that you want to target.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "category": {"name": "category", "description": "Ad group category.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "click_tracking_url": {"name": "click_tracking_url", "description": "Click monitoring URL.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "connection_type": {"name": "connection_type", "description": "Device connection types that you want to target. Default; unlimited.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "conversion_bid": {"name": "conversion_bid", "description": "oCPM conversion bid", "meta": {}, "data_type": null, "quote": null, "tags": []}, "cpv_video_duration": {"name": "cpv_video_duration", "description": "Video playback duration, required if optimize_goal is VIDEO_VIEW. Allowed values; SIX_SECONDS (video playback 6s), TWO_SECONDS (video playback 2s)\n", "meta": {}, "data_type": null, "quote": null, "tags": []}, "creative_material_mode": {"name": "creative_material_mode", "description": "Creative delivery mode.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "dayparting": {"name": "dayparting", "description": "Ad delivery period, the default is always and the format is 48 * 7 character string, represented by 0 or 1. > That is, with half an hour as the minimum granularity, a day (24 hours) is divided by the minimum granularity(30 mins) from Monday to Sunday. Resulting in a 48*7 format.0 represents not to be delivered, 1 represents delivery. no transmission, full transmission 0, full transmission 1 all represent full time delivery", "meta": {}, "data_type": null, "quote": null, "tags": []}, "deep_bid_type": {"name": "deep_bid_type", "description": "Bidding strategy for in-app events.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "deep_cpabid": {"name": "deep_cpabid", "description": "Deep bid", "meta": {}, "data_type": null, "quote": null, "tags": []}, "deep_external_action": {"name": "deep_external_action", "description": "Deep conversion event.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "display_name": {"name": "display_name", "description": "Display name of ad group.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "enable_inventory_filter": {"name": "enable_inventory_filter", "description": "Inventory filtering (Unsafe videos will not be displayed).", "meta": {}, "data_type": null, "quote": null, "tags": []}, "excluded_audience": {"name": "excluded_audience", "description": "A list of audience ID to be excluded.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "external_action": {"name": "external_action", "description": "Conversion event for the ad group. It is required when the promoted object is an app with tracking urls, or when pixel_id is specified.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "fallback_type": {"name": "fallback_type", "description": "Fallback Type. If the audience do not have the app installed, you can have them fall back to install the app, or to view a specific web page. Not applicable for Deferred Deeplink. Allowed values; APP_INSTALL, WEBSITE, UNSET. If website is chosen, you need to specify the url via landing_page_url field.\n", "meta": {}, "data_type": null, "quote": null, "tags": []}, "frequency": {"name": "frequency", "description": "frequency, together with frequency_schedule, controls how often people see your ad (only available for REACH ads). For example, frequency = 2 frequency_schedule = 3 means \"show ads no more than twice every 3 day\".\n", "meta": {}, "data_type": null, "quote": null, "tags": []}, "frequency_schedule": {"name": "frequency_schedule", "description": "frequency, together with frequency, controls how often people see your ad (only available for REACH ads).", "meta": {}, "data_type": null, "quote": null, "tags": []}, "gender": {"name": "gender", "description": "Gender that you want to target.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "impression_tracking_url": {"name": "impression_tracking_url", "description": "Display monitoring URL.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "interest_category_v2": {"name": "interest_category_v2", "description": "Interest classification. If the interest is specified, users that do not meet interest target will be excluded during delivery.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "ios_osv": {"name": "ios_osv", "description": "Minimum iOS version.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "is_comment_disable": {"name": "is_comment_disable", "description": "Whether to allow comments on your ads on TikTok, Vigo, Helo.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "is_hfss": {"name": "is_hfss", "description": "Whether the promoted content is HFSS foods (foods that are high in fat, salt, or sugar).", "meta": {}, "data_type": null, "quote": null, "tags": []}, "is_new_structure": {"name": "is_new_structure", "description": "Whether the campaign is a new structure.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "keywords": {"name": "keywords", "description": "Keywords used.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "landing_page_url": {"name": "landing_page_url", "description": "Landing page URL.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "languages": {"name": "languages", "description": "Codes of the languages that you want to target.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "location": {"name": "location", "description": "IDs of the locations that you want to target.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "open_url": {"name": "open_url", "description": "The specific location where you want your audience to go if they have your app installed.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "open_url_type": {"name": "open_url_type", "description": "The open URL type.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "operation_system": {"name": "operation_system", "description": "Device operating systems that you want to target.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "opt_status": {"name": "opt_status", "description": "Operation status.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "optimize_goal": {"name": "optimize_goal", "description": "Optimization goal.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "pacing": {"name": "pacing", "description": "You can choose between PACING_MODE_SMOOTH and PACING_MODE_FAST. For PACING_MODE_SMOOTH, the budget is allocated evenly within the scheduled time. PACING_MODE_FAST would consume budget and produce results as soon as possible. \n", "meta": {}, "data_type": null, "quote": null, "tags": []}, "package": {"name": "package", "description": "Package name.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "pangle_block_app_list_id": {"name": "pangle_block_app_list_id", "description": "Pangle app block list ID.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "pixel_id": {"name": "pixel_id", "description": "Pixel ID. Only application for landing pages.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "placement": {"name": "placement", "description": "The apps where you want to deliver your ads.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "placement_type": {"name": "placement_type", "description": "Placement type.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "profile_image": {"name": "profile_image", "description": "Avatar URL.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "schedule_end_time": {"name": "schedule_end_time", "description": "Ad delivery end time (UTC+0). Format should be YYYY-MM-DD HH:MM:SS", "meta": {}, "data_type": null, "quote": null, "tags": []}, "schedule_start_time": {"name": "schedule_start_time", "description": "Ad delivery start time (UTC+0). Format should be YYYY-MM-DD HH:MM:SS", "meta": {}, "data_type": null, "quote": null, "tags": []}, "schedule_type": {"name": "schedule_type", "description": "The schedule type, which can be either SCHEDULE_START_END or SCHEDULE_FROM_NOW.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "skip_learning_phase": {"name": "skip_learning_phase", "description": "Whether to skip the learning stage.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "statistic_type": {"name": "statistic_type", "description": "conversion bid statistic type", "meta": {}, "data_type": null, "quote": null, "tags": []}, "status": {"name": "status", "description": "Ad group status", "meta": {}, "data_type": null, "quote": null, "tags": []}, "video_actions": {"name": "video_actions", "description": "Number of video actions.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "video_download": {"name": "video_download", "description": "Whether users can download your video ads on TikTok(cannot be updated once created).", "meta": {}, "data_type": null, "quote": null, "tags": []}}, "meta": {}, "source_meta": {}, "tags": [], "config": {"enabled": true}, "patch_path": null, "unrendered_config": {}, "relation_name": "\"postgres\".\"tiktok_ads_source_integration_tests_1\".\"tiktok_adgroup_history_data\"", "created_at": 1661544122.130144}, "source.tiktok_ads_source.tiktok_ads.ad_history": {"fqn": ["tiktok_ads_source", "tiktok_ads", "ad_history"], "database": "postgres", "schema": "tiktok_ads_source_integration_tests_1", "unique_id": "source.tiktok_ads_source.tiktok_ads.ad_history", "package_name": "tiktok_ads_source", "root_path": "/Users/joseph.markiewicz/Documents/dbt_packages/ad_reporting/tiktok/dbt_tiktok_ads_source/integration_tests/dbt_packages/tiktok_ads_source", "path": "models/src_tiktok_ads.yml", "original_file_path": "models/src_tiktok_ads.yml", "name": "ad_history", "source_name": "tiktok_ads", "source_description": "", "loader": "fivetran", "identifier": "tiktok_ad_history_data", "resource_type": "source", "quoting": {"database": null, "schema": null, "identifier": null, "column": null}, "loaded_at_field": "_fivetran_synced", "freshness": {"warn_after": {"count": 48, "period": "hour"}, "error_after": {"count": 168, "period": "hour"}, "filter": null}, "external": null, "description": "Each record represents a version of a TikTok ad.", "columns": {"ad_id": {"name": "ad_id", "description": "Ad ID", "meta": {}, "data_type": null, "quote": null, "tags": []}, "updated_at": {"name": "updated_at", "description": "Time the record was updated.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "adgroup_id": {"name": "adgroup_id", "description": "Ad group ID", "meta": {}, "data_type": null, "quote": null, "tags": []}, "advertiser_id": {"name": "advertiser_id", "description": "Advertiser ID", "meta": {}, "data_type": null, "quote": null, "tags": []}, "campaign_id": {"name": "campaign_id", "description": "Campaign ID", "meta": {}, "data_type": null, "quote": null, "tags": []}, "ad_name": {"name": "ad_name", "description": "Ad Name.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "ad_text": {"name": "ad_text", "description": "The ad text.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "app_name": {"name": "app_name", "description": "The display name of app download ad.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "call_to_action": {"name": "call_to_action", "description": "Call to action values.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "click_tracking_url": {"name": "click_tracking_url", "description": "Click monitoring URL.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "create_time": {"name": "create_time", "description": "Time at which the ad was created.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "display_name": {"name": "display_name", "description": "The display name of landing page or pure exposure ad.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "image_ids": {"name": "image_ids", "description": "A list of image IDs.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "impression_tracking_url": {"name": "impression_tracking_url", "description": "Display monitoring URL.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "is_aco": {"name": "is_aco", "description": "Whether the ad is an automated ad.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "is_creative_authorized": {"name": "is_creative_authorized", "description": "Whether you grant displaying some of your ads in our TikTok For Business Creative Center. Only valid for non-US advertisers, the default value is false.\n", "meta": {}, "data_type": null, "quote": null, "tags": []}, "is_new_structure": {"name": "is_new_structure", "description": "Whether the campaign is a new structure.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "landing_page_url": {"name": "landing_page_url", "description": "Landing page URL.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "open_url": {"name": "open_url", "description": "The specific location where you want your audience to go if they have your app installed.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "opt_status": {"name": "opt_status", "description": "Operation status.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "playable_url": {"name": "playable_url", "description": "Playable material url.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "profile_image": {"name": "profile_image", "description": "Avatar URL.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "status": {"name": "status", "description": "Ad status.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "video_id": {"name": "video_id", "description": "The video ID.", "meta": {}, "data_type": null, "quote": null, "tags": []}}, "meta": {}, "source_meta": {}, "tags": [], "config": {"enabled": true}, "patch_path": null, "unrendered_config": {}, "relation_name": "\"postgres\".\"tiktok_ads_source_integration_tests_1\".\"tiktok_ad_history_data\"", "created_at": 1661544122.130238}, "source.tiktok_ads_source.tiktok_ads.ad_report_hourly": {"fqn": ["tiktok_ads_source", "tiktok_ads", "ad_report_hourly"], "database": "postgres", "schema": "tiktok_ads_source_integration_tests_1", "unique_id": "source.tiktok_ads_source.tiktok_ads.ad_report_hourly", "package_name": "tiktok_ads_source", "root_path": "/Users/joseph.markiewicz/Documents/dbt_packages/ad_reporting/tiktok/dbt_tiktok_ads_source/integration_tests/dbt_packages/tiktok_ads_source", "path": "models/src_tiktok_ads.yml", "original_file_path": "models/src_tiktok_ads.yml", "name": "ad_report_hourly", "source_name": "tiktok_ads", "source_description": "", "loader": "fivetran", "identifier": "tiktok_ad_report_hourly_data", "resource_type": "source", "quoting": {"database": null, "schema": null, "identifier": null, "column": null}, "loaded_at_field": "_fivetran_synced", "freshness": {"warn_after": {"count": 48, "period": "hour"}, "error_after": {"count": 168, "period": "hour"}, "filter": null}, "external": null, "description": "Each record represents data for each ad for each hour.", "columns": {"ad_id": {"name": "ad_id", "description": "Ad id", "meta": {}, "data_type": null, "quote": null, "tags": []}, "stat_time_hour": {"name": "stat_time_hour", "description": "Hour of activity", "meta": {}, "data_type": null, "quote": null, "tags": []}, "cost_per_conversion": {"name": "cost_per_conversion", "description": "The average amount of money you've spent on a conversion. (The total count is calculated based on the time each ad impression occurred.)\n", "meta": {}, "data_type": null, "quote": null, "tags": []}, "real_time_conversion": {"name": "real_time_conversion", "description": "The number of times your ad achieved an outcome, based on the objective and settings you selected. (The total count is based on when the conversion actually happened.)\n", "meta": {}, "data_type": null, "quote": null, "tags": []}, "cpc": {"name": "cpc", "description": "The average amount of money you've spent on a click.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "video_play_actions": {"name": "video_play_actions", "description": "The number of times your video starts to play. Replays will not be counted.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "conversion_rate": {"name": "conversion_rate", "description": "The percentage of results you received out of all the clicks of your ads. (The total count is calculated based on the time each ad impression occurred.)\n", "meta": {}, "data_type": null, "quote": null, "tags": []}, "video_views_p_75": {"name": "video_views_p_75", "description": "The number of times your video was played at 75% of its length. Replays will not be counted.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "result": {"name": "result", "description": "The number of times your ad achieved an outcome, based on the optimization goal you selected. As one campaign may have a number of different optimization goals, this statistic is not supported for campaigns. Please go to ad groups or ads to view the results. (The total count is calculated based on the time each ad impression occurred.)\n", "meta": {}, "data_type": null, "quote": null, "tags": []}, "video_views_p_50": {"name": "video_views_p_50", "description": "The number of times your video was played at 50% of its length. Replays will not be counted.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "impressions": {"name": "impressions", "description": "The number of times your ads were on screen.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "comments": {"name": "comments", "description": "The number of comments your video creative received within 1 day of a user seeing a paid ad.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "real_time_cost_per_result": {"name": "real_time_cost_per_result", "description": "As a campaign may have different optimization goals, the total number of result is not supported in campaign section now, please go to the ad group section to view the cost per Result. (The total count is based on when the conversion actually happened.)\n", "meta": {}, "data_type": null, "quote": null, "tags": []}, "conversion": {"name": "conversion", "description": "The number of times your ad achieved an outcome, based on the secondary goal you selected. As one campaign may have a number of different secondary goals, this statistic is not supported for campaigns. Please go to ad groups or ads to view. (The total count is calculated based on the time each ad impression occurred.)\n", "meta": {}, "data_type": null, "quote": null, "tags": []}, "real_time_result": {"name": "real_time_result", "description": "The number of times your ad achieved an outcome, based on the optimization goal you selected. As a campaign may have different optimization goals, the total number of result is not supported in campaign section now , Please go to the ad group section to view the result. (The total count is based on when the conversion actually happened.)\n", "meta": {}, "data_type": null, "quote": null, "tags": []}, "video_view_p_100": {"name": "video_view_p_100", "description": "The number of times your video was played at 100% of its length. Replays will not be counted.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "shares": {"name": "shares", "description": "The number of shares your video creative received within 1 day of a user seeing a paid ad.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "real_time_conversion_rate": {"name": "real_time_conversion_rate", "description": "The percentage of results you received out of all the clicks of your ads. (The total count is based on when the conversion actually happened.)", "meta": {}, "data_type": null, "quote": null, "tags": []}, "cost_per_secondary_goal_result": {"name": "cost_per_secondary_goal_result", "description": "The average cost for each secondary goal result from your adverts. As one campaign may have a number of different secondary goals, this statistic is not supported for campaigns. Please go to ad groups or ads to view. (The total count is calculated based on the time each ad impression occurred.)\n", "meta": {}, "data_type": null, "quote": null, "tags": []}, "secondary_goal_result_rate": {"name": "secondary_goal_result_rate", "description": "The percentage of secondary goal results you achieved out of all of the installs of your adverts. As one campaign may have a number of different secondary goals, this statistic is not supported for campaigns. Please go to ad groups or ads to view. The total count is calculated based on the time each ad impression occurred.\n", "meta": {}, "data_type": null, "quote": null, "tags": []}, "clicks": {"name": "clicks", "description": "The number of clicks on your ads.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "cost_per_1000_reached": {"name": "cost_per_1000_reached", "description": "The average cost to reach 1,000 unique users. This metric is estimated.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "video_views_p_25": {"name": "video_views_p_25", "description": "The number of times your video was played at 25% of its length. Replays will not be counted.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "reach": {"name": "reach", "description": "The number of unique users who saw your ads at least once. This metric is estimated.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "real_time_cost_per_conversion": {"name": "real_time_cost_per_conversion", "description": "The average amount of money you've spent on a conversion. (The total count is based on when the conversion actually happened.)", "meta": {}, "data_type": null, "quote": null, "tags": []}, "profile_visits_rate": {"name": "profile_visits_rate", "description": "The rate of profile visits per impression the paid ad drove during the campaign. This metric is only for Boosted TikToks.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "average_video_play": {"name": "average_video_play", "description": "The average time your video was played per single video view, including any time spent replaying the video.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "profile_visits": {"name": "profile_visits", "description": "The number of profile visits the ad drove during the campaign. This metric is only for Boosted TikToks.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "cpm": {"name": "cpm", "description": "The average amount of money you've spent per 1,000 impressions.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "ctr": {"name": "ctr", "description": "The percentage of times people saw your ad and performed a click.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "video_watched_2_s": {"name": "video_watched_2_s", "description": "The number of times your video played for at least 2 seconds. Replays will not be counted.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "follows": {"name": "follows", "description": "The number of new followers that were gained within 1 day of a user seeing a paid ad. This metric is only for Boosted TikToks.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "result_rate": {"name": "result_rate", "description": "The percentage of results you achieved out of all of the views/clicks on your ads. As one campaign may have a number of different optimization goals, this statistic is not supported for campaigns. Please go to ad groups or ads to view the result rate. (The total count is calculated based on the time each ad impression occurred.)\n", "meta": {}, "data_type": null, "quote": null, "tags": []}, "video_watched_6_s": {"name": "video_watched_6_s", "description": "The number of times your video played for at least 6 seconds, or completely played. Replays will not be counted.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "secondary_goal_result": {"name": "secondary_goal_result", "description": "The number of times your ad achieved an outcome, based on the secondary goal you selected. As one campaign may have a number of different secondary goals, this statistic is not supported for campaigns. Please go to ad groups or ads to view. (The total count is calculated based on the time each ad impression occurred.)\n", "meta": {}, "data_type": null, "quote": null, "tags": []}, "cost_per_result": {"name": "cost_per_result", "description": "The average cost for each result from your ads. As one campaign may have a number of different optimization goals, this statistic is not supported for campaigns. Please go to ad groups or ads to view the cost per result. (The total count is calculated based on the time each ad impression occurred.)\n", "meta": {}, "data_type": null, "quote": null, "tags": []}, "average_video_play_per_user": {"name": "average_video_play_per_user", "description": "The average time your video was played per person, including any time spent replaying the video. This metric is estimated.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "real_time_result_rate": {"name": "real_time_result_rate", "description": "As a campaign may have different optimization goals, the total number of result is not supported in campaign section now ,Please go to the ad group section to view the Result Rate. (The total count is based on when the conversion actually happened.)", "meta": {}, "data_type": null, "quote": null, "tags": []}, "spend": {"name": "spend", "description": "The estimated total amount of money you've spent on your campaign, ad group or ad during its schedule.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "likes": {"name": "likes", "description": "The number of likes your video creative received within 1 day of a user seeing a paid ad.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "_fivetran_synced": {"name": "_fivetran_synced", "description": "Timestamp of when Fivetran synced a record.", "meta": {}, "data_type": null, "quote": null, "tags": []}}, "meta": {}, "source_meta": {}, "tags": [], "config": {"enabled": true}, "patch_path": null, "unrendered_config": {}, "relation_name": "\"postgres\".\"tiktok_ads_source_integration_tests_1\".\"tiktok_ad_report_hourly_data\"", "created_at": 1661544122.130354}, "source.tiktok_ads_source.tiktok_ads.campaign_report_hourly": {"fqn": ["tiktok_ads_source", "tiktok_ads", "campaign_report_hourly"], "database": "postgres", "schema": "tiktok_ads_source_integration_tests_1", "unique_id": "source.tiktok_ads_source.tiktok_ads.campaign_report_hourly", "package_name": "tiktok_ads_source", "root_path": "/Users/joseph.markiewicz/Documents/dbt_packages/ad_reporting/tiktok/dbt_tiktok_ads_source/integration_tests/dbt_packages/tiktok_ads_source", "path": "models/src_tiktok_ads.yml", "original_file_path": "models/src_tiktok_ads.yml", "name": "campaign_report_hourly", "source_name": "tiktok_ads", "source_description": "", "loader": "fivetran", "identifier": "tiktok_campaign_report_hourly_data", "resource_type": "source", "quoting": {"database": null, "schema": null, "identifier": null, "column": null}, "loaded_at_field": "_fivetran_synced", "freshness": {"warn_after": {"count": 48, "period": "hour"}, "error_after": {"count": 168, "period": "hour"}, "filter": null}, "external": null, "description": "Each record represents data for each campaign for each hour.", "columns": {"campaign_id": {"name": "campaign_id", "description": "Campaign id", "meta": {}, "data_type": null, "quote": null, "tags": []}, "stat_time_hour": {"name": "stat_time_hour", "description": "Hour of activity", "meta": {}, "data_type": null, "quote": null, "tags": []}, "cost_per_conversion": {"name": "cost_per_conversion", "description": "The average amount of money you've spent on a conversion. (The total count is calculated based on the time each ad impression occurred.)\n", "meta": {}, "data_type": null, "quote": null, "tags": []}, "real_time_conversion": {"name": "real_time_conversion", "description": "The number of times your ad achieved an outcome, based on the objective and settings you selected. (The total count is based on when the conversion actually happened.)\n", "meta": {}, "data_type": null, "quote": null, "tags": []}, "cpc": {"name": "cpc", "description": "The average amount of money you've spent on a click.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "video_play_actions": {"name": "video_play_actions", "description": "The number of times your video starts to play. Replays will not be counted.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "conversion_rate": {"name": "conversion_rate", "description": "The percentage of results you received out of all the clicks of your ads. (The total count is calculated based on the time each ad impression occurred.)\n", "meta": {}, "data_type": null, "quote": null, "tags": []}, "video_views_p_75": {"name": "video_views_p_75", "description": "The number of times your video was played at 75% of its length. Replays will not be counted.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "result": {"name": "result", "description": "The number of times your ad achieved an outcome, based on the optimization goal you selected. As one campaign may have a number of different optimization goals, this statistic is not supported for campaigns. Please go to ad groups or ads to view the results. (The total count is calculated based on the time each ad impression occurred.)\n", "meta": {}, "data_type": null, "quote": null, "tags": []}, "video_views_p_50": {"name": "video_views_p_50", "description": "The number of times your video was played at 50% of its length. Replays will not be counted.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "impressions": {"name": "impressions", "description": "The number of times your ads were on screen.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "comments": {"name": "comments", "description": "The number of comments your video creative received within 1 day of a user seeing a paid ad.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "real_time_cost_per_result": {"name": "real_time_cost_per_result", "description": "As a campaign may have different optimization goals, the total number of result is not supported in campaign section now, please go to the ad group section to view the cost per Result. (The total count is based on when the conversion actually happened.)\n", "meta": {}, "data_type": null, "quote": null, "tags": []}, "conversion": {"name": "conversion", "description": "The number of times your ad achieved an outcome, based on the secondary goal you selected. As one campaign may have a number of different secondary goals, this statistic is not supported for campaigns. Please go to ad groups or ads to view. (The total count is calculated based on the time each ad impression occurred.)\n", "meta": {}, "data_type": null, "quote": null, "tags": []}, "real_time_result": {"name": "real_time_result", "description": "The number of times your ad achieved an outcome, based on the optimization goal you selected. As a campaign may have different optimization goals, the total number of result is not supported in campaign section now , Please go to the ad group section to view the result. (The total count is based on when the conversion actually happened.)\n", "meta": {}, "data_type": null, "quote": null, "tags": []}, "video_view_p_100": {"name": "video_view_p_100", "description": "The number of times your video was played at 100% of its length. Replays will not be counted.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "shares": {"name": "shares", "description": "The number of shares your video creative received within 1 day of a user seeing a paid ad.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "real_time_conversion_rate": {"name": "real_time_conversion_rate", "description": "The percentage of results you received out of all the clicks of your ads. (The total count is based on when the conversion actually happened.)", "meta": {}, "data_type": null, "quote": null, "tags": []}, "cost_per_secondary_goal_result": {"name": "cost_per_secondary_goal_result", "description": "The average cost for each secondary goal result from your adverts. As one campaign may have a number of different secondary goals, this statistic is not supported for campaigns. Please go to ad groups or ads to view. (The total count is calculated based on the time each ad impression occurred.)\n", "meta": {}, "data_type": null, "quote": null, "tags": []}, "secondary_goal_result_rate": {"name": "secondary_goal_result_rate", "description": "The percentage of secondary goal results you achieved out of all of the installs of your adverts. As one campaign may have a number of different secondary goals, this statistic is not supported for campaigns. Please go to ad groups or ads to view. The total count is calculated based on the time each ad impression occurred.\n", "meta": {}, "data_type": null, "quote": null, "tags": []}, "clicks": {"name": "clicks", "description": "The number of clicks on your ads.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "cost_per_1000_reached": {"name": "cost_per_1000_reached", "description": "The average cost to reach 1,000 unique users. This metric is estimated.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "video_views_p_25": {"name": "video_views_p_25", "description": "The number of times your video was played at 25% of its length. Replays will not be counted.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "reach": {"name": "reach", "description": "The number of unique users who saw your ads at least once. This metric is estimated.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "real_time_cost_per_conversion": {"name": "real_time_cost_per_conversion", "description": "The average amount of money you've spent on a conversion. (The total count is based on when the conversion actually happened.)", "meta": {}, "data_type": null, "quote": null, "tags": []}, "profile_visits_rate": {"name": "profile_visits_rate", "description": "The rate of profile visits per impression the paid ad drove during the campaign. This metric is only for Boosted TikToks.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "average_video_play": {"name": "average_video_play", "description": "The average time your video was played per single video view, including any time spent replaying the video.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "profile_visits": {"name": "profile_visits", "description": "The number of profile visits the ad drove during the campaign. This metric is only for Boosted TikToks.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "cpm": {"name": "cpm", "description": "The average amount of money you've spent per 1,000 impressions.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "ctr": {"name": "ctr", "description": "The percentage of times people saw your ad and performed a click.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "video_watched_2_s": {"name": "video_watched_2_s", "description": "The number of times your video played for at least 2 seconds. Replays will not be counted.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "follows": {"name": "follows", "description": "The number of new followers that were gained within 1 day of a user seeing a paid ad. This metric is only for Boosted TikToks.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "result_rate": {"name": "result_rate", "description": "The percentage of results you achieved out of all of the views/clicks on your ads. As one campaign may have a number of different optimization goals, this statistic is not supported for campaigns. Please go to ad groups or ads to view the result rate. (The total count is calculated based on the time each ad impression occurred.)\n", "meta": {}, "data_type": null, "quote": null, "tags": []}, "video_watched_6_s": {"name": "video_watched_6_s", "description": "The number of times your video played for at least 6 seconds, or completely played. Replays will not be counted.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "secondary_goal_result": {"name": "secondary_goal_result", "description": "The number of times your ad achieved an outcome, based on the secondary goal you selected. As one campaign may have a number of different secondary goals, this statistic is not supported for campaigns. Please go to ad groups or ads to view. (The total count is calculated based on the time each ad impression occurred.)\n", "meta": {}, "data_type": null, "quote": null, "tags": []}, "cost_per_result": {"name": "cost_per_result", "description": "The average cost for each result from your ads. As one campaign may have a number of different optimization goals, this statistic is not supported for campaigns. Please go to ad groups or ads to view the cost per result. (The total count is calculated based on the time each ad impression occurred.)\n", "meta": {}, "data_type": null, "quote": null, "tags": []}, "average_video_play_per_user": {"name": "average_video_play_per_user", "description": "The average time your video was played per person, including any time spent replaying the video. This metric is estimated.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "real_time_result_rate": {"name": "real_time_result_rate", "description": "As a campaign may have different optimization goals, the total number of result is not supported in campaign section now ,Please go to the ad group section to view the Result Rate. (The total count is based on when the conversion actually happened.)\n", "meta": {}, "data_type": null, "quote": null, "tags": []}, "spend": {"name": "spend", "description": "The estimated total amount of money you've spent on your campaign, ad group or ad during its schedule.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "likes": {"name": "likes", "description": "The number of likes your video creative received within 1 day of a user seeing a paid ad.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "_fivetran_synced": {"name": "_fivetran_synced", "description": "Timestamp of when Fivetran synced a record.", "meta": {}, "data_type": null, "quote": null, "tags": []}}, "meta": {}, "source_meta": {}, "tags": [], "config": {"enabled": true}, "patch_path": null, "unrendered_config": {}, "relation_name": "\"postgres\".\"tiktok_ads_source_integration_tests_1\".\"tiktok_campaign_report_hourly_data\"", "created_at": 1661544122.130469}, "source.tiktok_ads_source.tiktok_ads.adgroup_report_hourly": {"fqn": ["tiktok_ads_source", "tiktok_ads", "adgroup_report_hourly"], "database": "postgres", "schema": "tiktok_ads_source_integration_tests_1", "unique_id": "source.tiktok_ads_source.tiktok_ads.adgroup_report_hourly", "package_name": "tiktok_ads_source", "root_path": "/Users/joseph.markiewicz/Documents/dbt_packages/ad_reporting/tiktok/dbt_tiktok_ads_source/integration_tests/dbt_packages/tiktok_ads_source", "path": "models/src_tiktok_ads.yml", "original_file_path": "models/src_tiktok_ads.yml", "name": "adgroup_report_hourly", "source_name": "tiktok_ads", "source_description": "", "loader": "fivetran", "identifier": "tiktok_adgroup_report_hourly_data", "resource_type": "source", "quoting": {"database": null, "schema": null, "identifier": null, "column": null}, "loaded_at_field": "_fivetran_synced", "freshness": {"warn_after": {"count": 48, "period": "hour"}, "error_after": {"count": 168, "period": "hour"}, "filter": null}, "external": null, "description": "Each record represents data for each ad group for each hour.", "columns": {"adgroup_id": {"name": "adgroup_id", "description": "Ad group id", "meta": {}, "data_type": null, "quote": null, "tags": []}, "stat_time_hour": {"name": "stat_time_hour", "description": "Hour of activity", "meta": {}, "data_type": null, "quote": null, "tags": []}, "cost_per_conversion": {"name": "cost_per_conversion", "description": "The average amount of money you've spent on a conversion. (The total count is calculated based on the time each ad impression occurred.)\n", "meta": {}, "data_type": null, "quote": null, "tags": []}, "real_time_conversion": {"name": "real_time_conversion", "description": "The number of times your ad achieved an outcome, based on the objective and settings you selected. (The total count is based on when the conversion actually happened.)\n", "meta": {}, "data_type": null, "quote": null, "tags": []}, "cpc": {"name": "cpc", "description": "The average amount of money you've spent on a click.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "video_play_actions": {"name": "video_play_actions", "description": "The number of times your video starts to play. Replays will not be counted.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "conversion_rate": {"name": "conversion_rate", "description": "The percentage of results you received out of all the clicks of your ads. (The total count is calculated based on the time each ad impression occurred.)", "meta": {}, "data_type": null, "quote": null, "tags": []}, "video_views_p_75": {"name": "video_views_p_75", "description": "The number of times your video was played at 75% of its length. Replays will not be counted.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "result": {"name": "result", "description": "The number of times your ad achieved an outcome, based on the optimization goal you selected. As one campaign may have a number of different optimization goals, this statistic is not supported for campaigns. Please go to ad groups or ads to view the results. (The total count is calculated based on the time each ad impression occurred.)\n", "meta": {}, "data_type": null, "quote": null, "tags": []}, "video_views_p_50": {"name": "video_views_p_50", "description": "The number of times your video was played at 50% of its length. Replays will not be counted.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "impressions": {"name": "impressions", "description": "The number of times your ads were on screen.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "comments": {"name": "comments", "description": "The number of comments your video creative received within 1 day of a user seeing a paid ad.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "real_time_cost_per_result": {"name": "real_time_cost_per_result", "description": "As a campaign may have different optimization goals, the total number of result is not supported in campaign section now, please go to the ad group section to view the cost per Result. (The total count is based on when the conversion actually happened.)\n", "meta": {}, "data_type": null, "quote": null, "tags": []}, "conversion": {"name": "conversion", "description": "The number of times your ad achieved an outcome, based on the secondary goal you selected. As one campaign may have a number of different secondary goals, this statistic is not supported for campaigns. Please go to ad groups or ads to view. (The total count is calculated based on the time each ad impression occurred.)\n", "meta": {}, "data_type": null, "quote": null, "tags": []}, "real_time_result": {"name": "real_time_result", "description": "The number of times your ad achieved an outcome, based on the optimization goal you selected. As a campaign may have different optimization goals, the total number of result is not supported in campaign section now , Please go to the ad group section to view the result. (The total count is based on when the conversion actually happened.)\n", "meta": {}, "data_type": null, "quote": null, "tags": []}, "video_view_p_100": {"name": "video_view_p_100", "description": "The number of times your video was played at 100% of its length. Replays will not be counted.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "shares": {"name": "shares", "description": "The number of shares your video creative received within 1 day of a user seeing a paid ad.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "real_time_conversion_rate": {"name": "real_time_conversion_rate", "description": "The percentage of results you received out of all the clicks of your ads. (The total count is based on when the conversion actually happened.)", "meta": {}, "data_type": null, "quote": null, "tags": []}, "cost_per_secondary_goal_result": {"name": "cost_per_secondary_goal_result", "description": "The average cost for each secondary goal result from your adverts. As one campaign may have a number of different secondary goals, this statistic is not supported for campaigns. Please go to ad groups or ads to view. (The total count is calculated based on the time each ad impression occurred.)\n", "meta": {}, "data_type": null, "quote": null, "tags": []}, "secondary_goal_result_rate": {"name": "secondary_goal_result_rate", "description": "The percentage of secondary goal results you achieved out of all of the installs of your adverts. As one campaign may have a number of different secondary goals, this statistic is not supported for campaigns. Please go to ad groups or ads to view. The total count is calculated based on the time each ad impression occurred.\n", "meta": {}, "data_type": null, "quote": null, "tags": []}, "clicks": {"name": "clicks", "description": "The number of clicks on your ads.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "cost_per_1000_reached": {"name": "cost_per_1000_reached", "description": "The average cost to reach 1,000 unique users. This metric is estimated.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "video_views_p_25": {"name": "video_views_p_25", "description": "The number of times your video was played at 25% of its length. Replays will not be counted.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "reach": {"name": "reach", "description": "The number of unique users who saw your ads at least once. This metric is estimated.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "real_time_cost_per_conversion": {"name": "real_time_cost_per_conversion", "description": "The average amount of money you've spent on a conversion. (The total count is based on when the conversion actually happened.)", "meta": {}, "data_type": null, "quote": null, "tags": []}, "profile_visits_rate": {"name": "profile_visits_rate", "description": "The rate of profile visits per impression the paid ad drove during the campaign. This metric is only for Boosted TikToks.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "average_video_play": {"name": "average_video_play", "description": "The average time your video was played per single video view, including any time spent replaying the video.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "profile_visits": {"name": "profile_visits", "description": "The number of profile visits the ad drove during the campaign. This metric is only for Boosted TikToks.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "cpm": {"name": "cpm", "description": "The average amount of money you've spent per 1,000 impressions.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "ctr": {"name": "ctr", "description": "The percentage of times people saw your ad and performed a click.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "video_watched_2_s": {"name": "video_watched_2_s", "description": "The number of times your video played for at least 2 seconds. Replays will not be counted.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "follows": {"name": "follows", "description": "The number of new followers that were gained within 1 day of a user seeing a paid ad. This metric is only for Boosted TikToks.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "result_rate": {"name": "result_rate", "description": "The percentage of results you achieved out of all of the views/clicks on your ads. As one campaign may have a number of different optimization goals, this statistic is not supported for campaigns. Please go to ad groups or ads to view the result rate. (The total count is calculated based on the time each ad impression occurred.)\n", "meta": {}, "data_type": null, "quote": null, "tags": []}, "video_watched_6_s": {"name": "video_watched_6_s", "description": "The number of times your video played for at least 6 seconds, or completely played. Replays will not be counted.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "secondary_goal_result": {"name": "secondary_goal_result", "description": "The number of times your ad achieved an outcome, based on the secondary goal you selected. As one campaign may have a number of different secondary goals, this statistic is not supported for campaigns. Please go to ad groups or ads to view. (The total count is calculated based on the time each ad impression occurred.)\n", "meta": {}, "data_type": null, "quote": null, "tags": []}, "cost_per_result": {"name": "cost_per_result", "description": "The average cost for each result from your ads. As one campaign may have a number of different optimization goals, this statistic is not supported for campaigns. Please go to ad groups or ads to view the cost per result. (The total count is calculated based on the time each ad impression occurred.)\n", "meta": {}, "data_type": null, "quote": null, "tags": []}, "average_video_play_per_user": {"name": "average_video_play_per_user", "description": "The average time your video was played per person, including any time spent replaying the video. This metric is estimated.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "real_time_result_rate": {"name": "real_time_result_rate", "description": "As a campaign may have different optimization goals, the total number of result is not supported in campaign section now ,Please go to the ad group section to view the Result Rate. (The total count is based on when the conversion actually happened.)\n", "meta": {}, "data_type": null, "quote": null, "tags": []}, "spend": {"name": "spend", "description": "The estimated total amount of money you've spent on your campaign, ad group or ad during its schedule.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "likes": {"name": "likes", "description": "The number of likes your video creative received within 1 day of a user seeing a paid ad.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "_fivetran_synced": {"name": "_fivetran_synced", "description": "Timestamp of when Fivetran synced a record.", "meta": {}, "data_type": null, "quote": null, "tags": []}}, "meta": {}, "source_meta": {}, "tags": [], "config": {"enabled": true}, "patch_path": null, "unrendered_config": {}, "relation_name": "\"postgres\".\"tiktok_ads_source_integration_tests_1\".\"tiktok_adgroup_report_hourly_data\"", "created_at": 1661544122.1306639}}, "macros": {"macro.dbt_postgres.postgres__get_catalog": {"unique_id": "macro.dbt_postgres.postgres__get_catalog", "package_name": "dbt_postgres", "root_path": "/opt/homebrew/Cellar/dbt-postgres/1.0.4/libexec/lib/python3.9/site-packages/dbt/include/postgres", "path": "macros/catalog.sql", "original_file_path": "macros/catalog.sql", "name": "postgres__get_catalog", "macro_sql": "{% macro postgres__get_catalog(information_schema, schemas) -%}\n\n {%- call statement('catalog', fetch_result=True) -%}\n {#\n If the user has multiple databases set and the first one is wrong, this will fail.\n But we won't fail in the case where there are multiple quoting-difference-only dbs, which is better.\n #}\n {% set database = information_schema.database %}\n {{ adapter.verify_database(database) }}\n\n select\n '{{ database }}' as table_database,\n sch.nspname as table_schema,\n tbl.relname as table_name,\n case tbl.relkind\n when 'v' then 'VIEW'\n else 'BASE TABLE'\n end as table_type,\n tbl_desc.description as table_comment,\n col.attname as column_name,\n col.attnum as column_index,\n pg_catalog.format_type(col.atttypid, col.atttypmod) as column_type,\n col_desc.description as column_comment,\n pg_get_userbyid(tbl.relowner) as table_owner\n\n from pg_catalog.pg_namespace sch\n join pg_catalog.pg_class tbl on tbl.relnamespace = sch.oid\n join pg_catalog.pg_attribute col on col.attrelid = tbl.oid\n left outer join pg_catalog.pg_description tbl_desc on (tbl_desc.objoid = tbl.oid and tbl_desc.objsubid = 0)\n left outer join pg_catalog.pg_description col_desc on (col_desc.objoid = tbl.oid and col_desc.objsubid = col.attnum)\n\n where (\n {%- for schema in schemas -%}\n upper(sch.nspname) = upper('{{ schema }}'){%- if not loop.last %} or {% endif -%}\n {%- endfor -%}\n )\n and not pg_is_other_temp_schema(sch.oid) -- not a temporary schema belonging to another session\n and tbl.relpersistence in ('p', 'u') -- [p]ermanent table or [u]nlogged table. Exclude [t]emporary tables\n and tbl.relkind in ('r', 'v', 'f', 'p') -- o[r]dinary table, [v]iew, [f]oreign table, [p]artitioned table. Other values are [i]ndex, [S]equence, [c]omposite type, [t]OAST table, [m]aterialized view\n and col.attnum > 0 -- negative numbers are used for system columns such as oid\n and not col.attisdropped -- column as not been dropped\n\n order by\n sch.nspname,\n tbl.relname,\n col.attnum\n\n {%- endcall -%}\n\n {{ return(load_result('catalog').table) }}\n\n{%- endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.dbt.statement"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1661544121.2725601}, "macro.dbt_postgres.postgres_get_relations": {"unique_id": "macro.dbt_postgres.postgres_get_relations", "package_name": "dbt_postgres", "root_path": "/opt/homebrew/Cellar/dbt-postgres/1.0.4/libexec/lib/python3.9/site-packages/dbt/include/postgres", "path": "macros/relations.sql", "original_file_path": "macros/relations.sql", "name": "postgres_get_relations", "macro_sql": "{% macro postgres_get_relations () -%}\n\n {#\n -- in pg_depend, objid is the dependent, refobjid is the referenced object\n -- > a pg_depend entry indicates that the referenced object cannot be\n -- > dropped without also dropping the dependent object.\n #}\n\n {%- call statement('relations', fetch_result=True) -%}\n with relation as (\n select\n pg_rewrite.ev_class as class,\n pg_rewrite.oid as id\n from pg_rewrite\n ),\n class as (\n select\n oid as id,\n relname as name,\n relnamespace as schema,\n relkind as kind\n from pg_class\n ),\n dependency as (\n select\n pg_depend.objid as id,\n pg_depend.refobjid as ref\n from pg_depend\n ),\n schema as (\n select\n pg_namespace.oid as id,\n pg_namespace.nspname as name\n from pg_namespace\n where nspname != 'information_schema' and nspname not like 'pg\\_%'\n ),\n referenced as (\n select\n relation.id AS id,\n referenced_class.name ,\n referenced_class.schema ,\n referenced_class.kind\n from relation\n join class as referenced_class on relation.class=referenced_class.id\n where referenced_class.kind in ('r', 'v')\n ),\n relationships as (\n select\n referenced.name as referenced_name,\n referenced.schema as referenced_schema_id,\n dependent_class.name as dependent_name,\n dependent_class.schema as dependent_schema_id,\n referenced.kind as kind\n from referenced\n join dependency on referenced.id=dependency.id\n join class as dependent_class on dependency.ref=dependent_class.id\n where\n (referenced.name != dependent_class.name or\n referenced.schema != dependent_class.schema)\n )\n\n select\n referenced_schema.name as referenced_schema,\n relationships.referenced_name as referenced_name,\n dependent_schema.name as dependent_schema,\n relationships.dependent_name as dependent_name\n from relationships\n join schema as dependent_schema on relationships.dependent_schema_id=dependent_schema.id\n join schema as referenced_schema on relationships.referenced_schema_id=referenced_schema.id\n group by referenced_schema, referenced_name, dependent_schema, dependent_name\n order by referenced_schema, referenced_name, dependent_schema, dependent_name;\n\n {%- endcall -%}\n\n {{ return(load_result('relations').table) }}\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.dbt.statement"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1661544121.273313}, "macro.dbt_postgres.postgres__create_table_as": {"unique_id": "macro.dbt_postgres.postgres__create_table_as", "package_name": "dbt_postgres", "root_path": "/opt/homebrew/Cellar/dbt-postgres/1.0.4/libexec/lib/python3.9/site-packages/dbt/include/postgres", "path": "macros/adapters.sql", "original_file_path": "macros/adapters.sql", "name": "postgres__create_table_as", "macro_sql": "{% macro postgres__create_table_as(temporary, relation, sql) -%}\n {%- set unlogged = config.get('unlogged', default=false) -%}\n {%- set sql_header = config.get('sql_header', none) -%}\n\n {{ sql_header if sql_header is not none }}\n\n create {% if temporary -%}\n temporary\n {%- elif unlogged -%}\n unlogged\n {%- endif %} table {{ relation }}\n as (\n {{ sql }}\n );\n{%- endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1661544121.2791512}, "macro.dbt_postgres.postgres__get_create_index_sql": {"unique_id": "macro.dbt_postgres.postgres__get_create_index_sql", "package_name": "dbt_postgres", "root_path": "/opt/homebrew/Cellar/dbt-postgres/1.0.4/libexec/lib/python3.9/site-packages/dbt/include/postgres", "path": "macros/adapters.sql", "original_file_path": "macros/adapters.sql", "name": "postgres__get_create_index_sql", "macro_sql": "{% macro postgres__get_create_index_sql(relation, index_dict) -%}\n {%- set index_config = adapter.parse_index(index_dict) -%}\n {%- set comma_separated_columns = \", \".join(index_config.columns) -%}\n {%- set index_name = index_config.render(relation) -%}\n\n create {% if index_config.unique -%}\n unique\n {%- endif %} index if not exists\n \"{{ index_name }}\"\n on {{ relation }} {% if index_config.type -%}\n using {{ index_config.type }}\n {%- endif %}\n ({{ comma_separated_columns }});\n{%- endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1661544121.2797508}, "macro.dbt_postgres.postgres__create_schema": {"unique_id": "macro.dbt_postgres.postgres__create_schema", "package_name": "dbt_postgres", "root_path": "/opt/homebrew/Cellar/dbt-postgres/1.0.4/libexec/lib/python3.9/site-packages/dbt/include/postgres", "path": "macros/adapters.sql", "original_file_path": "macros/adapters.sql", "name": "postgres__create_schema", "macro_sql": "{% macro postgres__create_schema(relation) -%}\n {% if relation.database -%}\n {{ adapter.verify_database(relation.database) }}\n {%- endif -%}\n {%- call statement('create_schema') -%}\n create schema if not exists {{ relation.without_identifier().include(database=False) }}\n {%- endcall -%}\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.dbt.statement"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1661544121.2801018}, "macro.dbt_postgres.postgres__drop_schema": {"unique_id": "macro.dbt_postgres.postgres__drop_schema", "package_name": "dbt_postgres", "root_path": "/opt/homebrew/Cellar/dbt-postgres/1.0.4/libexec/lib/python3.9/site-packages/dbt/include/postgres", "path": "macros/adapters.sql", "original_file_path": "macros/adapters.sql", "name": "postgres__drop_schema", "macro_sql": "{% macro postgres__drop_schema(relation) -%}\n {% if relation.database -%}\n {{ adapter.verify_database(relation.database) }}\n {%- endif -%}\n {%- call statement('drop_schema') -%}\n drop schema if exists {{ relation.without_identifier().include(database=False) }} cascade\n {%- endcall -%}\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.dbt.statement"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1661544121.2804291}, "macro.dbt_postgres.postgres__get_columns_in_relation": {"unique_id": "macro.dbt_postgres.postgres__get_columns_in_relation", "package_name": "dbt_postgres", "root_path": "/opt/homebrew/Cellar/dbt-postgres/1.0.4/libexec/lib/python3.9/site-packages/dbt/include/postgres", "path": "macros/adapters.sql", "original_file_path": "macros/adapters.sql", "name": "postgres__get_columns_in_relation", "macro_sql": "{% macro postgres__get_columns_in_relation(relation) -%}\n {% call statement('get_columns_in_relation', fetch_result=True) %}\n select\n column_name,\n data_type,\n character_maximum_length,\n numeric_precision,\n numeric_scale\n\n from {{ relation.information_schema('columns') }}\n where table_name = '{{ relation.identifier }}'\n {% if relation.schema %}\n and table_schema = '{{ relation.schema }}'\n {% endif %}\n order by ordinal_position\n\n {% endcall %}\n {% set table = load_result('get_columns_in_relation').table %}\n {{ return(sql_convert_columns_in_relation(table)) }}\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.dbt.statement", "macro.dbt.sql_convert_columns_in_relation"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1661544121.280937}, "macro.dbt_postgres.postgres__list_relations_without_caching": {"unique_id": "macro.dbt_postgres.postgres__list_relations_without_caching", "package_name": "dbt_postgres", "root_path": "/opt/homebrew/Cellar/dbt-postgres/1.0.4/libexec/lib/python3.9/site-packages/dbt/include/postgres", "path": "macros/adapters.sql", "original_file_path": "macros/adapters.sql", "name": "postgres__list_relations_without_caching", "macro_sql": "{% macro postgres__list_relations_without_caching(schema_relation) %}\n {% call statement('list_relations_without_caching', fetch_result=True) -%}\n select\n '{{ schema_relation.database }}' as database,\n tablename as name,\n schemaname as schema,\n 'table' as type\n from pg_tables\n where schemaname ilike '{{ schema_relation.schema }}'\n union all\n select\n '{{ schema_relation.database }}' as database,\n viewname as name,\n schemaname as schema,\n 'view' as type\n from pg_views\n where schemaname ilike '{{ schema_relation.schema }}'\n {% endcall %}\n {{ return(load_result('list_relations_without_caching').table) }}\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.dbt.statement"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1661544121.281326}, "macro.dbt_postgres.postgres__information_schema_name": {"unique_id": "macro.dbt_postgres.postgres__information_schema_name", "package_name": "dbt_postgres", "root_path": "/opt/homebrew/Cellar/dbt-postgres/1.0.4/libexec/lib/python3.9/site-packages/dbt/include/postgres", "path": "macros/adapters.sql", "original_file_path": "macros/adapters.sql", "name": "postgres__information_schema_name", "macro_sql": "{% macro postgres__information_schema_name(database) -%}\n {% if database_name -%}\n {{ adapter.verify_database(database_name) }}\n {%- endif -%}\n information_schema\n{%- endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1661544121.2815459}, "macro.dbt_postgres.postgres__list_schemas": {"unique_id": "macro.dbt_postgres.postgres__list_schemas", "package_name": "dbt_postgres", "root_path": "/opt/homebrew/Cellar/dbt-postgres/1.0.4/libexec/lib/python3.9/site-packages/dbt/include/postgres", "path": "macros/adapters.sql", "original_file_path": "macros/adapters.sql", "name": "postgres__list_schemas", "macro_sql": "{% macro postgres__list_schemas(database) %}\n {% if database -%}\n {{ adapter.verify_database(database) }}\n {%- endif -%}\n {% call statement('list_schemas', fetch_result=True, auto_begin=False) %}\n select distinct nspname from pg_namespace\n {% endcall %}\n {{ return(load_result('list_schemas').table) }}\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.dbt.statement"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1661544121.281989}, "macro.dbt_postgres.postgres__check_schema_exists": {"unique_id": "macro.dbt_postgres.postgres__check_schema_exists", "package_name": "dbt_postgres", "root_path": "/opt/homebrew/Cellar/dbt-postgres/1.0.4/libexec/lib/python3.9/site-packages/dbt/include/postgres", "path": "macros/adapters.sql", "original_file_path": "macros/adapters.sql", "name": "postgres__check_schema_exists", "macro_sql": "{% macro postgres__check_schema_exists(information_schema, schema) -%}\n {% if information_schema.database -%}\n {{ adapter.verify_database(information_schema.database) }}\n {%- endif -%}\n {% call statement('check_schema_exists', fetch_result=True, auto_begin=False) %}\n select count(*) from pg_namespace where nspname = '{{ schema }}'\n {% endcall %}\n {{ return(load_result('check_schema_exists').table) }}\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.dbt.statement"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1661544121.2824728}, "macro.dbt_postgres.postgres__current_timestamp": {"unique_id": "macro.dbt_postgres.postgres__current_timestamp", "package_name": "dbt_postgres", "root_path": "/opt/homebrew/Cellar/dbt-postgres/1.0.4/libexec/lib/python3.9/site-packages/dbt/include/postgres", "path": "macros/adapters.sql", "original_file_path": "macros/adapters.sql", "name": "postgres__current_timestamp", "macro_sql": "{% macro postgres__current_timestamp() -%}\n now()\n{%- endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1661544121.2826061}, "macro.dbt_postgres.postgres__snapshot_string_as_time": {"unique_id": "macro.dbt_postgres.postgres__snapshot_string_as_time", "package_name": "dbt_postgres", "root_path": "/opt/homebrew/Cellar/dbt-postgres/1.0.4/libexec/lib/python3.9/site-packages/dbt/include/postgres", "path": "macros/adapters.sql", "original_file_path": "macros/adapters.sql", "name": "postgres__snapshot_string_as_time", "macro_sql": "{% macro postgres__snapshot_string_as_time(timestamp) -%}\n {%- set result = \"'\" ~ timestamp ~ \"'::timestamp without time zone\" -%}\n {{ return(result) }}\n{%- endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1661544121.282811}, "macro.dbt_postgres.postgres__snapshot_get_time": {"unique_id": "macro.dbt_postgres.postgres__snapshot_get_time", "package_name": "dbt_postgres", "root_path": "/opt/homebrew/Cellar/dbt-postgres/1.0.4/libexec/lib/python3.9/site-packages/dbt/include/postgres", "path": "macros/adapters.sql", "original_file_path": "macros/adapters.sql", "name": "postgres__snapshot_get_time", "macro_sql": "{% macro postgres__snapshot_get_time() -%}\n {{ current_timestamp() }}::timestamp without time zone\n{%- endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.dbt_utils.current_timestamp"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1661544121.282917}, "macro.dbt_postgres.postgres__make_temp_relation": {"unique_id": "macro.dbt_postgres.postgres__make_temp_relation", "package_name": "dbt_postgres", "root_path": "/opt/homebrew/Cellar/dbt-postgres/1.0.4/libexec/lib/python3.9/site-packages/dbt/include/postgres", "path": "macros/adapters.sql", "original_file_path": "macros/adapters.sql", "name": "postgres__make_temp_relation", "macro_sql": "{% macro postgres__make_temp_relation(base_relation, suffix) %}\n {% set dt = modules.datetime.datetime.now() %}\n {% set dtstring = dt.strftime(\"%H%M%S%f\") %}\n {% set suffix_length = suffix|length + dtstring|length %}\n {% set relation_max_name_length = 63 %}\n {% if suffix_length > relation_max_name_length %}\n {% do exceptions.raise_compiler_error('Temp relation suffix is too long (' ~ suffix|length ~ ' characters). Maximum length is ' ~ (relation_max_name_length - dtstring|length) ~ ' characters.') %}\n {% endif %}\n {% set tmp_identifier = base_relation.identifier[:relation_max_name_length - suffix_length] ~ suffix ~ dtstring %}\n {% do return(base_relation.incorporate(\n path={\n \"identifier\": tmp_identifier,\n \"schema\": none,\n \"database\": none\n })) -%}\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1661544121.283942}, "macro.dbt_postgres.postgres_escape_comment": {"unique_id": "macro.dbt_postgres.postgres_escape_comment", "package_name": "dbt_postgres", "root_path": "/opt/homebrew/Cellar/dbt-postgres/1.0.4/libexec/lib/python3.9/site-packages/dbt/include/postgres", "path": "macros/adapters.sql", "original_file_path": "macros/adapters.sql", "name": "postgres_escape_comment", "macro_sql": "{% macro postgres_escape_comment(comment) -%}\n {% if comment is not string %}\n {% do exceptions.raise_compiler_error('cannot escape a non-string: ' ~ comment) %}\n {% endif %}\n {%- set magic = '$dbt_comment_literal_block$' -%}\n {%- if magic in comment -%}\n {%- do exceptions.raise_compiler_error('The string ' ~ magic ~ ' is not allowed in comments.') -%}\n {%- endif -%}\n {{ magic }}{{ comment }}{{ magic }}\n{%- endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1661544121.2843862}, "macro.dbt_postgres.postgres__alter_relation_comment": {"unique_id": "macro.dbt_postgres.postgres__alter_relation_comment", "package_name": "dbt_postgres", "root_path": "/opt/homebrew/Cellar/dbt-postgres/1.0.4/libexec/lib/python3.9/site-packages/dbt/include/postgres", "path": "macros/adapters.sql", "original_file_path": "macros/adapters.sql", "name": "postgres__alter_relation_comment", "macro_sql": "{% macro postgres__alter_relation_comment(relation, comment) %}\n {% set escaped_comment = postgres_escape_comment(comment) %}\n comment on {{ relation.type }} {{ relation }} is {{ escaped_comment }};\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.dbt_postgres.postgres_escape_comment"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1661544121.284617}, "macro.dbt_postgres.postgres__alter_column_comment": {"unique_id": "macro.dbt_postgres.postgres__alter_column_comment", "package_name": "dbt_postgres", "root_path": "/opt/homebrew/Cellar/dbt-postgres/1.0.4/libexec/lib/python3.9/site-packages/dbt/include/postgres", "path": "macros/adapters.sql", "original_file_path": "macros/adapters.sql", "name": "postgres__alter_column_comment", "macro_sql": "{% macro postgres__alter_column_comment(relation, column_dict) %}\n {% set existing_columns = adapter.get_columns_in_relation(relation) | map(attribute=\"name\") | list %}\n {% for column_name in column_dict if (column_name in existing_columns) %}\n {% set comment = column_dict[column_name]['description'] %}\n {% set escaped_comment = postgres_escape_comment(comment) %}\n comment on column {{ relation }}.{{ adapter.quote(column_name) if column_dict[column_name]['quote'] else column_name }} is {{ escaped_comment }};\n {% endfor %}\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.dbt_postgres.postgres_escape_comment"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1661544121.285223}, "macro.dbt_postgres.postgres__snapshot_merge_sql": {"unique_id": "macro.dbt_postgres.postgres__snapshot_merge_sql", "package_name": "dbt_postgres", "root_path": "/opt/homebrew/Cellar/dbt-postgres/1.0.4/libexec/lib/python3.9/site-packages/dbt/include/postgres", "path": "macros/materializations/snapshot_merge.sql", "original_file_path": "macros/materializations/snapshot_merge.sql", "name": "postgres__snapshot_merge_sql", "macro_sql": "{% macro postgres__snapshot_merge_sql(target, source, insert_cols) -%}\n {%- set insert_cols_csv = insert_cols | join(', ') -%}\n\n update {{ target }}\n set dbt_valid_to = DBT_INTERNAL_SOURCE.dbt_valid_to\n from {{ source }} as DBT_INTERNAL_SOURCE\n where DBT_INTERNAL_SOURCE.dbt_scd_id::text = {{ target }}.dbt_scd_id::text\n and DBT_INTERNAL_SOURCE.dbt_change_type::text in ('update'::text, 'delete'::text)\n and {{ target }}.dbt_valid_to is null;\n\n insert into {{ target }} ({{ insert_cols_csv }})\n select {% for column in insert_cols -%}\n DBT_INTERNAL_SOURCE.{{ column }} {%- if not loop.last %}, {%- endif %}\n {%- endfor %}\n from {{ source }} as DBT_INTERNAL_SOURCE\n where DBT_INTERNAL_SOURCE.dbt_change_type::text = 'insert'::text;\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1661544121.286229}, "macro.dbt.run_hooks": {"unique_id": "macro.dbt.run_hooks", "package_name": "dbt", "root_path": "/opt/homebrew/Cellar/dbt-postgres/1.0.4/libexec/lib/python3.9/site-packages/dbt/include/global_project", "path": "macros/materializations/hooks.sql", "original_file_path": "macros/materializations/hooks.sql", "name": "run_hooks", "macro_sql": "{% macro run_hooks(hooks, inside_transaction=True) %}\n {% for hook in hooks | selectattr('transaction', 'equalto', inside_transaction) %}\n {% if not inside_transaction and loop.first %}\n {% call statement(auto_begin=inside_transaction) %}\n commit;\n {% endcall %}\n {% endif %}\n {% set rendered = render(hook.get('sql')) | trim %}\n {% if (rendered | length) > 0 %}\n {% call statement(auto_begin=inside_transaction) %}\n {{ rendered }}\n {% endcall %}\n {% endif %}\n {% endfor %}\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.dbt.statement"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1661544121.287426}, "macro.dbt.make_hook_config": {"unique_id": "macro.dbt.make_hook_config", "package_name": "dbt", "root_path": "/opt/homebrew/Cellar/dbt-postgres/1.0.4/libexec/lib/python3.9/site-packages/dbt/include/global_project", "path": "macros/materializations/hooks.sql", "original_file_path": "macros/materializations/hooks.sql", "name": "make_hook_config", "macro_sql": "{% macro make_hook_config(sql, inside_transaction) %}\n {{ tojson({\"sql\": sql, \"transaction\": inside_transaction}) }}\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1661544121.287628}, "macro.dbt.before_begin": {"unique_id": "macro.dbt.before_begin", "package_name": "dbt", "root_path": "/opt/homebrew/Cellar/dbt-postgres/1.0.4/libexec/lib/python3.9/site-packages/dbt/include/global_project", "path": "macros/materializations/hooks.sql", "original_file_path": "macros/materializations/hooks.sql", "name": "before_begin", "macro_sql": "{% macro before_begin(sql) %}\n {{ make_hook_config(sql, inside_transaction=False) }}\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.dbt.make_hook_config"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1661544121.287782}, "macro.dbt.in_transaction": {"unique_id": "macro.dbt.in_transaction", "package_name": "dbt", "root_path": "/opt/homebrew/Cellar/dbt-postgres/1.0.4/libexec/lib/python3.9/site-packages/dbt/include/global_project", "path": "macros/materializations/hooks.sql", "original_file_path": "macros/materializations/hooks.sql", "name": "in_transaction", "macro_sql": "{% macro in_transaction(sql) %}\n {{ make_hook_config(sql, inside_transaction=True) }}\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.dbt.make_hook_config"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1661544121.287935}, "macro.dbt.after_commit": {"unique_id": "macro.dbt.after_commit", "package_name": "dbt", "root_path": "/opt/homebrew/Cellar/dbt-postgres/1.0.4/libexec/lib/python3.9/site-packages/dbt/include/global_project", "path": "macros/materializations/hooks.sql", "original_file_path": "macros/materializations/hooks.sql", "name": "after_commit", "macro_sql": "{% macro after_commit(sql) %}\n {{ make_hook_config(sql, inside_transaction=False) }}\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.dbt.make_hook_config"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1661544121.288085}, "macro.dbt.set_sql_header": {"unique_id": "macro.dbt.set_sql_header", "package_name": "dbt", "root_path": "/opt/homebrew/Cellar/dbt-postgres/1.0.4/libexec/lib/python3.9/site-packages/dbt/include/global_project", "path": "macros/materializations/configs.sql", "original_file_path": "macros/materializations/configs.sql", "name": "set_sql_header", "macro_sql": "{% macro set_sql_header(config) -%}\n {{ config.set('sql_header', caller()) }}\n{%- endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1661544121.288573}, "macro.dbt.should_full_refresh": {"unique_id": "macro.dbt.should_full_refresh", "package_name": "dbt", "root_path": "/opt/homebrew/Cellar/dbt-postgres/1.0.4/libexec/lib/python3.9/site-packages/dbt/include/global_project", "path": "macros/materializations/configs.sql", "original_file_path": "macros/materializations/configs.sql", "name": "should_full_refresh", "macro_sql": "{% macro should_full_refresh() %}\n {% set config_full_refresh = config.get('full_refresh') %}\n {% if config_full_refresh is none %}\n {% set config_full_refresh = flags.FULL_REFRESH %}\n {% endif %}\n {% do return(config_full_refresh) %}\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1661544121.288939}, "macro.dbt.should_store_failures": {"unique_id": "macro.dbt.should_store_failures", "package_name": "dbt", "root_path": "/opt/homebrew/Cellar/dbt-postgres/1.0.4/libexec/lib/python3.9/site-packages/dbt/include/global_project", "path": "macros/materializations/configs.sql", "original_file_path": "macros/materializations/configs.sql", "name": "should_store_failures", "macro_sql": "{% macro should_store_failures() %}\n {% set config_store_failures = config.get('store_failures') %}\n {% if config_store_failures is none %}\n {% set config_store_failures = flags.STORE_FAILURES %}\n {% endif %}\n {% do return(config_store_failures) %}\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1661544121.289382}, "macro.dbt.snapshot_merge_sql": {"unique_id": "macro.dbt.snapshot_merge_sql", "package_name": "dbt", "root_path": "/opt/homebrew/Cellar/dbt-postgres/1.0.4/libexec/lib/python3.9/site-packages/dbt/include/global_project", "path": "macros/materializations/snapshots/snapshot_merge.sql", "original_file_path": "macros/materializations/snapshots/snapshot_merge.sql", "name": "snapshot_merge_sql", "macro_sql": "{% macro snapshot_merge_sql(target, source, insert_cols) -%}\n {{ adapter.dispatch('snapshot_merge_sql', 'dbt')(target, source, insert_cols) }}\n{%- endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.dbt_postgres.postgres__snapshot_merge_sql"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1661544121.2905788}, "macro.dbt.default__snapshot_merge_sql": {"unique_id": "macro.dbt.default__snapshot_merge_sql", "package_name": "dbt", "root_path": "/opt/homebrew/Cellar/dbt-postgres/1.0.4/libexec/lib/python3.9/site-packages/dbt/include/global_project", "path": "macros/materializations/snapshots/snapshot_merge.sql", "original_file_path": "macros/materializations/snapshots/snapshot_merge.sql", "name": "default__snapshot_merge_sql", "macro_sql": "{% macro default__snapshot_merge_sql(target, source, insert_cols) -%}\n {%- set insert_cols_csv = insert_cols | join(', ') -%}\n\n merge into {{ target }} as DBT_INTERNAL_DEST\n using {{ source }} as DBT_INTERNAL_SOURCE\n on DBT_INTERNAL_SOURCE.dbt_scd_id = DBT_INTERNAL_DEST.dbt_scd_id\n\n when matched\n and DBT_INTERNAL_DEST.dbt_valid_to is null\n and DBT_INTERNAL_SOURCE.dbt_change_type in ('update', 'delete')\n then update\n set dbt_valid_to = DBT_INTERNAL_SOURCE.dbt_valid_to\n\n when not matched\n and DBT_INTERNAL_SOURCE.dbt_change_type = 'insert'\n then insert ({{ insert_cols_csv }})\n values ({{ insert_cols_csv }})\n\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1661544121.290856}, "macro.dbt.strategy_dispatch": {"unique_id": "macro.dbt.strategy_dispatch", "package_name": "dbt", "root_path": "/opt/homebrew/Cellar/dbt-postgres/1.0.4/libexec/lib/python3.9/site-packages/dbt/include/global_project", "path": "macros/materializations/snapshots/strategies.sql", "original_file_path": "macros/materializations/snapshots/strategies.sql", "name": "strategy_dispatch", "macro_sql": "{% macro strategy_dispatch(name) -%}\n{% set original_name = name %}\n {% if '.' in name %}\n {% set package_name, name = name.split(\".\", 1) %}\n {% else %}\n {% set package_name = none %}\n {% endif %}\n\n {% if package_name is none %}\n {% set package_context = context %}\n {% elif package_name in context %}\n {% set package_context = context[package_name] %}\n {% else %}\n {% set error_msg %}\n Could not find package '{{package_name}}', called with '{{original_name}}'\n {% endset %}\n {{ exceptions.raise_compiler_error(error_msg | trim) }}\n {% endif %}\n\n {%- set search_name = 'snapshot_' ~ name ~ '_strategy' -%}\n\n {% if search_name not in package_context %}\n {% set error_msg %}\n The specified strategy macro '{{name}}' was not found in package '{{ package_name }}'\n {% endset %}\n {{ exceptions.raise_compiler_error(error_msg | trim) }}\n {% endif %}\n {{ return(package_context[search_name]) }}\n{%- endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1661544121.294305}, "macro.dbt.snapshot_hash_arguments": {"unique_id": "macro.dbt.snapshot_hash_arguments", "package_name": "dbt", "root_path": "/opt/homebrew/Cellar/dbt-postgres/1.0.4/libexec/lib/python3.9/site-packages/dbt/include/global_project", "path": "macros/materializations/snapshots/strategies.sql", "original_file_path": "macros/materializations/snapshots/strategies.sql", "name": "snapshot_hash_arguments", "macro_sql": "{% macro snapshot_hash_arguments(args) -%}\n {{ adapter.dispatch('snapshot_hash_arguments', 'dbt')(args) }}\n{%- endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.dbt.default__snapshot_hash_arguments"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1661544121.2944891}, "macro.dbt.default__snapshot_hash_arguments": {"unique_id": "macro.dbt.default__snapshot_hash_arguments", "package_name": "dbt", "root_path": "/opt/homebrew/Cellar/dbt-postgres/1.0.4/libexec/lib/python3.9/site-packages/dbt/include/global_project", "path": "macros/materializations/snapshots/strategies.sql", "original_file_path": "macros/materializations/snapshots/strategies.sql", "name": "default__snapshot_hash_arguments", "macro_sql": "{% macro default__snapshot_hash_arguments(args) -%}\n md5({%- for arg in args -%}\n coalesce(cast({{ arg }} as varchar ), '')\n {% if not loop.last %} || '|' || {% endif %}\n {%- endfor -%})\n{%- endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1661544121.29472}, "macro.dbt.snapshot_get_time": {"unique_id": "macro.dbt.snapshot_get_time", "package_name": "dbt", "root_path": "/opt/homebrew/Cellar/dbt-postgres/1.0.4/libexec/lib/python3.9/site-packages/dbt/include/global_project", "path": "macros/materializations/snapshots/strategies.sql", "original_file_path": "macros/materializations/snapshots/strategies.sql", "name": "snapshot_get_time", "macro_sql": "{% macro snapshot_get_time() -%}\n {{ adapter.dispatch('snapshot_get_time', 'dbt')() }}\n{%- endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.dbt_postgres.postgres__snapshot_get_time"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1661544121.2948742}, "macro.dbt.default__snapshot_get_time": {"unique_id": "macro.dbt.default__snapshot_get_time", "package_name": "dbt", "root_path": "/opt/homebrew/Cellar/dbt-postgres/1.0.4/libexec/lib/python3.9/site-packages/dbt/include/global_project", "path": "macros/materializations/snapshots/strategies.sql", "original_file_path": "macros/materializations/snapshots/strategies.sql", "name": "default__snapshot_get_time", "macro_sql": "{% macro default__snapshot_get_time() -%}\n {{ current_timestamp() }}\n{%- endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.dbt_utils.current_timestamp"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1661544121.294973}, "macro.dbt.snapshot_timestamp_strategy": {"unique_id": "macro.dbt.snapshot_timestamp_strategy", "package_name": "dbt", "root_path": "/opt/homebrew/Cellar/dbt-postgres/1.0.4/libexec/lib/python3.9/site-packages/dbt/include/global_project", "path": "macros/materializations/snapshots/strategies.sql", "original_file_path": "macros/materializations/snapshots/strategies.sql", "name": "snapshot_timestamp_strategy", "macro_sql": "{% macro snapshot_timestamp_strategy(node, snapshotted_rel, current_rel, config, target_exists) %}\n {% set primary_key = config['unique_key'] %}\n {% set updated_at = config['updated_at'] %}\n {% set invalidate_hard_deletes = config.get('invalidate_hard_deletes', false) %}\n\n {#/*\n The snapshot relation might not have an {{ updated_at }} value if the\n snapshot strategy is changed from `check` to `timestamp`. We\n should use a dbt-created column for the comparison in the snapshot\n table instead of assuming that the user-supplied {{ updated_at }}\n will be present in the historical data.\n\n See https://github.com/dbt-labs/dbt-core/issues/2350\n */ #}\n {% set row_changed_expr -%}\n ({{ snapshotted_rel }}.dbt_valid_from < {{ current_rel }}.{{ updated_at }})\n {%- endset %}\n\n {% set scd_id_expr = snapshot_hash_arguments([primary_key, updated_at]) %}\n\n {% do return({\n \"unique_key\": primary_key,\n \"updated_at\": updated_at,\n \"row_changed\": row_changed_expr,\n \"scd_id\": scd_id_expr,\n \"invalidate_hard_deletes\": invalidate_hard_deletes\n }) %}\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.dbt.snapshot_hash_arguments"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1661544121.295825}, "macro.dbt.snapshot_string_as_time": {"unique_id": "macro.dbt.snapshot_string_as_time", "package_name": "dbt", "root_path": "/opt/homebrew/Cellar/dbt-postgres/1.0.4/libexec/lib/python3.9/site-packages/dbt/include/global_project", "path": "macros/materializations/snapshots/strategies.sql", "original_file_path": "macros/materializations/snapshots/strategies.sql", "name": "snapshot_string_as_time", "macro_sql": "{% macro snapshot_string_as_time(timestamp) -%}\n {{ adapter.dispatch('snapshot_string_as_time', 'dbt')(timestamp) }}\n{%- endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.dbt_postgres.postgres__snapshot_string_as_time"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1661544121.295995}, "macro.dbt.default__snapshot_string_as_time": {"unique_id": "macro.dbt.default__snapshot_string_as_time", "package_name": "dbt", "root_path": "/opt/homebrew/Cellar/dbt-postgres/1.0.4/libexec/lib/python3.9/site-packages/dbt/include/global_project", "path": "macros/materializations/snapshots/strategies.sql", "original_file_path": "macros/materializations/snapshots/strategies.sql", "name": "default__snapshot_string_as_time", "macro_sql": "{% macro default__snapshot_string_as_time(timestamp) %}\n {% do exceptions.raise_not_implemented(\n 'snapshot_string_as_time macro not implemented for adapter '+adapter.type()\n ) %}\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1661544121.296169}, "macro.dbt.snapshot_check_all_get_existing_columns": {"unique_id": "macro.dbt.snapshot_check_all_get_existing_columns", "package_name": "dbt", "root_path": "/opt/homebrew/Cellar/dbt-postgres/1.0.4/libexec/lib/python3.9/site-packages/dbt/include/global_project", "path": "macros/materializations/snapshots/strategies.sql", "original_file_path": "macros/materializations/snapshots/strategies.sql", "name": "snapshot_check_all_get_existing_columns", "macro_sql": "{% macro snapshot_check_all_get_existing_columns(node, target_exists) -%}\n {%- set query_columns = get_columns_in_query(node['compiled_sql']) -%}\n {%- if not target_exists -%}\n {# no table yet -> return whatever the query does #}\n {{ return([false, query_columns]) }}\n {%- endif -%}\n {# handle any schema changes #}\n {%- set target_table = node.get('alias', node.get('name')) -%}\n {%- set target_relation = adapter.get_relation(database=node.database, schema=node.schema, identifier=target_table) -%}\n {%- set existing_cols = get_columns_in_query('select * from ' ~ target_relation) -%}\n {%- set ns = namespace() -%} {# handle for-loop scoping with a namespace #}\n {%- set ns.column_added = false -%}\n\n {%- set intersection = [] -%}\n {%- for col in query_columns -%}\n {%- if col in existing_cols -%}\n {%- do intersection.append(col) -%}\n {%- else -%}\n {% set ns.column_added = true %}\n {%- endif -%}\n {%- endfor -%}\n {{ return([ns.column_added, intersection]) }}\n{%- endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.dbt.get_columns_in_query"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1661544121.297167}, "macro.dbt.snapshot_check_strategy": {"unique_id": "macro.dbt.snapshot_check_strategy", "package_name": "dbt", "root_path": "/opt/homebrew/Cellar/dbt-postgres/1.0.4/libexec/lib/python3.9/site-packages/dbt/include/global_project", "path": "macros/materializations/snapshots/strategies.sql", "original_file_path": "macros/materializations/snapshots/strategies.sql", "name": "snapshot_check_strategy", "macro_sql": "{% macro snapshot_check_strategy(node, snapshotted_rel, current_rel, config, target_exists) %}\n {% set check_cols_config = config['check_cols'] %}\n {% set primary_key = config['unique_key'] %}\n {% set invalidate_hard_deletes = config.get('invalidate_hard_deletes', false) %}\n \n {% set select_current_time -%}\n select {{ snapshot_get_time() }} as snapshot_start\n {%- endset %}\n\n {#-- don't access the column by name, to avoid dealing with casing issues on snowflake #}\n {%- set now = run_query(select_current_time)[0][0] -%}\n {% if now is none or now is undefined -%}\n {%- do exceptions.raise_compiler_error('Could not get a snapshot start time from the database') -%}\n {%- endif %}\n {% set updated_at = config.get('updated_at', snapshot_string_as_time(now)) %}\n\n {% set column_added = false %}\n\n {% if check_cols_config == 'all' %}\n {% set column_added, check_cols = snapshot_check_all_get_existing_columns(node, target_exists) %}\n {% elif check_cols_config is iterable and (check_cols_config | length) > 0 %}\n {% set check_cols = check_cols_config %}\n {% else %}\n {% do exceptions.raise_compiler_error(\"Invalid value for 'check_cols': \" ~ check_cols_config) %}\n {% endif %}\n\n {%- set row_changed_expr -%}\n (\n {%- if column_added -%}\n TRUE\n {%- else -%}\n {%- for col in check_cols -%}\n {{ snapshotted_rel }}.{{ col }} != {{ current_rel }}.{{ col }}\n or\n (\n (({{ snapshotted_rel }}.{{ col }} is null) and not ({{ current_rel }}.{{ col }} is null))\n or\n ((not {{ snapshotted_rel }}.{{ col }} is null) and ({{ current_rel }}.{{ col }} is null))\n )\n {%- if not loop.last %} or {% endif -%}\n {%- endfor -%}\n {%- endif -%}\n )\n {%- endset %}\n\n {% set scd_id_expr = snapshot_hash_arguments([primary_key, updated_at]) %}\n\n {% do return({\n \"unique_key\": primary_key,\n \"updated_at\": updated_at,\n \"row_changed\": row_changed_expr,\n \"scd_id\": scd_id_expr,\n \"invalidate_hard_deletes\": invalidate_hard_deletes\n }) %}\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.dbt.snapshot_get_time", "macro.dbt.run_query", "macro.dbt.snapshot_string_as_time", "macro.dbt.snapshot_check_all_get_existing_columns", "macro.dbt.snapshot_hash_arguments"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1661544121.299275}, "macro.dbt.create_columns": {"unique_id": "macro.dbt.create_columns", "package_name": "dbt", "root_path": "/opt/homebrew/Cellar/dbt-postgres/1.0.4/libexec/lib/python3.9/site-packages/dbt/include/global_project", "path": "macros/materializations/snapshots/helpers.sql", "original_file_path": "macros/materializations/snapshots/helpers.sql", "name": "create_columns", "macro_sql": "{% macro create_columns(relation, columns) %}\n {{ adapter.dispatch('create_columns', 'dbt')(relation, columns) }}\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.dbt.default__create_columns"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1661544121.302742}, "macro.dbt.default__create_columns": {"unique_id": "macro.dbt.default__create_columns", "package_name": "dbt", "root_path": "/opt/homebrew/Cellar/dbt-postgres/1.0.4/libexec/lib/python3.9/site-packages/dbt/include/global_project", "path": "macros/materializations/snapshots/helpers.sql", "original_file_path": "macros/materializations/snapshots/helpers.sql", "name": "default__create_columns", "macro_sql": "{% macro default__create_columns(relation, columns) %}\n {% for column in columns %}\n {% call statement() %}\n alter table {{ relation }} add column \"{{ column.name }}\" {{ column.data_type }};\n {% endcall %}\n {% endfor %}\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.dbt.statement"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1661544121.303052}, "macro.dbt.post_snapshot": {"unique_id": "macro.dbt.post_snapshot", "package_name": "dbt", "root_path": "/opt/homebrew/Cellar/dbt-postgres/1.0.4/libexec/lib/python3.9/site-packages/dbt/include/global_project", "path": "macros/materializations/snapshots/helpers.sql", "original_file_path": "macros/materializations/snapshots/helpers.sql", "name": "post_snapshot", "macro_sql": "{% macro post_snapshot(staging_relation) %}\n {{ adapter.dispatch('post_snapshot', 'dbt')(staging_relation) }}\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.dbt.default__post_snapshot"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1661544121.3032289}, "macro.dbt.default__post_snapshot": {"unique_id": "macro.dbt.default__post_snapshot", "package_name": "dbt", "root_path": "/opt/homebrew/Cellar/dbt-postgres/1.0.4/libexec/lib/python3.9/site-packages/dbt/include/global_project", "path": "macros/materializations/snapshots/helpers.sql", "original_file_path": "macros/materializations/snapshots/helpers.sql", "name": "default__post_snapshot", "macro_sql": "{% macro default__post_snapshot(staging_relation) %}\n {# no-op #}\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1661544121.303317}, "macro.dbt.snapshot_staging_table": {"unique_id": "macro.dbt.snapshot_staging_table", "package_name": "dbt", "root_path": "/opt/homebrew/Cellar/dbt-postgres/1.0.4/libexec/lib/python3.9/site-packages/dbt/include/global_project", "path": "macros/materializations/snapshots/helpers.sql", "original_file_path": "macros/materializations/snapshots/helpers.sql", "name": "snapshot_staging_table", "macro_sql": "{% macro snapshot_staging_table(strategy, source_sql, target_relation) -%}\n {{ adapter.dispatch('snapshot_staging_table', 'dbt')(strategy, source_sql, target_relation) }}\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.dbt.default__snapshot_staging_table"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1661544121.3035269}, "macro.dbt.default__snapshot_staging_table": {"unique_id": "macro.dbt.default__snapshot_staging_table", "package_name": "dbt", "root_path": "/opt/homebrew/Cellar/dbt-postgres/1.0.4/libexec/lib/python3.9/site-packages/dbt/include/global_project", "path": "macros/materializations/snapshots/helpers.sql", "original_file_path": "macros/materializations/snapshots/helpers.sql", "name": "default__snapshot_staging_table", "macro_sql": "{% macro default__snapshot_staging_table(strategy, source_sql, target_relation) -%}\n\n with snapshot_query as (\n\n {{ source_sql }}\n\n ),\n\n snapshotted_data as (\n\n select *,\n {{ strategy.unique_key }} as dbt_unique_key\n\n from {{ target_relation }}\n where dbt_valid_to is null\n\n ),\n\n insertions_source_data as (\n\n select\n *,\n {{ strategy.unique_key }} as dbt_unique_key,\n {{ strategy.updated_at }} as dbt_updated_at,\n {{ strategy.updated_at }} as dbt_valid_from,\n nullif({{ strategy.updated_at }}, {{ strategy.updated_at }}) as dbt_valid_to,\n {{ strategy.scd_id }} as dbt_scd_id\n\n from snapshot_query\n ),\n\n updates_source_data as (\n\n select\n *,\n {{ strategy.unique_key }} as dbt_unique_key,\n {{ strategy.updated_at }} as dbt_updated_at,\n {{ strategy.updated_at }} as dbt_valid_from,\n {{ strategy.updated_at }} as dbt_valid_to\n\n from snapshot_query\n ),\n\n {%- if strategy.invalidate_hard_deletes %}\n\n deletes_source_data as (\n\n select \n *,\n {{ strategy.unique_key }} as dbt_unique_key\n from snapshot_query\n ),\n {% endif %}\n\n insertions as (\n\n select\n 'insert' as dbt_change_type,\n source_data.*\n\n from insertions_source_data as source_data\n left outer join snapshotted_data on snapshotted_data.dbt_unique_key = source_data.dbt_unique_key\n where snapshotted_data.dbt_unique_key is null\n or (\n snapshotted_data.dbt_unique_key is not null\n and (\n {{ strategy.row_changed }}\n )\n )\n\n ),\n\n updates as (\n\n select\n 'update' as dbt_change_type,\n source_data.*,\n snapshotted_data.dbt_scd_id\n\n from updates_source_data as source_data\n join snapshotted_data on snapshotted_data.dbt_unique_key = source_data.dbt_unique_key\n where (\n {{ strategy.row_changed }}\n )\n )\n\n {%- if strategy.invalidate_hard_deletes -%}\n ,\n\n deletes as (\n \n select\n 'delete' as dbt_change_type,\n source_data.*,\n {{ snapshot_get_time() }} as dbt_valid_from,\n {{ snapshot_get_time() }} as dbt_updated_at,\n {{ snapshot_get_time() }} as dbt_valid_to,\n snapshotted_data.dbt_scd_id\n \n from snapshotted_data\n left join deletes_source_data as source_data on snapshotted_data.dbt_unique_key = source_data.dbt_unique_key\n where source_data.dbt_unique_key is null\n )\n {%- endif %}\n\n select * from insertions\n union all\n select * from updates\n {%- if strategy.invalidate_hard_deletes %}\n union all\n select * from deletes\n {%- endif %}\n\n{%- endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.dbt.snapshot_get_time"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1661544121.30442}, "macro.dbt.build_snapshot_table": {"unique_id": "macro.dbt.build_snapshot_table", "package_name": "dbt", "root_path": "/opt/homebrew/Cellar/dbt-postgres/1.0.4/libexec/lib/python3.9/site-packages/dbt/include/global_project", "path": "macros/materializations/snapshots/helpers.sql", "original_file_path": "macros/materializations/snapshots/helpers.sql", "name": "build_snapshot_table", "macro_sql": "{% macro build_snapshot_table(strategy, sql) -%}\n {{ adapter.dispatch('build_snapshot_table', 'dbt')(strategy, sql) }}\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.dbt.default__build_snapshot_table"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1661544121.3046331}, "macro.dbt.default__build_snapshot_table": {"unique_id": "macro.dbt.default__build_snapshot_table", "package_name": "dbt", "root_path": "/opt/homebrew/Cellar/dbt-postgres/1.0.4/libexec/lib/python3.9/site-packages/dbt/include/global_project", "path": "macros/materializations/snapshots/helpers.sql", "original_file_path": "macros/materializations/snapshots/helpers.sql", "name": "default__build_snapshot_table", "macro_sql": "{% macro default__build_snapshot_table(strategy, sql) %}\n\n select *,\n {{ strategy.scd_id }} as dbt_scd_id,\n {{ strategy.updated_at }} as dbt_updated_at,\n {{ strategy.updated_at }} as dbt_valid_from,\n nullif({{ strategy.updated_at }}, {{ strategy.updated_at }}) as dbt_valid_to\n from (\n {{ sql }}\n ) sbq\n\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1661544121.3048892}, "macro.dbt.build_snapshot_staging_table": {"unique_id": "macro.dbt.build_snapshot_staging_table", "package_name": "dbt", "root_path": "/opt/homebrew/Cellar/dbt-postgres/1.0.4/libexec/lib/python3.9/site-packages/dbt/include/global_project", "path": "macros/materializations/snapshots/helpers.sql", "original_file_path": "macros/materializations/snapshots/helpers.sql", "name": "build_snapshot_staging_table", "macro_sql": "{% macro build_snapshot_staging_table(strategy, sql, target_relation) %}\n {% set tmp_relation = make_temp_relation(target_relation) %}\n\n {% set select = snapshot_staging_table(strategy, sql, target_relation) %}\n\n {% call statement('build_snapshot_staging_relation') %}\n {{ create_table_as(True, tmp_relation, select) }}\n {% endcall %}\n\n {% do return(tmp_relation) %}\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.dbt.make_temp_relation", "macro.dbt.snapshot_staging_table", "macro.dbt.statement", "macro.dbt.create_table_as"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1661544121.305331}, "macro.dbt.materialization_snapshot_default": {"unique_id": "macro.dbt.materialization_snapshot_default", "package_name": "dbt", "root_path": "/opt/homebrew/Cellar/dbt-postgres/1.0.4/libexec/lib/python3.9/site-packages/dbt/include/global_project", "path": "macros/materializations/snapshots/snapshot.sql", "original_file_path": "macros/materializations/snapshots/snapshot.sql", "name": "materialization_snapshot_default", "macro_sql": "{% materialization snapshot, default %}\n {%- set config = model['config'] -%}\n\n {%- set target_table = model.get('alias', model.get('name')) -%}\n\n {%- set strategy_name = config.get('strategy') -%}\n {%- set unique_key = config.get('unique_key') %}\n\n {% if not adapter.check_schema_exists(model.database, model.schema) %}\n {% do create_schema(model.database, model.schema) %}\n {% endif %}\n\n {% set target_relation_exists, target_relation = get_or_create_relation(\n database=model.database,\n schema=model.schema,\n identifier=target_table,\n type='table') -%}\n\n {%- if not target_relation.is_table -%}\n {% do exceptions.relation_wrong_type(target_relation, 'table') %}\n {%- endif -%}\n\n\n {{ run_hooks(pre_hooks, inside_transaction=False) }}\n\n {{ run_hooks(pre_hooks, inside_transaction=True) }}\n\n {% set strategy_macro = strategy_dispatch(strategy_name) %}\n {% set strategy = strategy_macro(model, \"snapshotted_data\", \"source_data\", config, target_relation_exists) %}\n\n {% if not target_relation_exists %}\n\n {% set build_sql = build_snapshot_table(strategy, model['compiled_sql']) %}\n {% set final_sql = create_table_as(False, target_relation, build_sql) %}\n\n {% else %}\n\n {{ adapter.valid_snapshot_target(target_relation) }}\n\n {% set staging_table = build_snapshot_staging_table(strategy, sql, target_relation) %}\n\n -- this may no-op if the database does not require column expansion\n {% do adapter.expand_target_column_types(from_relation=staging_table,\n to_relation=target_relation) %}\n\n {% set missing_columns = adapter.get_missing_columns(staging_table, target_relation)\n | rejectattr('name', 'equalto', 'dbt_change_type')\n | rejectattr('name', 'equalto', 'DBT_CHANGE_TYPE')\n | rejectattr('name', 'equalto', 'dbt_unique_key')\n | rejectattr('name', 'equalto', 'DBT_UNIQUE_KEY')\n | list %}\n\n {% do create_columns(target_relation, missing_columns) %}\n\n {% set source_columns = adapter.get_columns_in_relation(staging_table)\n | rejectattr('name', 'equalto', 'dbt_change_type')\n | rejectattr('name', 'equalto', 'DBT_CHANGE_TYPE')\n | rejectattr('name', 'equalto', 'dbt_unique_key')\n | rejectattr('name', 'equalto', 'DBT_UNIQUE_KEY')\n | list %}\n\n {% set quoted_source_columns = [] %}\n {% for column in source_columns %}\n {% do quoted_source_columns.append(adapter.quote(column.name)) %}\n {% endfor %}\n\n {% set final_sql = snapshot_merge_sql(\n target = target_relation,\n source = staging_table,\n insert_cols = quoted_source_columns\n )\n %}\n\n {% endif %}\n\n {% call statement('main') %}\n {{ final_sql }}\n {% endcall %}\n\n {% do persist_docs(target_relation, model) %}\n\n {% if not target_relation_exists %}\n {% do create_indexes(target_relation) %}\n {% endif %}\n\n {{ run_hooks(post_hooks, inside_transaction=True) }}\n\n {{ adapter.commit() }}\n\n {% if staging_table is defined %}\n {% do post_snapshot(staging_table) %}\n {% endif %}\n\n {{ run_hooks(post_hooks, inside_transaction=False) }}\n\n {{ return({'relations': [target_relation]}) }}\n\n{% endmaterialization %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.dbt.create_schema", "macro.dbt.get_or_create_relation", "macro.dbt.run_hooks", "macro.dbt.strategy_dispatch", "macro.dbt.build_snapshot_table", "macro.dbt.create_table_as", "macro.dbt.build_snapshot_staging_table", "macro.dbt.create_columns", "macro.dbt.snapshot_merge_sql", "macro.dbt.statement", "macro.dbt.persist_docs", "macro.dbt.create_indexes", "macro.dbt.post_snapshot"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1661544121.311477}, "macro.dbt.materialization_test_default": {"unique_id": "macro.dbt.materialization_test_default", "package_name": "dbt", "root_path": "/opt/homebrew/Cellar/dbt-postgres/1.0.4/libexec/lib/python3.9/site-packages/dbt/include/global_project", "path": "macros/materializations/tests/test.sql", "original_file_path": "macros/materializations/tests/test.sql", "name": "materialization_test_default", "macro_sql": "{%- materialization test, default -%}\n\n {% set relations = [] %}\n\n {% if should_store_failures() %}\n\n {% set identifier = model['alias'] %}\n {% set old_relation = adapter.get_relation(database=database, schema=schema, identifier=identifier) %}\n {% set target_relation = api.Relation.create(\n identifier=identifier, schema=schema, database=database, type='table') -%} %}\n \n {% if old_relation %}\n {% do adapter.drop_relation(old_relation) %}\n {% endif %}\n \n {% call statement(auto_begin=True) %}\n {{ create_table_as(False, target_relation, sql) }}\n {% endcall %}\n \n {% do relations.append(target_relation) %}\n \n {% set main_sql %}\n select *\n from {{ target_relation }}\n {% endset %}\n \n {{ adapter.commit() }}\n \n {% else %}\n\n {% set main_sql = sql %}\n \n {% endif %}\n\n {% set limit = config.get('limit') %}\n {% set fail_calc = config.get('fail_calc') %}\n {% set warn_if = config.get('warn_if') %}\n {% set error_if = config.get('error_if') %}\n\n {% call statement('main', fetch_result=True) -%}\n\n {{ get_test_sql(main_sql, fail_calc, warn_if, error_if, limit)}}\n\n {%- endcall %}\n \n {{ return({'relations': relations}) }}\n\n{%- endmaterialization -%}", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.dbt.should_store_failures", "macro.dbt.statement", "macro.dbt.create_table_as", "macro.dbt.get_test_sql"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1661544121.313687}, "macro.dbt.get_test_sql": {"unique_id": "macro.dbt.get_test_sql", "package_name": "dbt", "root_path": "/opt/homebrew/Cellar/dbt-postgres/1.0.4/libexec/lib/python3.9/site-packages/dbt/include/global_project", "path": "macros/materializations/tests/helpers.sql", "original_file_path": "macros/materializations/tests/helpers.sql", "name": "get_test_sql", "macro_sql": "{% macro get_test_sql(main_sql, fail_calc, warn_if, error_if, limit) -%}\n {{ adapter.dispatch('get_test_sql', 'dbt')(main_sql, fail_calc, warn_if, error_if, limit) }}\n{%- endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.dbt.default__get_test_sql"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1661544121.3142688}, "macro.dbt.default__get_test_sql": {"unique_id": "macro.dbt.default__get_test_sql", "package_name": "dbt", "root_path": "/opt/homebrew/Cellar/dbt-postgres/1.0.4/libexec/lib/python3.9/site-packages/dbt/include/global_project", "path": "macros/materializations/tests/helpers.sql", "original_file_path": "macros/materializations/tests/helpers.sql", "name": "default__get_test_sql", "macro_sql": "{% macro default__get_test_sql(main_sql, fail_calc, warn_if, error_if, limit) -%}\n select\n {{ fail_calc }} as failures,\n {{ fail_calc }} {{ warn_if }} as should_warn,\n {{ fail_calc }} {{ error_if }} as should_error\n from (\n {{ main_sql }}\n {{ \"limit \" ~ limit if limit != none }}\n ) dbt_internal_test\n{%- endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1661544121.314589}, "macro.dbt.get_where_subquery": {"unique_id": "macro.dbt.get_where_subquery", "package_name": "dbt", "root_path": "/opt/homebrew/Cellar/dbt-postgres/1.0.4/libexec/lib/python3.9/site-packages/dbt/include/global_project", "path": "macros/materializations/tests/where_subquery.sql", "original_file_path": "macros/materializations/tests/where_subquery.sql", "name": "get_where_subquery", "macro_sql": "{% macro get_where_subquery(relation) -%}\n {% do return(adapter.dispatch('get_where_subquery', 'dbt')(relation)) %}\n{%- endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.dbt.default__get_where_subquery"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1661544121.3150332}, "macro.dbt.default__get_where_subquery": {"unique_id": "macro.dbt.default__get_where_subquery", "package_name": "dbt", "root_path": "/opt/homebrew/Cellar/dbt-postgres/1.0.4/libexec/lib/python3.9/site-packages/dbt/include/global_project", "path": "macros/materializations/tests/where_subquery.sql", "original_file_path": "macros/materializations/tests/where_subquery.sql", "name": "default__get_where_subquery", "macro_sql": "{% macro default__get_where_subquery(relation) -%}\n {% set where = config.get('where', '') %}\n {% if where %}\n {%- set filtered -%}\n (select * from {{ relation }} where {{ where }}) dbt_subquery\n {%- endset -%}\n {% do return(filtered) %}\n {%- else -%}\n {% do return(relation) %}\n {%- endif -%}\n{%- endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1661544121.315419}, "macro.dbt.get_quoted_csv": {"unique_id": "macro.dbt.get_quoted_csv", "package_name": "dbt", "root_path": "/opt/homebrew/Cellar/dbt-postgres/1.0.4/libexec/lib/python3.9/site-packages/dbt/include/global_project", "path": "macros/materializations/models/incremental/column_helpers.sql", "original_file_path": "macros/materializations/models/incremental/column_helpers.sql", "name": "get_quoted_csv", "macro_sql": "{% macro get_quoted_csv(column_names) %}\n \n {% set quoted = [] %}\n {% for col in column_names -%}\n {%- do quoted.append(adapter.quote(col)) -%}\n {%- endfor %}\n\n {%- set dest_cols_csv = quoted | join(', ') -%}\n {{ return(dest_cols_csv) }}\n\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1661544121.3162508}, "macro.dbt.diff_columns": {"unique_id": "macro.dbt.diff_columns", "package_name": "dbt", "root_path": "/opt/homebrew/Cellar/dbt-postgres/1.0.4/libexec/lib/python3.9/site-packages/dbt/include/global_project", "path": "macros/materializations/models/incremental/column_helpers.sql", "original_file_path": "macros/materializations/models/incremental/column_helpers.sql", "name": "diff_columns", "macro_sql": "{% macro diff_columns(source_columns, target_columns) %}\n\n {% set result = [] %}\n {% set source_names = source_columns | map(attribute = 'column') | list %}\n {% set target_names = target_columns | map(attribute = 'column') | list %}\n \n {# --check whether the name attribute exists in the target - this does not perform a data type check #}\n {% for sc in source_columns %}\n {% if sc.name not in target_names %}\n {{ result.append(sc) }}\n {% endif %}\n {% endfor %}\n \n {{ return(result) }}\n\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1661544121.3167858}, "macro.dbt.diff_column_data_types": {"unique_id": "macro.dbt.diff_column_data_types", "package_name": "dbt", "root_path": "/opt/homebrew/Cellar/dbt-postgres/1.0.4/libexec/lib/python3.9/site-packages/dbt/include/global_project", "path": "macros/materializations/models/incremental/column_helpers.sql", "original_file_path": "macros/materializations/models/incremental/column_helpers.sql", "name": "diff_column_data_types", "macro_sql": "{% macro diff_column_data_types(source_columns, target_columns) %}\n \n {% set result = [] %}\n {% for sc in source_columns %}\n {% set tc = target_columns | selectattr(\"name\", \"equalto\", sc.name) | list | first %}\n {% if tc %}\n {% if sc.data_type != tc.data_type %}\n {{ result.append( { 'column_name': tc.name, 'new_type': sc.data_type } ) }} \n {% endif %}\n {% endif %}\n {% endfor %}\n\n {{ return(result) }}\n\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1661544121.3173919}, "macro.dbt.get_merge_sql": {"unique_id": "macro.dbt.get_merge_sql", "package_name": "dbt", "root_path": "/opt/homebrew/Cellar/dbt-postgres/1.0.4/libexec/lib/python3.9/site-packages/dbt/include/global_project", "path": "macros/materializations/models/incremental/merge.sql", "original_file_path": "macros/materializations/models/incremental/merge.sql", "name": "get_merge_sql", "macro_sql": "{% macro get_merge_sql(target, source, unique_key, dest_columns, predicates=none) -%}\n {{ adapter.dispatch('get_merge_sql', 'dbt')(target, source, unique_key, dest_columns, predicates) }}\n{%- endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.dbt.default__get_merge_sql"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1661544121.32012}, "macro.dbt.default__get_merge_sql": {"unique_id": "macro.dbt.default__get_merge_sql", "package_name": "dbt", "root_path": "/opt/homebrew/Cellar/dbt-postgres/1.0.4/libexec/lib/python3.9/site-packages/dbt/include/global_project", "path": "macros/materializations/models/incremental/merge.sql", "original_file_path": "macros/materializations/models/incremental/merge.sql", "name": "default__get_merge_sql", "macro_sql": "{% macro default__get_merge_sql(target, source, unique_key, dest_columns, predicates) -%}\n {%- set predicates = [] if predicates is none else [] + predicates -%}\n {%- set dest_cols_csv = get_quoted_csv(dest_columns | map(attribute=\"name\")) -%}\n {%- set update_columns = config.get('merge_update_columns', default = dest_columns | map(attribute=\"quoted\") | list) -%}\n {%- set sql_header = config.get('sql_header', none) -%}\n\n {% if unique_key %}\n {% set unique_key_match %}\n DBT_INTERNAL_SOURCE.{{ unique_key }} = DBT_INTERNAL_DEST.{{ unique_key }}\n {% endset %}\n {% do predicates.append(unique_key_match) %}\n {% else %}\n {% do predicates.append('FALSE') %}\n {% endif %}\n\n {{ sql_header if sql_header is not none }}\n\n merge into {{ target }} as DBT_INTERNAL_DEST\n using {{ source }} as DBT_INTERNAL_SOURCE\n on {{ predicates | join(' and ') }}\n\n {% if unique_key %}\n when matched then update set\n {% for column_name in update_columns -%}\n {{ column_name }} = DBT_INTERNAL_SOURCE.{{ column_name }}\n {%- if not loop.last %}, {%- endif %}\n {%- endfor %}\n {% endif %}\n\n when not matched then insert\n ({{ dest_cols_csv }})\n values\n ({{ dest_cols_csv }})\n\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.dbt.get_quoted_csv"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1661544121.321255}, "macro.dbt.get_delete_insert_merge_sql": {"unique_id": "macro.dbt.get_delete_insert_merge_sql", "package_name": "dbt", "root_path": "/opt/homebrew/Cellar/dbt-postgres/1.0.4/libexec/lib/python3.9/site-packages/dbt/include/global_project", "path": "macros/materializations/models/incremental/merge.sql", "original_file_path": "macros/materializations/models/incremental/merge.sql", "name": "get_delete_insert_merge_sql", "macro_sql": "{% macro get_delete_insert_merge_sql(target, source, unique_key, dest_columns) -%}\n {{ adapter.dispatch('get_delete_insert_merge_sql', 'dbt')(target, source, unique_key, dest_columns) }}\n{%- endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.dbt.default__get_delete_insert_merge_sql"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1661544121.3214872}, "macro.dbt.default__get_delete_insert_merge_sql": {"unique_id": "macro.dbt.default__get_delete_insert_merge_sql", "package_name": "dbt", "root_path": "/opt/homebrew/Cellar/dbt-postgres/1.0.4/libexec/lib/python3.9/site-packages/dbt/include/global_project", "path": "macros/materializations/models/incremental/merge.sql", "original_file_path": "macros/materializations/models/incremental/merge.sql", "name": "default__get_delete_insert_merge_sql", "macro_sql": "{% macro default__get_delete_insert_merge_sql(target, source, unique_key, dest_columns) -%}\n\n {%- set dest_cols_csv = get_quoted_csv(dest_columns | map(attribute=\"name\")) -%}\n\n {% if unique_key is not none %}\n delete from {{ target }}\n where ({{ unique_key }}) in (\n select ({{ unique_key }})\n from {{ source }}\n );\n {% endif %}\n\n insert into {{ target }} ({{ dest_cols_csv }})\n (\n select {{ dest_cols_csv }}\n from {{ source }}\n )\n\n{%- endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.dbt.get_quoted_csv"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1661544121.321895}, "macro.dbt.get_insert_overwrite_merge_sql": {"unique_id": "macro.dbt.get_insert_overwrite_merge_sql", "package_name": "dbt", "root_path": "/opt/homebrew/Cellar/dbt-postgres/1.0.4/libexec/lib/python3.9/site-packages/dbt/include/global_project", "path": "macros/materializations/models/incremental/merge.sql", "original_file_path": "macros/materializations/models/incremental/merge.sql", "name": "get_insert_overwrite_merge_sql", "macro_sql": "{% macro get_insert_overwrite_merge_sql(target, source, dest_columns, predicates, include_sql_header=false) -%}\n {{ adapter.dispatch('get_insert_overwrite_merge_sql', 'dbt')(target, source, dest_columns, predicates, include_sql_header) }}\n{%- endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.dbt.default__get_insert_overwrite_merge_sql"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1661544121.322159}, "macro.dbt.default__get_insert_overwrite_merge_sql": {"unique_id": "macro.dbt.default__get_insert_overwrite_merge_sql", "package_name": "dbt", "root_path": "/opt/homebrew/Cellar/dbt-postgres/1.0.4/libexec/lib/python3.9/site-packages/dbt/include/global_project", "path": "macros/materializations/models/incremental/merge.sql", "original_file_path": "macros/materializations/models/incremental/merge.sql", "name": "default__get_insert_overwrite_merge_sql", "macro_sql": "{% macro default__get_insert_overwrite_merge_sql(target, source, dest_columns, predicates, include_sql_header) -%}\n {%- set predicates = [] if predicates is none else [] + predicates -%}\n {%- set dest_cols_csv = get_quoted_csv(dest_columns | map(attribute=\"name\")) -%}\n {%- set sql_header = config.get('sql_header', none) -%}\n\n {{ sql_header if sql_header is not none and include_sql_header }}\n\n merge into {{ target }} as DBT_INTERNAL_DEST\n using {{ source }} as DBT_INTERNAL_SOURCE\n on FALSE\n\n when not matched by source\n {% if predicates %} and {{ predicates | join(' and ') }} {% endif %}\n then delete\n\n when not matched then insert\n ({{ dest_cols_csv }})\n values\n ({{ dest_cols_csv }})\n\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.dbt.get_quoted_csv"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1661544121.3227782}, "macro.dbt.is_incremental": {"unique_id": "macro.dbt.is_incremental", "package_name": "dbt", "root_path": "/opt/homebrew/Cellar/dbt-postgres/1.0.4/libexec/lib/python3.9/site-packages/dbt/include/global_project", "path": "macros/materializations/models/incremental/is_incremental.sql", "original_file_path": "macros/materializations/models/incremental/is_incremental.sql", "name": "is_incremental", "macro_sql": "{% macro is_incremental() %}\n {#-- do not run introspective queries in parsing #}\n {% if not execute %}\n {{ return(False) }}\n {% else %}\n {% set relation = adapter.get_relation(this.database, this.schema, this.table) %}\n {{ return(relation is not none\n and relation.type == 'table'\n and model.config.materialized == 'incremental'\n and not should_full_refresh()) }}\n {% endif %}\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.dbt.should_full_refresh"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1661544121.3235059}, "macro.dbt.materialization_incremental_default": {"unique_id": "macro.dbt.materialization_incremental_default", "package_name": "dbt", "root_path": "/opt/homebrew/Cellar/dbt-postgres/1.0.4/libexec/lib/python3.9/site-packages/dbt/include/global_project", "path": "macros/materializations/models/incremental/incremental.sql", "original_file_path": "macros/materializations/models/incremental/incremental.sql", "name": "materialization_incremental_default", "macro_sql": "{% materialization incremental, default -%}\n\n {% set unique_key = config.get('unique_key') %}\n\n {% set target_relation = this.incorporate(type='table') %}\n {% set existing_relation = load_relation(this) %}\n {% set tmp_relation = make_temp_relation(target_relation) %}\n {%- set full_refresh_mode = (should_full_refresh()) -%}\n\n {% set on_schema_change = incremental_validate_on_schema_change(config.get('on_schema_change'), default='ignore') %}\n\n {% set tmp_identifier = model['name'] + '__dbt_tmp' %}\n {% set backup_identifier = model['name'] + \"__dbt_backup\" %}\n\n -- the intermediate_ and backup_ relations should not already exist in the database; get_relation\n -- will return None in that case. Otherwise, we get a relation that we can drop\n -- later, before we try to use this name for the current operation. This has to happen before\n -- BEGIN, in a separate transaction\n {% set preexisting_intermediate_relation = adapter.get_relation(identifier=tmp_identifier, \n schema=schema,\n database=database) %} \n {% set preexisting_backup_relation = adapter.get_relation(identifier=backup_identifier,\n schema=schema,\n database=database) %}\n {{ drop_relation_if_exists(preexisting_intermediate_relation) }}\n {{ drop_relation_if_exists(preexisting_backup_relation) }}\n\n {{ run_hooks(pre_hooks, inside_transaction=False) }}\n\n -- `BEGIN` happens here:\n {{ run_hooks(pre_hooks, inside_transaction=True) }}\n\n {% set to_drop = [] %}\n\n {# -- first check whether we want to full refresh for source view or config reasons #}\n {% set trigger_full_refresh = (full_refresh_mode or existing_relation.is_view) %}\n\n {% if existing_relation is none %}\n {% set build_sql = create_table_as(False, target_relation, sql) %}\n{% elif trigger_full_refresh %}\n {#-- Make sure the backup doesn't exist so we don't encounter issues with the rename below #}\n {% set tmp_identifier = model['name'] + '__dbt_tmp' %}\n {% set backup_identifier = model['name'] + '__dbt_backup' %}\n {% set intermediate_relation = existing_relation.incorporate(path={\"identifier\": tmp_identifier}) %}\n {% set backup_relation = existing_relation.incorporate(path={\"identifier\": backup_identifier}) %}\n\n {% set build_sql = create_table_as(False, intermediate_relation, sql) %}\n {% set need_swap = true %}\n {% do to_drop.append(backup_relation) %}\n {% else %}\n {% do run_query(create_table_as(True, tmp_relation, sql)) %}\n {% do adapter.expand_target_column_types(\n from_relation=tmp_relation,\n to_relation=target_relation) %}\n {#-- Process schema changes. Returns dict of changes if successful. Use source columns for upserting/merging --#}\n {% set dest_columns = process_schema_changes(on_schema_change, tmp_relation, existing_relation) %}\n {% if not dest_columns %}\n {% set dest_columns = adapter.get_columns_in_relation(existing_relation) %}\n {% endif %}\n {% set build_sql = get_delete_insert_merge_sql(target_relation, tmp_relation, unique_key, dest_columns) %}\n \n {% endif %}\n\n {% call statement(\"main\") %}\n {{ build_sql }}\n {% endcall %}\n\n {% if need_swap %} \n {% do adapter.rename_relation(target_relation, backup_relation) %} \n {% do adapter.rename_relation(intermediate_relation, target_relation) %} \n {% endif %}\n\n {% do persist_docs(target_relation, model) %}\n\n {% if existing_relation is none or existing_relation.is_view or should_full_refresh() %}\n {% do create_indexes(target_relation) %}\n {% endif %}\n\n {{ run_hooks(post_hooks, inside_transaction=True) }}\n\n -- `COMMIT` happens here\n {% do adapter.commit() %}\n\n {% for rel in to_drop %}\n {% do adapter.drop_relation(rel) %}\n {% endfor %}\n\n {{ run_hooks(post_hooks, inside_transaction=False) }}\n\n {{ return({'relations': [target_relation]}) }}\n\n{%- endmaterialization %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.dbt.load_relation", "macro.dbt.make_temp_relation", "macro.dbt.should_full_refresh", "macro.dbt.incremental_validate_on_schema_change", "macro.dbt.drop_relation_if_exists", "macro.dbt.run_hooks", "macro.dbt.create_table_as", "macro.dbt.run_query", "macro.dbt.process_schema_changes", "macro.dbt.get_delete_insert_merge_sql", "macro.dbt.statement", "macro.dbt.persist_docs", "macro.dbt.create_indexes"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1661544121.328397}, "macro.dbt.incremental_validate_on_schema_change": {"unique_id": "macro.dbt.incremental_validate_on_schema_change", "package_name": "dbt", "root_path": "/opt/homebrew/Cellar/dbt-postgres/1.0.4/libexec/lib/python3.9/site-packages/dbt/include/global_project", "path": "macros/materializations/models/incremental/on_schema_change.sql", "original_file_path": "macros/materializations/models/incremental/on_schema_change.sql", "name": "incremental_validate_on_schema_change", "macro_sql": "{% macro incremental_validate_on_schema_change(on_schema_change, default='ignore') %}\n \n {% if on_schema_change not in ['sync_all_columns', 'append_new_columns', 'fail', 'ignore'] %}\n \n {% set log_message = 'Invalid value for on_schema_change (%s) specified. Setting default value of %s.' % (on_schema_change, default) %}\n {% do log(log_message) %}\n \n {{ return(default) }}\n\n {% else %}\n\n {{ return(on_schema_change) }}\n \n {% endif %}\n\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1661544121.333065}, "macro.dbt.check_for_schema_changes": {"unique_id": "macro.dbt.check_for_schema_changes", "package_name": "dbt", "root_path": "/opt/homebrew/Cellar/dbt-postgres/1.0.4/libexec/lib/python3.9/site-packages/dbt/include/global_project", "path": "macros/materializations/models/incremental/on_schema_change.sql", "original_file_path": "macros/materializations/models/incremental/on_schema_change.sql", "name": "check_for_schema_changes", "macro_sql": "{% macro check_for_schema_changes(source_relation, target_relation) %}\n \n {% set schema_changed = False %}\n \n {%- set source_columns = adapter.get_columns_in_relation(source_relation) -%}\n {%- set target_columns = adapter.get_columns_in_relation(target_relation) -%}\n {%- set source_not_in_target = diff_columns(source_columns, target_columns) -%}\n {%- set target_not_in_source = diff_columns(target_columns, source_columns) -%}\n\n {% set new_target_types = diff_column_data_types(source_columns, target_columns) %}\n\n {% if source_not_in_target != [] %}\n {% set schema_changed = True %}\n {% elif target_not_in_source != [] or new_target_types != [] %}\n {% set schema_changed = True %}\n {% elif new_target_types != [] %}\n {% set schema_changed = True %}\n {% endif %}\n \n {% set changes_dict = {\n 'schema_changed': schema_changed,\n 'source_not_in_target': source_not_in_target,\n 'target_not_in_source': target_not_in_source,\n 'source_columns': source_columns,\n 'target_columns': target_columns,\n 'new_target_types': new_target_types\n } %}\n\n {% set msg %}\n In {{ target_relation }}:\n Schema changed: {{ schema_changed }}\n Source columns not in target: {{ source_not_in_target }}\n Target columns not in source: {{ target_not_in_source }}\n New column types: {{ new_target_types }}\n {% endset %}\n \n {% do log(msg) %}\n\n {{ return(changes_dict) }}\n\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.dbt.diff_columns", "macro.dbt.diff_column_data_types"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1661544121.334292}, "macro.dbt.sync_column_schemas": {"unique_id": "macro.dbt.sync_column_schemas", "package_name": "dbt", "root_path": "/opt/homebrew/Cellar/dbt-postgres/1.0.4/libexec/lib/python3.9/site-packages/dbt/include/global_project", "path": "macros/materializations/models/incremental/on_schema_change.sql", "original_file_path": "macros/materializations/models/incremental/on_schema_change.sql", "name": "sync_column_schemas", "macro_sql": "{% macro sync_column_schemas(on_schema_change, target_relation, schema_changes_dict) %}\n \n {%- set add_to_target_arr = schema_changes_dict['source_not_in_target'] -%}\n\n {%- if on_schema_change == 'append_new_columns'-%}\n {%- if add_to_target_arr | length > 0 -%}\n {%- do alter_relation_add_remove_columns(target_relation, add_to_target_arr, none) -%}\n {%- endif -%}\n \n {% elif on_schema_change == 'sync_all_columns' %}\n {%- set remove_from_target_arr = schema_changes_dict['target_not_in_source'] -%}\n {%- set new_target_types = schema_changes_dict['new_target_types'] -%}\n \n {% if add_to_target_arr | length > 0 or remove_from_target_arr | length > 0 %} \n {%- do alter_relation_add_remove_columns(target_relation, add_to_target_arr, remove_from_target_arr) -%}\n {% endif %}\n\n {% if new_target_types != [] %}\n {% for ntt in new_target_types %}\n {% set column_name = ntt['column_name'] %}\n {% set new_type = ntt['new_type'] %}\n {% do alter_column_type(target_relation, column_name, new_type) %}\n {% endfor %}\n {% endif %}\n \n {% endif %}\n\n {% set schema_change_message %}\n In {{ target_relation }}:\n Schema change approach: {{ on_schema_change }}\n Columns added: {{ add_to_target_arr }}\n Columns removed: {{ remove_from_target_arr }}\n Data types changed: {{ new_target_types }}\n {% endset %}\n \n {% do log(schema_change_message) %}\n \n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.dbt.alter_relation_add_remove_columns", "macro.dbt.alter_column_type"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1661544121.3354602}, "macro.dbt.process_schema_changes": {"unique_id": "macro.dbt.process_schema_changes", "package_name": "dbt", "root_path": "/opt/homebrew/Cellar/dbt-postgres/1.0.4/libexec/lib/python3.9/site-packages/dbt/include/global_project", "path": "macros/materializations/models/incremental/on_schema_change.sql", "original_file_path": "macros/materializations/models/incremental/on_schema_change.sql", "name": "process_schema_changes", "macro_sql": "{% macro process_schema_changes(on_schema_change, source_relation, target_relation) %}\n \n {% if on_schema_change == 'ignore' %}\n\n {{ return({}) }}\n\n {% else %}\n \n {% set schema_changes_dict = check_for_schema_changes(source_relation, target_relation) %}\n \n {% if schema_changes_dict['schema_changed'] %}\n \n {% if on_schema_change == 'fail' %}\n \n {% set fail_msg %}\n The source and target schemas on this incremental model are out of sync!\n They can be reconciled in several ways: \n - set the `on_schema_change` config to either append_new_columns or sync_all_columns, depending on your situation.\n - Re-run the incremental model with `full_refresh: True` to update the target schema.\n - update the schema manually and re-run the process.\n {% endset %}\n \n {% do exceptions.raise_compiler_error(fail_msg) %}\n \n {# -- unless we ignore, run the sync operation per the config #}\n {% else %}\n \n {% do sync_column_schemas(on_schema_change, target_relation, schema_changes_dict) %}\n \n {% endif %}\n \n {% endif %}\n\n {{ return(schema_changes_dict['source_columns']) }}\n \n {% endif %}\n\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.dbt.check_for_schema_changes", "macro.dbt.sync_column_schemas"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1661544121.336182}, "macro.dbt.materialization_table_default": {"unique_id": "macro.dbt.materialization_table_default", "package_name": "dbt", "root_path": "/opt/homebrew/Cellar/dbt-postgres/1.0.4/libexec/lib/python3.9/site-packages/dbt/include/global_project", "path": "macros/materializations/models/table/table.sql", "original_file_path": "macros/materializations/models/table/table.sql", "name": "materialization_table_default", "macro_sql": "{% materialization table, default %}\n {%- set identifier = model['alias'] -%}\n {%- set tmp_identifier = model['name'] + '__dbt_tmp' -%}\n {%- set backup_identifier = model['name'] + '__dbt_backup' -%}\n\n {%- set old_relation = adapter.get_relation(database=database, schema=schema, identifier=identifier) -%}\n {%- set target_relation = api.Relation.create(identifier=identifier,\n schema=schema,\n database=database,\n type='table') -%}\n {%- set intermediate_relation = api.Relation.create(identifier=tmp_identifier,\n schema=schema,\n database=database,\n type='table') -%}\n -- the intermediate_relation should not already exist in the database; get_relation\n -- will return None in that case. Otherwise, we get a relation that we can drop\n -- later, before we try to use this name for the current operation\n {%- set preexisting_intermediate_relation = adapter.get_relation(identifier=tmp_identifier, \n schema=schema,\n database=database) -%}\n /*\n See ../view/view.sql for more information about this relation.\n */\n {%- set backup_relation_type = 'table' if old_relation is none else old_relation.type -%}\n {%- set backup_relation = api.Relation.create(identifier=backup_identifier,\n schema=schema,\n database=database,\n type=backup_relation_type) -%}\n -- as above, the backup_relation should not already exist\n {%- set preexisting_backup_relation = adapter.get_relation(identifier=backup_identifier,\n schema=schema,\n database=database) -%}\n\n\n -- drop the temp relations if they exist already in the database\n {{ drop_relation_if_exists(preexisting_intermediate_relation) }}\n {{ drop_relation_if_exists(preexisting_backup_relation) }}\n\n {{ run_hooks(pre_hooks, inside_transaction=False) }}\n\n -- `BEGIN` happens here:\n {{ run_hooks(pre_hooks, inside_transaction=True) }}\n\n -- build model\n {% call statement('main') -%}\n {{ get_create_table_as_sql(False, intermediate_relation, sql) }}\n {%- endcall %}\n\n -- cleanup\n {% if old_relation is not none %}\n {{ adapter.rename_relation(old_relation, backup_relation) }}\n {% endif %}\n\n {{ adapter.rename_relation(intermediate_relation, target_relation) }}\n\n {% do create_indexes(target_relation) %}\n\n {{ run_hooks(post_hooks, inside_transaction=True) }}\n\n {% do persist_docs(target_relation, model) %}\n\n -- `COMMIT` happens here\n {{ adapter.commit() }}\n\n -- finally, drop the existing/backup relation after the commit\n {{ drop_relation_if_exists(backup_relation) }}\n\n {{ run_hooks(post_hooks, inside_transaction=False) }}\n\n {{ return({'relations': [target_relation]}) }}\n{% endmaterialization %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.dbt.drop_relation_if_exists", "macro.dbt.run_hooks", "macro.dbt.statement", "macro.dbt.get_create_table_as_sql", "macro.dbt.create_indexes", "macro.dbt.persist_docs"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1661544121.339823}, "macro.dbt.get_create_table_as_sql": {"unique_id": "macro.dbt.get_create_table_as_sql", "package_name": "dbt", "root_path": "/opt/homebrew/Cellar/dbt-postgres/1.0.4/libexec/lib/python3.9/site-packages/dbt/include/global_project", "path": "macros/materializations/models/table/create_table_as.sql", "original_file_path": "macros/materializations/models/table/create_table_as.sql", "name": "get_create_table_as_sql", "macro_sql": "{% macro get_create_table_as_sql(temporary, relation, sql) -%}\n {{ adapter.dispatch('get_create_table_as_sql', 'dbt')(temporary, relation, sql) }}\n{%- endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.dbt.default__get_create_table_as_sql"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1661544121.34032}, "macro.dbt.default__get_create_table_as_sql": {"unique_id": "macro.dbt.default__get_create_table_as_sql", "package_name": "dbt", "root_path": "/opt/homebrew/Cellar/dbt-postgres/1.0.4/libexec/lib/python3.9/site-packages/dbt/include/global_project", "path": "macros/materializations/models/table/create_table_as.sql", "original_file_path": "macros/materializations/models/table/create_table_as.sql", "name": "default__get_create_table_as_sql", "macro_sql": "{% macro default__get_create_table_as_sql(temporary, relation, sql) -%}\n {{ return(create_table_as(temporary, relation, sql)) }}\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.dbt.create_table_as"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1661544121.340502}, "macro.dbt.create_table_as": {"unique_id": "macro.dbt.create_table_as", "package_name": "dbt", "root_path": "/opt/homebrew/Cellar/dbt-postgres/1.0.4/libexec/lib/python3.9/site-packages/dbt/include/global_project", "path": "macros/materializations/models/table/create_table_as.sql", "original_file_path": "macros/materializations/models/table/create_table_as.sql", "name": "create_table_as", "macro_sql": "{% macro create_table_as(temporary, relation, sql) -%}\n {{ adapter.dispatch('create_table_as', 'dbt')(temporary, relation, sql) }}\n{%- endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.dbt_postgres.postgres__create_table_as"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1661544121.340697}, "macro.dbt.default__create_table_as": {"unique_id": "macro.dbt.default__create_table_as", "package_name": "dbt", "root_path": "/opt/homebrew/Cellar/dbt-postgres/1.0.4/libexec/lib/python3.9/site-packages/dbt/include/global_project", "path": "macros/materializations/models/table/create_table_as.sql", "original_file_path": "macros/materializations/models/table/create_table_as.sql", "name": "default__create_table_as", "macro_sql": "{% macro default__create_table_as(temporary, relation, sql) -%}\n {%- set sql_header = config.get('sql_header', none) -%}\n \n {{ sql_header if sql_header is not none }}\n \n create {% if temporary: -%}temporary{%- endif %} table\n {{ relation.include(database=(not temporary), schema=(not temporary)) }}\n as (\n {{ sql }}\n );\n{%- endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1661544121.341108}, "macro.dbt.materialization_view_default": {"unique_id": "macro.dbt.materialization_view_default", "package_name": "dbt", "root_path": "/opt/homebrew/Cellar/dbt-postgres/1.0.4/libexec/lib/python3.9/site-packages/dbt/include/global_project", "path": "macros/materializations/models/view/view.sql", "original_file_path": "macros/materializations/models/view/view.sql", "name": "materialization_view_default", "macro_sql": "{%- materialization view, default -%}\n\n {%- set identifier = model['alias'] -%}\n {%- set tmp_identifier = model['name'] + '__dbt_tmp' -%}\n {%- set backup_identifier = model['name'] + '__dbt_backup' -%}\n\n {%- set old_relation = adapter.get_relation(database=database, schema=schema, identifier=identifier) -%}\n {%- set target_relation = api.Relation.create(identifier=identifier, schema=schema, database=database,\n type='view') -%}\n {%- set intermediate_relation = api.Relation.create(identifier=tmp_identifier,\n schema=schema, database=database, type='view') -%}\n -- the intermediate_relation should not already exist in the database; get_relation\n -- will return None in that case. Otherwise, we get a relation that we can drop\n -- later, before we try to use this name for the current operation\n {%- set preexisting_intermediate_relation = adapter.get_relation(identifier=tmp_identifier, \n schema=schema,\n database=database) -%}\n /*\n This relation (probably) doesn't exist yet. If it does exist, it's a leftover from\n a previous run, and we're going to try to drop it immediately. At the end of this\n materialization, we're going to rename the \"old_relation\" to this identifier,\n and then we're going to drop it. In order to make sure we run the correct one of:\n - drop view ...\n - drop table ...\n\n We need to set the type of this relation to be the type of the old_relation, if it exists,\n or else \"view\" as a sane default if it does not. Note that if the old_relation does not\n exist, then there is nothing to move out of the way and subsequentally drop. In that case,\n this relation will be effectively unused.\n */\n {%- set backup_relation_type = 'view' if old_relation is none else old_relation.type -%}\n {%- set backup_relation = api.Relation.create(identifier=backup_identifier,\n schema=schema, database=database,\n type=backup_relation_type) -%}\n -- as above, the backup_relation should not already exist\n {%- set preexisting_backup_relation = adapter.get_relation(identifier=backup_identifier,\n schema=schema,\n database=database) -%}\n\n {{ run_hooks(pre_hooks, inside_transaction=False) }}\n\n -- drop the temp relations if they exist already in the database\n {{ drop_relation_if_exists(preexisting_intermediate_relation) }}\n {{ drop_relation_if_exists(preexisting_backup_relation) }}\n\n -- `BEGIN` happens here:\n {{ run_hooks(pre_hooks, inside_transaction=True) }}\n\n -- build model\n {% call statement('main') -%}\n {{ create_view_as(intermediate_relation, sql) }}\n {%- endcall %}\n\n -- cleanup\n -- move the existing view out of the way\n {% if old_relation is not none %}\n {{ adapter.rename_relation(old_relation, backup_relation) }}\n {% endif %}\n {{ adapter.rename_relation(intermediate_relation, target_relation) }}\n\n {% do persist_docs(target_relation, model) %}\n\n {{ run_hooks(post_hooks, inside_transaction=True) }}\n\n {{ adapter.commit() }}\n\n {{ drop_relation_if_exists(backup_relation) }}\n\n {{ run_hooks(post_hooks, inside_transaction=False) }}\n\n {{ return({'relations': [target_relation]}) }}\n\n{%- endmaterialization -%}", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.dbt.run_hooks", "macro.dbt.drop_relation_if_exists", "macro.dbt.statement", "macro.dbt.create_view_as", "macro.dbt.persist_docs"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1661544121.345077}, "macro.dbt.handle_existing_table": {"unique_id": "macro.dbt.handle_existing_table", "package_name": "dbt", "root_path": "/opt/homebrew/Cellar/dbt-postgres/1.0.4/libexec/lib/python3.9/site-packages/dbt/include/global_project", "path": "macros/materializations/models/view/helpers.sql", "original_file_path": "macros/materializations/models/view/helpers.sql", "name": "handle_existing_table", "macro_sql": "{% macro handle_existing_table(full_refresh, old_relation) %}\n {{ adapter.dispatch('handle_existing_table', 'dbt')(full_refresh, old_relation) }}\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.dbt.default__handle_existing_table"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1661544121.34562}, "macro.dbt.default__handle_existing_table": {"unique_id": "macro.dbt.default__handle_existing_table", "package_name": "dbt", "root_path": "/opt/homebrew/Cellar/dbt-postgres/1.0.4/libexec/lib/python3.9/site-packages/dbt/include/global_project", "path": "macros/materializations/models/view/helpers.sql", "original_file_path": "macros/materializations/models/view/helpers.sql", "name": "default__handle_existing_table", "macro_sql": "{% macro default__handle_existing_table(full_refresh, old_relation) %}\n {{ log(\"Dropping relation \" ~ old_relation ~ \" because it is of type \" ~ old_relation.type) }}\n {{ adapter.drop_relation(old_relation) }}\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1661544121.345849}, "macro.dbt.create_or_replace_view": {"unique_id": "macro.dbt.create_or_replace_view", "package_name": "dbt", "root_path": "/opt/homebrew/Cellar/dbt-postgres/1.0.4/libexec/lib/python3.9/site-packages/dbt/include/global_project", "path": "macros/materializations/models/view/create_or_replace_view.sql", "original_file_path": "macros/materializations/models/view/create_or_replace_view.sql", "name": "create_or_replace_view", "macro_sql": "{% macro create_or_replace_view() %}\n {%- set identifier = model['alias'] -%}\n\n {%- set old_relation = adapter.get_relation(database=database, schema=schema, identifier=identifier) -%}\n\n {%- set exists_as_view = (old_relation is not none and old_relation.is_view) -%}\n\n {%- set target_relation = api.Relation.create(\n identifier=identifier, schema=schema, database=database,\n type='view') -%}\n\n {{ run_hooks(pre_hooks) }}\n\n -- If there's a table with the same name and we weren't told to full refresh,\n -- that's an error. If we were told to full refresh, drop it. This behavior differs\n -- for Snowflake and BigQuery, so multiple dispatch is used.\n {%- if old_relation is not none and old_relation.is_table -%}\n {{ handle_existing_table(should_full_refresh(), old_relation) }}\n {%- endif -%}\n\n -- build model\n {% call statement('main') -%}\n {{ get_create_view_as_sql(target_relation, sql) }}\n {%- endcall %}\n\n {{ run_hooks(post_hooks) }}\n\n {{ return({'relations': [target_relation]}) }}\n\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.dbt.run_hooks", "macro.dbt.handle_existing_table", "macro.dbt.should_full_refresh", "macro.dbt.statement", "macro.dbt.get_create_view_as_sql"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1661544121.347146}, "macro.dbt.get_create_view_as_sql": {"unique_id": "macro.dbt.get_create_view_as_sql", "package_name": "dbt", "root_path": "/opt/homebrew/Cellar/dbt-postgres/1.0.4/libexec/lib/python3.9/site-packages/dbt/include/global_project", "path": "macros/materializations/models/view/create_view_as.sql", "original_file_path": "macros/materializations/models/view/create_view_as.sql", "name": "get_create_view_as_sql", "macro_sql": "{% macro get_create_view_as_sql(relation, sql) -%}\n {{ adapter.dispatch('get_create_view_as_sql', 'dbt')(relation, sql) }}\n{%- endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.dbt.default__get_create_view_as_sql"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1661544121.347587}, "macro.dbt.default__get_create_view_as_sql": {"unique_id": "macro.dbt.default__get_create_view_as_sql", "package_name": "dbt", "root_path": "/opt/homebrew/Cellar/dbt-postgres/1.0.4/libexec/lib/python3.9/site-packages/dbt/include/global_project", "path": "macros/materializations/models/view/create_view_as.sql", "original_file_path": "macros/materializations/models/view/create_view_as.sql", "name": "default__get_create_view_as_sql", "macro_sql": "{% macro default__get_create_view_as_sql(relation, sql) -%}\n {{ return(create_view_as(relation, sql)) }}\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.dbt.create_view_as"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1661544121.347754}, "macro.dbt.create_view_as": {"unique_id": "macro.dbt.create_view_as", "package_name": "dbt", "root_path": "/opt/homebrew/Cellar/dbt-postgres/1.0.4/libexec/lib/python3.9/site-packages/dbt/include/global_project", "path": "macros/materializations/models/view/create_view_as.sql", "original_file_path": "macros/materializations/models/view/create_view_as.sql", "name": "create_view_as", "macro_sql": "{% macro create_view_as(relation, sql) -%}\n {{ adapter.dispatch('create_view_as', 'dbt')(relation, sql) }}\n{%- endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.dbt.default__create_view_as"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1661544121.347939}, "macro.dbt.default__create_view_as": {"unique_id": "macro.dbt.default__create_view_as", "package_name": "dbt", "root_path": "/opt/homebrew/Cellar/dbt-postgres/1.0.4/libexec/lib/python3.9/site-packages/dbt/include/global_project", "path": "macros/materializations/models/view/create_view_as.sql", "original_file_path": "macros/materializations/models/view/create_view_as.sql", "name": "default__create_view_as", "macro_sql": "{% macro default__create_view_as(relation, sql) -%}\n {%- set sql_header = config.get('sql_header', none) -%}\n\n {{ sql_header if sql_header is not none }}\n create view {{ relation }} as (\n {{ sql }}\n );\n{%- endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1661544121.348207}, "macro.dbt.materialization_seed_default": {"unique_id": "macro.dbt.materialization_seed_default", "package_name": "dbt", "root_path": "/opt/homebrew/Cellar/dbt-postgres/1.0.4/libexec/lib/python3.9/site-packages/dbt/include/global_project", "path": "macros/materializations/seeds/seed.sql", "original_file_path": "macros/materializations/seeds/seed.sql", "name": "materialization_seed_default", "macro_sql": "{% materialization seed, default %}\n\n {%- set identifier = model['alias'] -%}\n {%- set full_refresh_mode = (should_full_refresh()) -%}\n\n {%- set old_relation = adapter.get_relation(database=database, schema=schema, identifier=identifier) -%}\n\n {%- set exists_as_table = (old_relation is not none and old_relation.is_table) -%}\n {%- set exists_as_view = (old_relation is not none and old_relation.is_view) -%}\n\n {%- set agate_table = load_agate_table() -%}\n {%- do store_result('agate_table', response='OK', agate_table=agate_table) -%}\n\n {{ run_hooks(pre_hooks, inside_transaction=False) }}\n\n -- `BEGIN` happens here:\n {{ run_hooks(pre_hooks, inside_transaction=True) }}\n\n -- build model\n {% set create_table_sql = \"\" %}\n {% if exists_as_view %}\n {{ exceptions.raise_compiler_error(\"Cannot seed to '{}', it is a view\".format(old_relation)) }}\n {% elif exists_as_table %}\n {% set create_table_sql = reset_csv_table(model, full_refresh_mode, old_relation, agate_table) %}\n {% else %}\n {% set create_table_sql = create_csv_table(model, agate_table) %}\n {% endif %}\n\n {% set code = 'CREATE' if full_refresh_mode else 'INSERT' %}\n {% set rows_affected = (agate_table.rows | length) %}\n {% set sql = load_csv_rows(model, agate_table) %}\n\n {% call noop_statement('main', code ~ ' ' ~ rows_affected, code, rows_affected) %}\n {{ create_table_sql }};\n -- dbt seed --\n {{ sql }}\n {% endcall %}\n\n {% set target_relation = this.incorporate(type='table') %}\n {% do persist_docs(target_relation, model) %}\n\n {% if full_refresh_mode or not exists_as_table %}\n {% do create_indexes(target_relation) %}\n {% endif %}\n\n {{ run_hooks(post_hooks, inside_transaction=True) }}\n\n -- `COMMIT` happens here\n {{ adapter.commit() }}\n\n {{ run_hooks(post_hooks, inside_transaction=False) }}\n\n {{ return({'relations': [target_relation]}) }}\n\n{% endmaterialization %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.dbt.should_full_refresh", "macro.dbt.run_hooks", "macro.dbt.reset_csv_table", "macro.dbt.create_csv_table", "macro.dbt.load_csv_rows", "macro.dbt.noop_statement", "macro.dbt.persist_docs", "macro.dbt.create_indexes"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1661544121.351178}, "macro.dbt.create_csv_table": {"unique_id": "macro.dbt.create_csv_table", "package_name": "dbt", "root_path": "/opt/homebrew/Cellar/dbt-postgres/1.0.4/libexec/lib/python3.9/site-packages/dbt/include/global_project", "path": "macros/materializations/seeds/helpers.sql", "original_file_path": "macros/materializations/seeds/helpers.sql", "name": "create_csv_table", "macro_sql": "{% macro create_csv_table(model, agate_table) -%}\n {{ adapter.dispatch('create_csv_table', 'dbt')(model, agate_table) }}\n{%- endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.dbt.default__create_csv_table"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1661544121.3553011}, "macro.dbt.default__create_csv_table": {"unique_id": "macro.dbt.default__create_csv_table", "package_name": "dbt", "root_path": "/opt/homebrew/Cellar/dbt-postgres/1.0.4/libexec/lib/python3.9/site-packages/dbt/include/global_project", "path": "macros/materializations/seeds/helpers.sql", "original_file_path": "macros/materializations/seeds/helpers.sql", "name": "default__create_csv_table", "macro_sql": "{% macro default__create_csv_table(model, agate_table) %}\n {%- set column_override = model['config'].get('column_types', {}) -%}\n {%- set quote_seed_column = model['config'].get('quote_columns', None) -%}\n\n {% set sql %}\n create table {{ this.render() }} (\n {%- for col_name in agate_table.column_names -%}\n {%- set inferred_type = adapter.convert_type(agate_table, loop.index0) -%}\n {%- set type = column_override.get(col_name, inferred_type) -%}\n {%- set column_name = (col_name | string) -%}\n {{ adapter.quote_seed_column(column_name, quote_seed_column) }} {{ type }} {%- if not loop.last -%}, {%- endif -%}\n {%- endfor -%}\n )\n {% endset %}\n\n {% call statement('_') -%}\n {{ sql }}\n {%- endcall %}\n\n {{ return(sql) }}\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.dbt.statement"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1661544121.3562398}, "macro.dbt.reset_csv_table": {"unique_id": "macro.dbt.reset_csv_table", "package_name": "dbt", "root_path": "/opt/homebrew/Cellar/dbt-postgres/1.0.4/libexec/lib/python3.9/site-packages/dbt/include/global_project", "path": "macros/materializations/seeds/helpers.sql", "original_file_path": "macros/materializations/seeds/helpers.sql", "name": "reset_csv_table", "macro_sql": "{% macro reset_csv_table(model, full_refresh, old_relation, agate_table) -%}\n {{ adapter.dispatch('reset_csv_table', 'dbt')(model, full_refresh, old_relation, agate_table) }}\n{%- endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.dbt.default__reset_csv_table"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1661544121.356471}, "macro.dbt.default__reset_csv_table": {"unique_id": "macro.dbt.default__reset_csv_table", "package_name": "dbt", "root_path": "/opt/homebrew/Cellar/dbt-postgres/1.0.4/libexec/lib/python3.9/site-packages/dbt/include/global_project", "path": "macros/materializations/seeds/helpers.sql", "original_file_path": "macros/materializations/seeds/helpers.sql", "name": "default__reset_csv_table", "macro_sql": "{% macro default__reset_csv_table(model, full_refresh, old_relation, agate_table) %}\n {% set sql = \"\" %}\n {% if full_refresh %}\n {{ adapter.drop_relation(old_relation) }}\n {% set sql = create_csv_table(model, agate_table) %}\n {% else %}\n {{ adapter.truncate_relation(old_relation) }}\n {% set sql = \"truncate table \" ~ old_relation %}\n {% endif %}\n\n {{ return(sql) }}\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.dbt.create_csv_table"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1661544121.3569438}, "macro.dbt.get_binding_char": {"unique_id": "macro.dbt.get_binding_char", "package_name": "dbt", "root_path": "/opt/homebrew/Cellar/dbt-postgres/1.0.4/libexec/lib/python3.9/site-packages/dbt/include/global_project", "path": "macros/materializations/seeds/helpers.sql", "original_file_path": "macros/materializations/seeds/helpers.sql", "name": "get_binding_char", "macro_sql": "{% macro get_binding_char() -%}\n {{ adapter.dispatch('get_binding_char', 'dbt')() }}\n{%- endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.dbt.default__get_binding_char"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1661544121.3570821}, "macro.dbt.default__get_binding_char": {"unique_id": "macro.dbt.default__get_binding_char", "package_name": "dbt", "root_path": "/opt/homebrew/Cellar/dbt-postgres/1.0.4/libexec/lib/python3.9/site-packages/dbt/include/global_project", "path": "macros/materializations/seeds/helpers.sql", "original_file_path": "macros/materializations/seeds/helpers.sql", "name": "default__get_binding_char", "macro_sql": "{% macro default__get_binding_char() %}\n {{ return('%s') }}\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1661544121.3571892}, "macro.dbt.get_batch_size": {"unique_id": "macro.dbt.get_batch_size", "package_name": "dbt", "root_path": "/opt/homebrew/Cellar/dbt-postgres/1.0.4/libexec/lib/python3.9/site-packages/dbt/include/global_project", "path": "macros/materializations/seeds/helpers.sql", "original_file_path": "macros/materializations/seeds/helpers.sql", "name": "get_batch_size", "macro_sql": "{% macro get_batch_size() -%}\n {{ return(adapter.dispatch('get_batch_size', 'dbt')()) }}\n{%- endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.dbt.default__get_batch_size"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1661544121.357343}, "macro.dbt.default__get_batch_size": {"unique_id": "macro.dbt.default__get_batch_size", "package_name": "dbt", "root_path": "/opt/homebrew/Cellar/dbt-postgres/1.0.4/libexec/lib/python3.9/site-packages/dbt/include/global_project", "path": "macros/materializations/seeds/helpers.sql", "original_file_path": "macros/materializations/seeds/helpers.sql", "name": "default__get_batch_size", "macro_sql": "{% macro default__get_batch_size() %}\n {{ return(10000) }}\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1661544121.357452}, "macro.dbt.get_seed_column_quoted_csv": {"unique_id": "macro.dbt.get_seed_column_quoted_csv", "package_name": "dbt", "root_path": "/opt/homebrew/Cellar/dbt-postgres/1.0.4/libexec/lib/python3.9/site-packages/dbt/include/global_project", "path": "macros/materializations/seeds/helpers.sql", "original_file_path": "macros/materializations/seeds/helpers.sql", "name": "get_seed_column_quoted_csv", "macro_sql": "{% macro get_seed_column_quoted_csv(model, column_names) %}\n {%- set quote_seed_column = model['config'].get('quote_columns', None) -%}\n {% set quoted = [] %}\n {% for col in column_names -%}\n {%- do quoted.append(adapter.quote_seed_column(col, quote_seed_column)) -%}\n {%- endfor %}\n\n {%- set dest_cols_csv = quoted | join(', ') -%}\n {{ return(dest_cols_csv) }}\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1661544121.357923}, "macro.dbt.load_csv_rows": {"unique_id": "macro.dbt.load_csv_rows", "package_name": "dbt", "root_path": "/opt/homebrew/Cellar/dbt-postgres/1.0.4/libexec/lib/python3.9/site-packages/dbt/include/global_project", "path": "macros/materializations/seeds/helpers.sql", "original_file_path": "macros/materializations/seeds/helpers.sql", "name": "load_csv_rows", "macro_sql": "{% macro load_csv_rows(model, agate_table) -%}\n {{ adapter.dispatch('load_csv_rows', 'dbt')(model, agate_table) }}\n{%- endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.dbt.default__load_csv_rows"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1661544121.3581812}, "macro.dbt.default__load_csv_rows": {"unique_id": "macro.dbt.default__load_csv_rows", "package_name": "dbt", "root_path": "/opt/homebrew/Cellar/dbt-postgres/1.0.4/libexec/lib/python3.9/site-packages/dbt/include/global_project", "path": "macros/materializations/seeds/helpers.sql", "original_file_path": "macros/materializations/seeds/helpers.sql", "name": "default__load_csv_rows", "macro_sql": "{% macro default__load_csv_rows(model, agate_table) %}\n\n {% set batch_size = get_batch_size() %}\n\n {% set cols_sql = get_seed_column_quoted_csv(model, agate_table.column_names) %}\n {% set bindings = [] %}\n\n {% set statements = [] %}\n\n {% for chunk in agate_table.rows | batch(batch_size) %}\n {% set bindings = [] %}\n\n {% for row in chunk %}\n {% do bindings.extend(row) %}\n {% endfor %}\n\n {% set sql %}\n insert into {{ this.render() }} ({{ cols_sql }}) values\n {% for row in chunk -%}\n ({%- for column in agate_table.column_names -%}\n {{ get_binding_char() }}\n {%- if not loop.last%},{%- endif %}\n {%- endfor -%})\n {%- if not loop.last%},{%- endif %}\n {%- endfor %}\n {% endset %}\n\n {% do adapter.add_query(sql, bindings=bindings, abridge_sql_log=True) %}\n\n {% if loop.index0 == 0 %}\n {% do statements.append(sql) %}\n {% endif %}\n {% endfor %}\n\n {# Return SQL so we can render it out into the compiled files #}\n {{ return(statements[0]) }}\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.dbt.get_batch_size", "macro.dbt.get_seed_column_quoted_csv", "macro.dbt.get_binding_char"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1661544121.3594408}, "macro.dbt.generate_alias_name": {"unique_id": "macro.dbt.generate_alias_name", "package_name": "dbt", "root_path": "/opt/homebrew/Cellar/dbt-postgres/1.0.4/libexec/lib/python3.9/site-packages/dbt/include/global_project", "path": "macros/get_custom_name/get_custom_alias.sql", "original_file_path": "macros/get_custom_name/get_custom_alias.sql", "name": "generate_alias_name", "macro_sql": "{% macro generate_alias_name(custom_alias_name=none, node=none) -%}\n {% do return(adapter.dispatch('generate_alias_name', 'dbt')(custom_alias_name, node)) %}\n{%- endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.dbt.default__generate_alias_name"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1661544121.360063}, "macro.dbt.default__generate_alias_name": {"unique_id": "macro.dbt.default__generate_alias_name", "package_name": "dbt", "root_path": "/opt/homebrew/Cellar/dbt-postgres/1.0.4/libexec/lib/python3.9/site-packages/dbt/include/global_project", "path": "macros/get_custom_name/get_custom_alias.sql", "original_file_path": "macros/get_custom_name/get_custom_alias.sql", "name": "default__generate_alias_name", "macro_sql": "{% macro default__generate_alias_name(custom_alias_name=none, node=none) -%}\n\n {%- if custom_alias_name is none -%}\n\n {{ node.name }}\n\n {%- else -%}\n\n {{ custom_alias_name | trim }}\n\n {%- endif -%}\n\n{%- endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1661544121.3603048}, "macro.dbt.generate_schema_name": {"unique_id": "macro.dbt.generate_schema_name", "package_name": "dbt", "root_path": "/opt/homebrew/Cellar/dbt-postgres/1.0.4/libexec/lib/python3.9/site-packages/dbt/include/global_project", "path": "macros/get_custom_name/get_custom_schema.sql", "original_file_path": "macros/get_custom_name/get_custom_schema.sql", "name": "generate_schema_name", "macro_sql": "{% macro generate_schema_name(custom_schema_name=none, node=none) -%}\n {{ return(adapter.dispatch('generate_schema_name', 'dbt')(custom_schema_name, node)) }}\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.dbt.default__generate_schema_name"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1661544121.36092}, "macro.dbt.default__generate_schema_name": {"unique_id": "macro.dbt.default__generate_schema_name", "package_name": "dbt", "root_path": "/opt/homebrew/Cellar/dbt-postgres/1.0.4/libexec/lib/python3.9/site-packages/dbt/include/global_project", "path": "macros/get_custom_name/get_custom_schema.sql", "original_file_path": "macros/get_custom_name/get_custom_schema.sql", "name": "default__generate_schema_name", "macro_sql": "{% macro default__generate_schema_name(custom_schema_name, node) -%}\n\n {%- set default_schema = target.schema -%}\n {%- if custom_schema_name is none -%}\n\n {{ default_schema }}\n\n {%- else -%}\n\n {{ default_schema }}_{{ custom_schema_name | trim }}\n\n {%- endif -%}\n\n{%- endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1661544121.361186}, "macro.dbt.generate_schema_name_for_env": {"unique_id": "macro.dbt.generate_schema_name_for_env", "package_name": "dbt", "root_path": "/opt/homebrew/Cellar/dbt-postgres/1.0.4/libexec/lib/python3.9/site-packages/dbt/include/global_project", "path": "macros/get_custom_name/get_custom_schema.sql", "original_file_path": "macros/get_custom_name/get_custom_schema.sql", "name": "generate_schema_name_for_env", "macro_sql": "{% macro generate_schema_name_for_env(custom_schema_name, node) -%}\n\n {%- set default_schema = target.schema -%}\n {%- if target.name == 'prod' and custom_schema_name is not none -%}\n\n {{ custom_schema_name | trim }}\n\n {%- else -%}\n\n {{ default_schema }}\n\n {%- endif -%}\n\n{%- endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1661544121.361475}, "macro.dbt.generate_database_name": {"unique_id": "macro.dbt.generate_database_name", "package_name": "dbt", "root_path": "/opt/homebrew/Cellar/dbt-postgres/1.0.4/libexec/lib/python3.9/site-packages/dbt/include/global_project", "path": "macros/get_custom_name/get_custom_database.sql", "original_file_path": "macros/get_custom_name/get_custom_database.sql", "name": "generate_database_name", "macro_sql": "{% macro generate_database_name(custom_database_name=none, node=none) -%}\n {% do return(adapter.dispatch('generate_database_name', 'dbt')(custom_database_name, node)) %}\n{%- endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.dbt.default__generate_database_name"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1661544121.361949}, "macro.dbt.default__generate_database_name": {"unique_id": "macro.dbt.default__generate_database_name", "package_name": "dbt", "root_path": "/opt/homebrew/Cellar/dbt-postgres/1.0.4/libexec/lib/python3.9/site-packages/dbt/include/global_project", "path": "macros/get_custom_name/get_custom_database.sql", "original_file_path": "macros/get_custom_name/get_custom_database.sql", "name": "default__generate_database_name", "macro_sql": "{% macro default__generate_database_name(custom_database_name=none, node=none) -%}\n {%- set default_database = target.database -%}\n {%- if custom_database_name is none -%}\n\n {{ default_database }}\n\n {%- else -%}\n\n {{ custom_database_name }}\n\n {%- endif -%}\n\n{%- endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1661544121.3622022}, "macro.dbt.default__test_relationships": {"unique_id": "macro.dbt.default__test_relationships", "package_name": "dbt", "root_path": "/opt/homebrew/Cellar/dbt-postgres/1.0.4/libexec/lib/python3.9/site-packages/dbt/include/global_project", "path": "macros/generic_test_sql/relationships.sql", "original_file_path": "macros/generic_test_sql/relationships.sql", "name": "default__test_relationships", "macro_sql": "{% macro default__test_relationships(model, column_name, to, field) %}\n\nwith child as (\n select {{ column_name }} as from_field\n from {{ model }}\n where {{ column_name }} is not null\n),\n\nparent as (\n select {{ field }} as to_field\n from {{ to }}\n)\n\nselect\n from_field\n\nfrom child\nleft join parent\n on child.from_field = parent.to_field\n\nwhere parent.to_field is null\n\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1661544121.3626392}, "macro.dbt.default__test_not_null": {"unique_id": "macro.dbt.default__test_not_null", "package_name": "dbt", "root_path": "/opt/homebrew/Cellar/dbt-postgres/1.0.4/libexec/lib/python3.9/site-packages/dbt/include/global_project", "path": "macros/generic_test_sql/not_null.sql", "original_file_path": "macros/generic_test_sql/not_null.sql", "name": "default__test_not_null", "macro_sql": "{% macro default__test_not_null(model, column_name) %}\n\nselect *\nfrom {{ model }}\nwhere {{ column_name }} is null\n\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1661544121.362894}, "macro.dbt.default__test_unique": {"unique_id": "macro.dbt.default__test_unique", "package_name": "dbt", "root_path": "/opt/homebrew/Cellar/dbt-postgres/1.0.4/libexec/lib/python3.9/site-packages/dbt/include/global_project", "path": "macros/generic_test_sql/unique.sql", "original_file_path": "macros/generic_test_sql/unique.sql", "name": "default__test_unique", "macro_sql": "{% macro default__test_unique(model, column_name) %}\n\nselect\n {{ column_name }} as unique_field,\n count(*) as n_records\n\nfrom {{ model }}\nwhere {{ column_name }} is not null\ngroup by {{ column_name }}\nhaving count(*) > 1\n\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1661544121.3632078}, "macro.dbt.default__test_accepted_values": {"unique_id": "macro.dbt.default__test_accepted_values", "package_name": "dbt", "root_path": "/opt/homebrew/Cellar/dbt-postgres/1.0.4/libexec/lib/python3.9/site-packages/dbt/include/global_project", "path": "macros/generic_test_sql/accepted_values.sql", "original_file_path": "macros/generic_test_sql/accepted_values.sql", "name": "default__test_accepted_values", "macro_sql": "{% macro default__test_accepted_values(model, column_name, values, quote=True) %}\n\nwith all_values as (\n\n select\n {{ column_name }} as value_field,\n count(*) as n_records\n\n from {{ model }}\n group by {{ column_name }}\n\n)\n\nselect *\nfrom all_values\nwhere value_field not in (\n {% for value in values -%}\n {% if quote -%}\n '{{ value }}'\n {%- else -%}\n {{ value }}\n {%- endif -%}\n {%- if not loop.last -%},{%- endif %}\n {%- endfor %}\n)\n\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1661544121.363848}, "macro.dbt.statement": {"unique_id": "macro.dbt.statement", "package_name": "dbt", "root_path": "/opt/homebrew/Cellar/dbt-postgres/1.0.4/libexec/lib/python3.9/site-packages/dbt/include/global_project", "path": "macros/etc/statement.sql", "original_file_path": "macros/etc/statement.sql", "name": "statement", "macro_sql": "{% macro statement(name=None, fetch_result=False, auto_begin=True) -%}\n {%- if execute: -%}\n {%- set sql = caller() -%}\n\n {%- if name == 'main' -%}\n {{ log('Writing runtime SQL for node \"{}\"'.format(model['unique_id'])) }}\n {{ write(sql) }}\n {%- endif -%}\n\n {%- set res, table = adapter.execute(sql, auto_begin=auto_begin, fetch=fetch_result) -%}\n {%- if name is not none -%}\n {{ store_result(name, response=res, agate_table=table) }}\n {%- endif -%}\n\n {%- endif -%}\n{%- endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1661544121.365024}, "macro.dbt.noop_statement": {"unique_id": "macro.dbt.noop_statement", "package_name": "dbt", "root_path": "/opt/homebrew/Cellar/dbt-postgres/1.0.4/libexec/lib/python3.9/site-packages/dbt/include/global_project", "path": "macros/etc/statement.sql", "original_file_path": "macros/etc/statement.sql", "name": "noop_statement", "macro_sql": "{% macro noop_statement(name=None, message=None, code=None, rows_affected=None, res=None) -%}\n {%- set sql = caller() -%}\n\n {%- if name == 'main' -%}\n {{ log('Writing runtime SQL for node \"{}\"'.format(model['unique_id'])) }}\n {{ write(sql) }}\n {%- endif -%}\n\n {%- if name is not none -%}\n {{ store_raw_result(name, message=message, code=code, rows_affected=rows_affected, agate_table=res) }}\n {%- endif -%}\n\n{%- endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1661544121.365621}, "macro.dbt.run_query": {"unique_id": "macro.dbt.run_query", "package_name": "dbt", "root_path": "/opt/homebrew/Cellar/dbt-postgres/1.0.4/libexec/lib/python3.9/site-packages/dbt/include/global_project", "path": "macros/etc/statement.sql", "original_file_path": "macros/etc/statement.sql", "name": "run_query", "macro_sql": "{% macro run_query(sql) %}\n {% call statement(\"run_query_statement\", fetch_result=true, auto_begin=false) %}\n {{ sql }}\n {% endcall %}\n\n {% do return(load_result(\"run_query_statement\").table) %}\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.dbt.statement"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1661544121.3659258}, "macro.dbt.convert_datetime": {"unique_id": "macro.dbt.convert_datetime", "package_name": "dbt", "root_path": "/opt/homebrew/Cellar/dbt-postgres/1.0.4/libexec/lib/python3.9/site-packages/dbt/include/global_project", "path": "macros/etc/datetime.sql", "original_file_path": "macros/etc/datetime.sql", "name": "convert_datetime", "macro_sql": "{% macro convert_datetime(date_str, date_fmt) %}\n\n {% set error_msg -%}\n The provided partition date '{{ date_str }}' does not match the expected format '{{ date_fmt }}'\n {%- endset %}\n\n {% set res = try_or_compiler_error(error_msg, modules.datetime.datetime.strptime, date_str.strip(), date_fmt) %}\n {{ return(res) }}\n\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1661544121.367738}, "macro.dbt.dates_in_range": {"unique_id": "macro.dbt.dates_in_range", "package_name": "dbt", "root_path": "/opt/homebrew/Cellar/dbt-postgres/1.0.4/libexec/lib/python3.9/site-packages/dbt/include/global_project", "path": "macros/etc/datetime.sql", "original_file_path": "macros/etc/datetime.sql", "name": "dates_in_range", "macro_sql": "{% macro dates_in_range(start_date_str, end_date_str=none, in_fmt=\"%Y%m%d\", out_fmt=\"%Y%m%d\") %}\n {% set end_date_str = start_date_str if end_date_str is none else end_date_str %}\n\n {% set start_date = convert_datetime(start_date_str, in_fmt) %}\n {% set end_date = convert_datetime(end_date_str, in_fmt) %}\n\n {% set day_count = (end_date - start_date).days %}\n {% if day_count < 0 %}\n {% set msg -%}\n Partiton start date is after the end date ({{ start_date }}, {{ end_date }})\n {%- endset %}\n\n {{ exceptions.raise_compiler_error(msg, model) }}\n {% endif %}\n\n {% set date_list = [] %}\n {% for i in range(0, day_count + 1) %}\n {% set the_date = (modules.datetime.timedelta(days=i) + start_date) %}\n {% if not out_fmt %}\n {% set _ = date_list.append(the_date) %}\n {% else %}\n {% set _ = date_list.append(the_date.strftime(out_fmt)) %}\n {% endif %}\n {% endfor %}\n\n {{ return(date_list) }}\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.dbt.convert_datetime"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1661544121.36912}, "macro.dbt.partition_range": {"unique_id": "macro.dbt.partition_range", "package_name": "dbt", "root_path": "/opt/homebrew/Cellar/dbt-postgres/1.0.4/libexec/lib/python3.9/site-packages/dbt/include/global_project", "path": "macros/etc/datetime.sql", "original_file_path": "macros/etc/datetime.sql", "name": "partition_range", "macro_sql": "{% macro partition_range(raw_partition_date, date_fmt='%Y%m%d') %}\n {% set partition_range = (raw_partition_date | string).split(\",\") %}\n\n {% if (partition_range | length) == 1 %}\n {% set start_date = partition_range[0] %}\n {% set end_date = none %}\n {% elif (partition_range | length) == 2 %}\n {% set start_date = partition_range[0] %}\n {% set end_date = partition_range[1] %}\n {% else %}\n {{ exceptions.raise_compiler_error(\"Invalid partition time. Expected format: {Start Date}[,{End Date}]. Got: \" ~ raw_partition_date) }}\n {% endif %}\n\n {{ return(dates_in_range(start_date, end_date, in_fmt=date_fmt)) }}\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.dbt.dates_in_range"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1661544121.369951}, "macro.dbt.py_current_timestring": {"unique_id": "macro.dbt.py_current_timestring", "package_name": "dbt", "root_path": "/opt/homebrew/Cellar/dbt-postgres/1.0.4/libexec/lib/python3.9/site-packages/dbt/include/global_project", "path": "macros/etc/datetime.sql", "original_file_path": "macros/etc/datetime.sql", "name": "py_current_timestring", "macro_sql": "{% macro py_current_timestring() %}\n {% set dt = modules.datetime.datetime.now() %}\n {% do return(dt.strftime(\"%Y%m%d%H%M%S%f\")) %}\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1661544121.370219}, "macro.dbt.create_schema": {"unique_id": "macro.dbt.create_schema", "package_name": "dbt", "root_path": "/opt/homebrew/Cellar/dbt-postgres/1.0.4/libexec/lib/python3.9/site-packages/dbt/include/global_project", "path": "macros/adapters/schema.sql", "original_file_path": "macros/adapters/schema.sql", "name": "create_schema", "macro_sql": "{% macro create_schema(relation) -%}\n {{ adapter.dispatch('create_schema', 'dbt')(relation) }}\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.dbt_postgres.postgres__create_schema"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1661544121.3708029}, "macro.dbt.default__create_schema": {"unique_id": "macro.dbt.default__create_schema", "package_name": "dbt", "root_path": "/opt/homebrew/Cellar/dbt-postgres/1.0.4/libexec/lib/python3.9/site-packages/dbt/include/global_project", "path": "macros/adapters/schema.sql", "original_file_path": "macros/adapters/schema.sql", "name": "default__create_schema", "macro_sql": "{% macro default__create_schema(relation) -%}\n {%- call statement('create_schema') -%}\n create schema if not exists {{ relation.without_identifier() }}\n {% endcall %}\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.dbt.statement"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1661544121.371006}, "macro.dbt.drop_schema": {"unique_id": "macro.dbt.drop_schema", "package_name": "dbt", "root_path": "/opt/homebrew/Cellar/dbt-postgres/1.0.4/libexec/lib/python3.9/site-packages/dbt/include/global_project", "path": "macros/adapters/schema.sql", "original_file_path": "macros/adapters/schema.sql", "name": "drop_schema", "macro_sql": "{% macro drop_schema(relation) -%}\n {{ adapter.dispatch('drop_schema', 'dbt')(relation) }}\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.dbt_postgres.postgres__drop_schema"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1661544121.371179}, "macro.dbt.default__drop_schema": {"unique_id": "macro.dbt.default__drop_schema", "package_name": "dbt", "root_path": "/opt/homebrew/Cellar/dbt-postgres/1.0.4/libexec/lib/python3.9/site-packages/dbt/include/global_project", "path": "macros/adapters/schema.sql", "original_file_path": "macros/adapters/schema.sql", "name": "default__drop_schema", "macro_sql": "{% macro default__drop_schema(relation) -%}\n {%- call statement('drop_schema') -%}\n drop schema if exists {{ relation.without_identifier() }} cascade\n {% endcall %}\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.dbt.statement"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1661544121.371367}, "macro.dbt.get_create_index_sql": {"unique_id": "macro.dbt.get_create_index_sql", "package_name": "dbt", "root_path": "/opt/homebrew/Cellar/dbt-postgres/1.0.4/libexec/lib/python3.9/site-packages/dbt/include/global_project", "path": "macros/adapters/indexes.sql", "original_file_path": "macros/adapters/indexes.sql", "name": "get_create_index_sql", "macro_sql": "{% macro get_create_index_sql(relation, index_dict) -%}\n {{ return(adapter.dispatch('get_create_index_sql', 'dbt')(relation, index_dict)) }}\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.dbt_postgres.postgres__get_create_index_sql"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1661544121.371944}, "macro.dbt.default__get_create_index_sql": {"unique_id": "macro.dbt.default__get_create_index_sql", "package_name": "dbt", "root_path": "/opt/homebrew/Cellar/dbt-postgres/1.0.4/libexec/lib/python3.9/site-packages/dbt/include/global_project", "path": "macros/adapters/indexes.sql", "original_file_path": "macros/adapters/indexes.sql", "name": "default__get_create_index_sql", "macro_sql": "{% macro default__get_create_index_sql(relation, index_dict) -%}\n {% do return(None) %}\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1661544121.3720891}, "macro.dbt.create_indexes": {"unique_id": "macro.dbt.create_indexes", "package_name": "dbt", "root_path": "/opt/homebrew/Cellar/dbt-postgres/1.0.4/libexec/lib/python3.9/site-packages/dbt/include/global_project", "path": "macros/adapters/indexes.sql", "original_file_path": "macros/adapters/indexes.sql", "name": "create_indexes", "macro_sql": "{% macro create_indexes(relation) -%}\n {{ adapter.dispatch('create_indexes', 'dbt')(relation) }}\n{%- endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.dbt.default__create_indexes"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1661544121.372252}, "macro.dbt.default__create_indexes": {"unique_id": "macro.dbt.default__create_indexes", "package_name": "dbt", "root_path": "/opt/homebrew/Cellar/dbt-postgres/1.0.4/libexec/lib/python3.9/site-packages/dbt/include/global_project", "path": "macros/adapters/indexes.sql", "original_file_path": "macros/adapters/indexes.sql", "name": "default__create_indexes", "macro_sql": "{% macro default__create_indexes(relation) -%}\n {%- set _indexes = config.get('indexes', default=[]) -%}\n\n {% for _index_dict in _indexes %}\n {% set create_index_sql = get_create_index_sql(relation, _index_dict) %}\n {% if create_index_sql %}\n {% do run_query(create_index_sql) %}\n {% endif %}\n {% endfor %}\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.dbt.get_create_index_sql", "macro.dbt.run_query"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1661544121.372671}, "macro.dbt.make_temp_relation": {"unique_id": "macro.dbt.make_temp_relation", "package_name": "dbt", "root_path": "/opt/homebrew/Cellar/dbt-postgres/1.0.4/libexec/lib/python3.9/site-packages/dbt/include/global_project", "path": "macros/adapters/relation.sql", "original_file_path": "macros/adapters/relation.sql", "name": "make_temp_relation", "macro_sql": "{% macro make_temp_relation(base_relation, suffix='__dbt_tmp') %}\n {{ return(adapter.dispatch('make_temp_relation', 'dbt')(base_relation, suffix))}}\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.dbt_postgres.postgres__make_temp_relation"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1661544121.3744}, "macro.dbt.default__make_temp_relation": {"unique_id": "macro.dbt.default__make_temp_relation", "package_name": "dbt", "root_path": "/opt/homebrew/Cellar/dbt-postgres/1.0.4/libexec/lib/python3.9/site-packages/dbt/include/global_project", "path": "macros/adapters/relation.sql", "original_file_path": "macros/adapters/relation.sql", "name": "default__make_temp_relation", "macro_sql": "{% macro default__make_temp_relation(base_relation, suffix) %}\n {% set tmp_identifier = base_relation.identifier ~ suffix %}\n {% set tmp_relation = base_relation.incorporate(\n path={\"identifier\": tmp_identifier}) -%}\n\n {% do return(tmp_relation) %}\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1661544121.374723}, "macro.dbt.drop_relation": {"unique_id": "macro.dbt.drop_relation", "package_name": "dbt", "root_path": "/opt/homebrew/Cellar/dbt-postgres/1.0.4/libexec/lib/python3.9/site-packages/dbt/include/global_project", "path": "macros/adapters/relation.sql", "original_file_path": "macros/adapters/relation.sql", "name": "drop_relation", "macro_sql": "{% macro drop_relation(relation) -%}\n {{ return(adapter.dispatch('drop_relation', 'dbt')(relation)) }}\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.dbt.default__drop_relation"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1661544121.374919}, "macro.dbt.default__drop_relation": {"unique_id": "macro.dbt.default__drop_relation", "package_name": "dbt", "root_path": "/opt/homebrew/Cellar/dbt-postgres/1.0.4/libexec/lib/python3.9/site-packages/dbt/include/global_project", "path": "macros/adapters/relation.sql", "original_file_path": "macros/adapters/relation.sql", "name": "default__drop_relation", "macro_sql": "{% macro default__drop_relation(relation) -%}\n {% call statement('drop_relation', auto_begin=False) -%}\n drop {{ relation.type }} if exists {{ relation }} cascade\n {%- endcall %}\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.dbt.statement"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1661544121.3751428}, "macro.dbt.truncate_relation": {"unique_id": "macro.dbt.truncate_relation", "package_name": "dbt", "root_path": "/opt/homebrew/Cellar/dbt-postgres/1.0.4/libexec/lib/python3.9/site-packages/dbt/include/global_project", "path": "macros/adapters/relation.sql", "original_file_path": "macros/adapters/relation.sql", "name": "truncate_relation", "macro_sql": "{% macro truncate_relation(relation) -%}\n {{ return(adapter.dispatch('truncate_relation', 'dbt')(relation)) }}\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.dbt.default__truncate_relation"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1661544121.375335}, "macro.dbt.default__truncate_relation": {"unique_id": "macro.dbt.default__truncate_relation", "package_name": "dbt", "root_path": "/opt/homebrew/Cellar/dbt-postgres/1.0.4/libexec/lib/python3.9/site-packages/dbt/include/global_project", "path": "macros/adapters/relation.sql", "original_file_path": "macros/adapters/relation.sql", "name": "default__truncate_relation", "macro_sql": "{% macro default__truncate_relation(relation) -%}\n {% call statement('truncate_relation') -%}\n truncate table {{ relation }}\n {%- endcall %}\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.dbt.statement"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1661544121.375496}, "macro.dbt.rename_relation": {"unique_id": "macro.dbt.rename_relation", "package_name": "dbt", "root_path": "/opt/homebrew/Cellar/dbt-postgres/1.0.4/libexec/lib/python3.9/site-packages/dbt/include/global_project", "path": "macros/adapters/relation.sql", "original_file_path": "macros/adapters/relation.sql", "name": "rename_relation", "macro_sql": "{% macro rename_relation(from_relation, to_relation) -%}\n {{ return(adapter.dispatch('rename_relation', 'dbt')(from_relation, to_relation)) }}\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.dbt.default__rename_relation"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1661544121.375702}, "macro.dbt.default__rename_relation": {"unique_id": "macro.dbt.default__rename_relation", "package_name": "dbt", "root_path": "/opt/homebrew/Cellar/dbt-postgres/1.0.4/libexec/lib/python3.9/site-packages/dbt/include/global_project", "path": "macros/adapters/relation.sql", "original_file_path": "macros/adapters/relation.sql", "name": "default__rename_relation", "macro_sql": "{% macro default__rename_relation(from_relation, to_relation) -%}\n {% set target_name = adapter.quote_as_configured(to_relation.identifier, 'identifier') %}\n {% call statement('rename_relation') -%}\n alter table {{ from_relation }} rename to {{ target_name }}\n {%- endcall %}\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.dbt.statement"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1661544121.376006}, "macro.dbt.get_or_create_relation": {"unique_id": "macro.dbt.get_or_create_relation", "package_name": "dbt", "root_path": "/opt/homebrew/Cellar/dbt-postgres/1.0.4/libexec/lib/python3.9/site-packages/dbt/include/global_project", "path": "macros/adapters/relation.sql", "original_file_path": "macros/adapters/relation.sql", "name": "get_or_create_relation", "macro_sql": "{% macro get_or_create_relation(database, schema, identifier, type) -%}\n {{ return(adapter.dispatch('get_or_create_relation', 'dbt')(database, schema, identifier, type)) }}\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.dbt.default__get_or_create_relation"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1661544121.376266}, "macro.dbt.default__get_or_create_relation": {"unique_id": "macro.dbt.default__get_or_create_relation", "package_name": "dbt", "root_path": "/opt/homebrew/Cellar/dbt-postgres/1.0.4/libexec/lib/python3.9/site-packages/dbt/include/global_project", "path": "macros/adapters/relation.sql", "original_file_path": "macros/adapters/relation.sql", "name": "default__get_or_create_relation", "macro_sql": "{% macro default__get_or_create_relation(database, schema, identifier, type) %}\n {%- set target_relation = adapter.get_relation(database=database, schema=schema, identifier=identifier) %}\n\n {% if target_relation %}\n {% do return([true, target_relation]) %}\n {% endif %}\n\n {%- set new_relation = api.Relation.create(\n database=database,\n schema=schema,\n identifier=identifier,\n type=type\n ) -%}\n {% do return([false, new_relation]) %}\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1661544121.3769531}, "macro.dbt.load_relation": {"unique_id": "macro.dbt.load_relation", "package_name": "dbt", "root_path": "/opt/homebrew/Cellar/dbt-postgres/1.0.4/libexec/lib/python3.9/site-packages/dbt/include/global_project", "path": "macros/adapters/relation.sql", "original_file_path": "macros/adapters/relation.sql", "name": "load_relation", "macro_sql": "{% macro load_relation(relation) %}\n {% do return(adapter.get_relation(\n database=relation.database,\n schema=relation.schema,\n identifier=relation.identifier\n )) -%}\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1661544121.3771992}, "macro.dbt.drop_relation_if_exists": {"unique_id": "macro.dbt.drop_relation_if_exists", "package_name": "dbt", "root_path": "/opt/homebrew/Cellar/dbt-postgres/1.0.4/libexec/lib/python3.9/site-packages/dbt/include/global_project", "path": "macros/adapters/relation.sql", "original_file_path": "macros/adapters/relation.sql", "name": "drop_relation_if_exists", "macro_sql": "{% macro drop_relation_if_exists(relation) %}\n {% if relation is not none %}\n {{ adapter.drop_relation(relation) }}\n {% endif %}\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1661544121.3774028}, "macro.dbt.current_timestamp": {"unique_id": "macro.dbt.current_timestamp", "package_name": "dbt", "root_path": "/opt/homebrew/Cellar/dbt-postgres/1.0.4/libexec/lib/python3.9/site-packages/dbt/include/global_project", "path": "macros/adapters/freshness.sql", "original_file_path": "macros/adapters/freshness.sql", "name": "current_timestamp", "macro_sql": "{% macro current_timestamp() -%}\n {{ adapter.dispatch('current_timestamp', 'dbt')() }}\n{%- endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.dbt_postgres.postgres__current_timestamp"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1661544121.3780322}, "macro.dbt.default__current_timestamp": {"unique_id": "macro.dbt.default__current_timestamp", "package_name": "dbt", "root_path": "/opt/homebrew/Cellar/dbt-postgres/1.0.4/libexec/lib/python3.9/site-packages/dbt/include/global_project", "path": "macros/adapters/freshness.sql", "original_file_path": "macros/adapters/freshness.sql", "name": "default__current_timestamp", "macro_sql": "{% macro default__current_timestamp() -%}\n {{ exceptions.raise_not_implemented(\n 'current_timestamp macro not implemented for adapter '+adapter.type()) }}\n{%- endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1661544121.378187}, "macro.dbt.collect_freshness": {"unique_id": "macro.dbt.collect_freshness", "package_name": "dbt", "root_path": "/opt/homebrew/Cellar/dbt-postgres/1.0.4/libexec/lib/python3.9/site-packages/dbt/include/global_project", "path": "macros/adapters/freshness.sql", "original_file_path": "macros/adapters/freshness.sql", "name": "collect_freshness", "macro_sql": "{% macro collect_freshness(source, loaded_at_field, filter) %}\n {{ return(adapter.dispatch('collect_freshness', 'dbt')(source, loaded_at_field, filter))}}\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.fivetran_utils.default__collect_freshness"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1661544121.3784251}, "macro.dbt.default__collect_freshness": {"unique_id": "macro.dbt.default__collect_freshness", "package_name": "dbt", "root_path": "/opt/homebrew/Cellar/dbt-postgres/1.0.4/libexec/lib/python3.9/site-packages/dbt/include/global_project", "path": "macros/adapters/freshness.sql", "original_file_path": "macros/adapters/freshness.sql", "name": "default__collect_freshness", "macro_sql": "{% macro default__collect_freshness(source, loaded_at_field, filter) %}\n {% call statement('collect_freshness', fetch_result=True, auto_begin=False) -%}\n select\n max({{ loaded_at_field }}) as max_loaded_at,\n {{ current_timestamp() }} as snapshotted_at\n from {{ source }}\n {% if filter %}\n where {{ filter }}\n {% endif %}\n {% endcall %}\n {{ return(load_result('collect_freshness').table) }}\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.dbt.statement", "macro.dbt_utils.current_timestamp"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1661544121.3788722}, "macro.dbt.alter_column_comment": {"unique_id": "macro.dbt.alter_column_comment", "package_name": "dbt", "root_path": "/opt/homebrew/Cellar/dbt-postgres/1.0.4/libexec/lib/python3.9/site-packages/dbt/include/global_project", "path": "macros/adapters/persist_docs.sql", "original_file_path": "macros/adapters/persist_docs.sql", "name": "alter_column_comment", "macro_sql": "{% macro alter_column_comment(relation, column_dict) -%}\n {{ return(adapter.dispatch('alter_column_comment', 'dbt')(relation, column_dict)) }}\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.dbt_postgres.postgres__alter_column_comment"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1661544121.379649}, "macro.dbt.default__alter_column_comment": {"unique_id": "macro.dbt.default__alter_column_comment", "package_name": "dbt", "root_path": "/opt/homebrew/Cellar/dbt-postgres/1.0.4/libexec/lib/python3.9/site-packages/dbt/include/global_project", "path": "macros/adapters/persist_docs.sql", "original_file_path": "macros/adapters/persist_docs.sql", "name": "default__alter_column_comment", "macro_sql": "{% macro default__alter_column_comment(relation, column_dict) -%}\n {{ exceptions.raise_not_implemented(\n 'alter_column_comment macro not implemented for adapter '+adapter.type()) }}\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1661544121.379829}, "macro.dbt.alter_relation_comment": {"unique_id": "macro.dbt.alter_relation_comment", "package_name": "dbt", "root_path": "/opt/homebrew/Cellar/dbt-postgres/1.0.4/libexec/lib/python3.9/site-packages/dbt/include/global_project", "path": "macros/adapters/persist_docs.sql", "original_file_path": "macros/adapters/persist_docs.sql", "name": "alter_relation_comment", "macro_sql": "{% macro alter_relation_comment(relation, relation_comment) -%}\n {{ return(adapter.dispatch('alter_relation_comment', 'dbt')(relation, relation_comment)) }}\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.dbt_postgres.postgres__alter_relation_comment"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1661544121.380043}, "macro.dbt.default__alter_relation_comment": {"unique_id": "macro.dbt.default__alter_relation_comment", "package_name": "dbt", "root_path": "/opt/homebrew/Cellar/dbt-postgres/1.0.4/libexec/lib/python3.9/site-packages/dbt/include/global_project", "path": "macros/adapters/persist_docs.sql", "original_file_path": "macros/adapters/persist_docs.sql", "name": "default__alter_relation_comment", "macro_sql": "{% macro default__alter_relation_comment(relation, relation_comment) -%}\n {{ exceptions.raise_not_implemented(\n 'alter_relation_comment macro not implemented for adapter '+adapter.type()) }}\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1661544121.380219}, "macro.dbt.persist_docs": {"unique_id": "macro.dbt.persist_docs", "package_name": "dbt", "root_path": "/opt/homebrew/Cellar/dbt-postgres/1.0.4/libexec/lib/python3.9/site-packages/dbt/include/global_project", "path": "macros/adapters/persist_docs.sql", "original_file_path": "macros/adapters/persist_docs.sql", "name": "persist_docs", "macro_sql": "{% macro persist_docs(relation, model, for_relation=true, for_columns=true) -%}\n {{ return(adapter.dispatch('persist_docs', 'dbt')(relation, model, for_relation, for_columns)) }}\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.dbt.default__persist_docs"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1661544121.380507}, "macro.dbt.default__persist_docs": {"unique_id": "macro.dbt.default__persist_docs", "package_name": "dbt", "root_path": "/opt/homebrew/Cellar/dbt-postgres/1.0.4/libexec/lib/python3.9/site-packages/dbt/include/global_project", "path": "macros/adapters/persist_docs.sql", "original_file_path": "macros/adapters/persist_docs.sql", "name": "default__persist_docs", "macro_sql": "{% macro default__persist_docs(relation, model, for_relation, for_columns) -%}\n {% if for_relation and config.persist_relation_docs() and model.description %}\n {% do run_query(alter_relation_comment(relation, model.description)) %}\n {% endif %}\n\n {% if for_columns and config.persist_column_docs() and model.columns %}\n {% do run_query(alter_column_comment(relation, model.columns)) %}\n {% endif %}\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.dbt.run_query", "macro.dbt.alter_relation_comment", "macro.dbt.alter_column_comment"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1661544121.3810198}, "macro.dbt.get_catalog": {"unique_id": "macro.dbt.get_catalog", "package_name": "dbt", "root_path": "/opt/homebrew/Cellar/dbt-postgres/1.0.4/libexec/lib/python3.9/site-packages/dbt/include/global_project", "path": "macros/adapters/metadata.sql", "original_file_path": "macros/adapters/metadata.sql", "name": "get_catalog", "macro_sql": "{% macro get_catalog(information_schema, schemas) -%}\n {{ return(adapter.dispatch('get_catalog', 'dbt')(information_schema, schemas)) }}\n{%- endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.dbt_postgres.postgres__get_catalog"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1661544121.3826308}, "macro.dbt.default__get_catalog": {"unique_id": "macro.dbt.default__get_catalog", "package_name": "dbt", "root_path": "/opt/homebrew/Cellar/dbt-postgres/1.0.4/libexec/lib/python3.9/site-packages/dbt/include/global_project", "path": "macros/adapters/metadata.sql", "original_file_path": "macros/adapters/metadata.sql", "name": "default__get_catalog", "macro_sql": "{% macro default__get_catalog(information_schema, schemas) -%}\n\n {% set typename = adapter.type() %}\n {% set msg -%}\n get_catalog not implemented for {{ typename }}\n {%- endset %}\n\n {{ exceptions.raise_compiler_error(msg) }}\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1661544121.382897}, "macro.dbt.information_schema_name": {"unique_id": "macro.dbt.information_schema_name", "package_name": "dbt", "root_path": "/opt/homebrew/Cellar/dbt-postgres/1.0.4/libexec/lib/python3.9/site-packages/dbt/include/global_project", "path": "macros/adapters/metadata.sql", "original_file_path": "macros/adapters/metadata.sql", "name": "information_schema_name", "macro_sql": "{% macro information_schema_name(database) %}\n {{ return(adapter.dispatch('information_schema_name', 'dbt')(database)) }}\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.dbt_postgres.postgres__information_schema_name"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1661544121.383086}, "macro.dbt.default__information_schema_name": {"unique_id": "macro.dbt.default__information_schema_name", "package_name": "dbt", "root_path": "/opt/homebrew/Cellar/dbt-postgres/1.0.4/libexec/lib/python3.9/site-packages/dbt/include/global_project", "path": "macros/adapters/metadata.sql", "original_file_path": "macros/adapters/metadata.sql", "name": "default__information_schema_name", "macro_sql": "{% macro default__information_schema_name(database) -%}\n {%- if database -%}\n {{ database }}.INFORMATION_SCHEMA\n {%- else -%}\n INFORMATION_SCHEMA\n {%- endif -%}\n{%- endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1661544121.383241}, "macro.dbt.list_schemas": {"unique_id": "macro.dbt.list_schemas", "package_name": "dbt", "root_path": "/opt/homebrew/Cellar/dbt-postgres/1.0.4/libexec/lib/python3.9/site-packages/dbt/include/global_project", "path": "macros/adapters/metadata.sql", "original_file_path": "macros/adapters/metadata.sql", "name": "list_schemas", "macro_sql": "{% macro list_schemas(database) -%}\n {{ return(adapter.dispatch('list_schemas', 'dbt')(database)) }}\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.dbt_postgres.postgres__list_schemas"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1661544121.383421}, "macro.dbt.default__list_schemas": {"unique_id": "macro.dbt.default__list_schemas", "package_name": "dbt", "root_path": "/opt/homebrew/Cellar/dbt-postgres/1.0.4/libexec/lib/python3.9/site-packages/dbt/include/global_project", "path": "macros/adapters/metadata.sql", "original_file_path": "macros/adapters/metadata.sql", "name": "default__list_schemas", "macro_sql": "{% macro default__list_schemas(database) -%}\n {% set sql %}\n select distinct schema_name\n from {{ information_schema_name(database) }}.SCHEMATA\n where catalog_name ilike '{{ database }}'\n {% endset %}\n {{ return(run_query(sql)) }}\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.dbt.information_schema_name", "macro.dbt.run_query"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1661544121.383667}, "macro.dbt.check_schema_exists": {"unique_id": "macro.dbt.check_schema_exists", "package_name": "dbt", "root_path": "/opt/homebrew/Cellar/dbt-postgres/1.0.4/libexec/lib/python3.9/site-packages/dbt/include/global_project", "path": "macros/adapters/metadata.sql", "original_file_path": "macros/adapters/metadata.sql", "name": "check_schema_exists", "macro_sql": "{% macro check_schema_exists(information_schema, schema) -%}\n {{ return(adapter.dispatch('check_schema_exists', 'dbt')(information_schema, schema)) }}\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.dbt_postgres.postgres__check_schema_exists"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1661544121.383886}, "macro.dbt.default__check_schema_exists": {"unique_id": "macro.dbt.default__check_schema_exists", "package_name": "dbt", "root_path": "/opt/homebrew/Cellar/dbt-postgres/1.0.4/libexec/lib/python3.9/site-packages/dbt/include/global_project", "path": "macros/adapters/metadata.sql", "original_file_path": "macros/adapters/metadata.sql", "name": "default__check_schema_exists", "macro_sql": "{% macro default__check_schema_exists(information_schema, schema) -%}\n {% set sql -%}\n select count(*)\n from {{ information_schema.replace(information_schema_view='SCHEMATA') }}\n where catalog_name='{{ information_schema.database }}'\n and schema_name='{{ schema }}'\n {%- endset %}\n {{ return(run_query(sql)) }}\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.dbt_utils.replace", "macro.dbt.run_query"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1661544121.384289}, "macro.dbt.list_relations_without_caching": {"unique_id": "macro.dbt.list_relations_without_caching", "package_name": "dbt", "root_path": "/opt/homebrew/Cellar/dbt-postgres/1.0.4/libexec/lib/python3.9/site-packages/dbt/include/global_project", "path": "macros/adapters/metadata.sql", "original_file_path": "macros/adapters/metadata.sql", "name": "list_relations_without_caching", "macro_sql": "{% macro list_relations_without_caching(schema_relation) %}\n {{ return(adapter.dispatch('list_relations_without_caching', 'dbt')(schema_relation)) }}\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.dbt_postgres.postgres__list_relations_without_caching"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1661544121.3844821}, "macro.dbt.default__list_relations_without_caching": {"unique_id": "macro.dbt.default__list_relations_without_caching", "package_name": "dbt", "root_path": "/opt/homebrew/Cellar/dbt-postgres/1.0.4/libexec/lib/python3.9/site-packages/dbt/include/global_project", "path": "macros/adapters/metadata.sql", "original_file_path": "macros/adapters/metadata.sql", "name": "default__list_relations_without_caching", "macro_sql": "{% macro default__list_relations_without_caching(schema_relation) %}\n {{ exceptions.raise_not_implemented(\n 'list_relations_without_caching macro not implemented for adapter '+adapter.type()) }}\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1661544121.3846421}, "macro.dbt.get_columns_in_relation": {"unique_id": "macro.dbt.get_columns_in_relation", "package_name": "dbt", "root_path": "/opt/homebrew/Cellar/dbt-postgres/1.0.4/libexec/lib/python3.9/site-packages/dbt/include/global_project", "path": "macros/adapters/columns.sql", "original_file_path": "macros/adapters/columns.sql", "name": "get_columns_in_relation", "macro_sql": "{% macro get_columns_in_relation(relation) -%}\n {{ return(adapter.dispatch('get_columns_in_relation', 'dbt')(relation)) }}\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.dbt_postgres.postgres__get_columns_in_relation"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1661544121.386494}, "macro.dbt.default__get_columns_in_relation": {"unique_id": "macro.dbt.default__get_columns_in_relation", "package_name": "dbt", "root_path": "/opt/homebrew/Cellar/dbt-postgres/1.0.4/libexec/lib/python3.9/site-packages/dbt/include/global_project", "path": "macros/adapters/columns.sql", "original_file_path": "macros/adapters/columns.sql", "name": "default__get_columns_in_relation", "macro_sql": "{% macro default__get_columns_in_relation(relation) -%}\n {{ exceptions.raise_not_implemented(\n 'get_columns_in_relation macro not implemented for adapter '+adapter.type()) }}\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1661544121.38666}, "macro.dbt.sql_convert_columns_in_relation": {"unique_id": "macro.dbt.sql_convert_columns_in_relation", "package_name": "dbt", "root_path": "/opt/homebrew/Cellar/dbt-postgres/1.0.4/libexec/lib/python3.9/site-packages/dbt/include/global_project", "path": "macros/adapters/columns.sql", "original_file_path": "macros/adapters/columns.sql", "name": "sql_convert_columns_in_relation", "macro_sql": "{% macro sql_convert_columns_in_relation(table) -%}\n {% set columns = [] %}\n {% for row in table %}\n {% do columns.append(api.Column(*row)) %}\n {% endfor %}\n {{ return(columns) }}\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1661544121.386979}, "macro.dbt.get_columns_in_query": {"unique_id": "macro.dbt.get_columns_in_query", "package_name": "dbt", "root_path": "/opt/homebrew/Cellar/dbt-postgres/1.0.4/libexec/lib/python3.9/site-packages/dbt/include/global_project", "path": "macros/adapters/columns.sql", "original_file_path": "macros/adapters/columns.sql", "name": "get_columns_in_query", "macro_sql": "{% macro get_columns_in_query(select_sql) -%}\n {{ return(adapter.dispatch('get_columns_in_query', 'dbt')(select_sql)) }}\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.dbt.default__get_columns_in_query"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1661544121.3871639}, "macro.dbt.default__get_columns_in_query": {"unique_id": "macro.dbt.default__get_columns_in_query", "package_name": "dbt", "root_path": "/opt/homebrew/Cellar/dbt-postgres/1.0.4/libexec/lib/python3.9/site-packages/dbt/include/global_project", "path": "macros/adapters/columns.sql", "original_file_path": "macros/adapters/columns.sql", "name": "default__get_columns_in_query", "macro_sql": "{% macro default__get_columns_in_query(select_sql) %}\n {% call statement('get_columns_in_query', fetch_result=True, auto_begin=False) -%}\n select * from (\n {{ select_sql }}\n ) as __dbt_sbq\n where false\n limit 0\n {% endcall %}\n\n {{ return(load_result('get_columns_in_query').table.columns | map(attribute='name') | list) }}\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.dbt.statement"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1661544121.38751}, "macro.dbt.alter_column_type": {"unique_id": "macro.dbt.alter_column_type", "package_name": "dbt", "root_path": "/opt/homebrew/Cellar/dbt-postgres/1.0.4/libexec/lib/python3.9/site-packages/dbt/include/global_project", "path": "macros/adapters/columns.sql", "original_file_path": "macros/adapters/columns.sql", "name": "alter_column_type", "macro_sql": "{% macro alter_column_type(relation, column_name, new_column_type) -%}\n {{ return(adapter.dispatch('alter_column_type', 'dbt')(relation, column_name, new_column_type)) }}\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.dbt.default__alter_column_type"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1661544121.387743}, "macro.dbt.default__alter_column_type": {"unique_id": "macro.dbt.default__alter_column_type", "package_name": "dbt", "root_path": "/opt/homebrew/Cellar/dbt-postgres/1.0.4/libexec/lib/python3.9/site-packages/dbt/include/global_project", "path": "macros/adapters/columns.sql", "original_file_path": "macros/adapters/columns.sql", "name": "default__alter_column_type", "macro_sql": "{% macro default__alter_column_type(relation, column_name, new_column_type) -%}\n {#\n 1. Create a new column (w/ temp name and correct type)\n 2. Copy data over to it\n 3. Drop the existing column (cascade!)\n 4. Rename the new column to existing column\n #}\n {%- set tmp_column = column_name + \"__dbt_alter\" -%}\n\n {% call statement('alter_column_type') %}\n alter table {{ relation }} add column {{ adapter.quote(tmp_column) }} {{ new_column_type }};\n update {{ relation }} set {{ adapter.quote(tmp_column) }} = {{ adapter.quote(column_name) }};\n alter table {{ relation }} drop column {{ adapter.quote(column_name) }} cascade;\n alter table {{ relation }} rename column {{ adapter.quote(tmp_column) }} to {{ adapter.quote(column_name) }}\n {% endcall %}\n\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.dbt.statement"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1661544121.38835}, "macro.dbt.alter_relation_add_remove_columns": {"unique_id": "macro.dbt.alter_relation_add_remove_columns", "package_name": "dbt", "root_path": "/opt/homebrew/Cellar/dbt-postgres/1.0.4/libexec/lib/python3.9/site-packages/dbt/include/global_project", "path": "macros/adapters/columns.sql", "original_file_path": "macros/adapters/columns.sql", "name": "alter_relation_add_remove_columns", "macro_sql": "{% macro alter_relation_add_remove_columns(relation, add_columns = none, remove_columns = none) -%}\n {{ return(adapter.dispatch('alter_relation_add_remove_columns', 'dbt')(relation, add_columns, remove_columns)) }}\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.dbt.default__alter_relation_add_remove_columns"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1661544121.388612}, "macro.dbt.default__alter_relation_add_remove_columns": {"unique_id": "macro.dbt.default__alter_relation_add_remove_columns", "package_name": "dbt", "root_path": "/opt/homebrew/Cellar/dbt-postgres/1.0.4/libexec/lib/python3.9/site-packages/dbt/include/global_project", "path": "macros/adapters/columns.sql", "original_file_path": "macros/adapters/columns.sql", "name": "default__alter_relation_add_remove_columns", "macro_sql": "{% macro default__alter_relation_add_remove_columns(relation, add_columns, remove_columns) %}\n \n {% if add_columns is none %}\n {% set add_columns = [] %}\n {% endif %}\n {% if remove_columns is none %}\n {% set remove_columns = [] %}\n {% endif %}\n \n {% set sql -%}\n \n alter {{ relation.type }} {{ relation }}\n \n {% for column in add_columns %}\n add column {{ column.name }} {{ column.data_type }}{{ ',' if not loop.last }}\n {% endfor %}{{ ',' if add_columns and remove_columns }}\n \n {% for column in remove_columns %}\n drop column {{ column.name }}{{ ',' if not loop.last }}\n {% endfor %}\n \n {%- endset -%}\n\n {% do run_query(sql) %}\n\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.dbt.run_query"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1661544121.389418}, "macro.dbt.test_unique": {"unique_id": "macro.dbt.test_unique", "package_name": "dbt", "root_path": "/opt/homebrew/Cellar/dbt-postgres/1.0.4/libexec/lib/python3.9/site-packages/dbt/include/global_project", "path": "tests/generic/builtin.sql", "original_file_path": "tests/generic/builtin.sql", "name": "test_unique", "macro_sql": "{% test unique(model, column_name) %}\n {% set macro = adapter.dispatch('test_unique', 'dbt') %}\n {{ macro(model, column_name) }}\n{% endtest %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.dbt.default__test_unique"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1661544121.390081}, "macro.dbt.test_not_null": {"unique_id": "macro.dbt.test_not_null", "package_name": "dbt", "root_path": "/opt/homebrew/Cellar/dbt-postgres/1.0.4/libexec/lib/python3.9/site-packages/dbt/include/global_project", "path": "tests/generic/builtin.sql", "original_file_path": "tests/generic/builtin.sql", "name": "test_not_null", "macro_sql": "{% test not_null(model, column_name) %}\n {% set macro = adapter.dispatch('test_not_null', 'dbt') %}\n {{ macro(model, column_name) }}\n{% endtest %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.dbt.default__test_not_null"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1661544121.39032}, "macro.dbt.test_accepted_values": {"unique_id": "macro.dbt.test_accepted_values", "package_name": "dbt", "root_path": "/opt/homebrew/Cellar/dbt-postgres/1.0.4/libexec/lib/python3.9/site-packages/dbt/include/global_project", "path": "tests/generic/builtin.sql", "original_file_path": "tests/generic/builtin.sql", "name": "test_accepted_values", "macro_sql": "{% test accepted_values(model, column_name, values, quote=True) %}\n {% set macro = adapter.dispatch('test_accepted_values', 'dbt') %}\n {{ macro(model, column_name, values, quote) }}\n{% endtest %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.dbt.default__test_accepted_values"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1661544121.390611}, "macro.dbt.test_relationships": {"unique_id": "macro.dbt.test_relationships", "package_name": "dbt", "root_path": "/opt/homebrew/Cellar/dbt-postgres/1.0.4/libexec/lib/python3.9/site-packages/dbt/include/global_project", "path": "tests/generic/builtin.sql", "original_file_path": "tests/generic/builtin.sql", "name": "test_relationships", "macro_sql": "{% test relationships(model, column_name, to, field) %}\n {% set macro = adapter.dispatch('test_relationships', 'dbt') %}\n {{ macro(model, column_name, to, field) }}\n{% endtest %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.dbt.default__test_relationships"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1661544121.3908951}, "macro.dbt_utils.except": {"unique_id": "macro.dbt_utils.except", "package_name": "dbt_utils", "root_path": "/Users/joseph.markiewicz/Documents/dbt_packages/ad_reporting/tiktok/dbt_tiktok_ads_source/integration_tests/dbt_packages/dbt_utils", "path": "macros/cross_db_utils/except.sql", "original_file_path": "macros/cross_db_utils/except.sql", "name": "except", "macro_sql": "{% macro except() %}\n {{ return(adapter.dispatch('except', 'dbt_utils')()) }}\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.dbt_utils.default__except"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1661544121.391241}, "macro.dbt_utils.default__except": {"unique_id": "macro.dbt_utils.default__except", "package_name": "dbt_utils", "root_path": "/Users/joseph.markiewicz/Documents/dbt_packages/ad_reporting/tiktok/dbt_tiktok_ads_source/integration_tests/dbt_packages/dbt_utils", "path": "macros/cross_db_utils/except.sql", "original_file_path": "macros/cross_db_utils/except.sql", "name": "default__except", "macro_sql": "{% macro default__except() %}\n\n except\n\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1661544121.391326}, "macro.dbt_utils.bigquery__except": {"unique_id": "macro.dbt_utils.bigquery__except", "package_name": "dbt_utils", "root_path": "/Users/joseph.markiewicz/Documents/dbt_packages/ad_reporting/tiktok/dbt_tiktok_ads_source/integration_tests/dbt_packages/dbt_utils", "path": "macros/cross_db_utils/except.sql", "original_file_path": "macros/cross_db_utils/except.sql", "name": "bigquery__except", "macro_sql": "{% macro bigquery__except() %}\n\n except distinct\n\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1661544121.3913999}, "macro.dbt_utils.replace": {"unique_id": "macro.dbt_utils.replace", "package_name": "dbt_utils", "root_path": "/Users/joseph.markiewicz/Documents/dbt_packages/ad_reporting/tiktok/dbt_tiktok_ads_source/integration_tests/dbt_packages/dbt_utils", "path": "macros/cross_db_utils/replace.sql", "original_file_path": "macros/cross_db_utils/replace.sql", "name": "replace", "macro_sql": "{% macro replace(field, old_chars, new_chars) -%}\n {{ return(adapter.dispatch('replace', 'dbt_utils') (field, old_chars, new_chars)) }}\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.dbt_utils.default__replace"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1661544121.391818}, "macro.dbt_utils.default__replace": {"unique_id": "macro.dbt_utils.default__replace", "package_name": "dbt_utils", "root_path": "/Users/joseph.markiewicz/Documents/dbt_packages/ad_reporting/tiktok/dbt_tiktok_ads_source/integration_tests/dbt_packages/dbt_utils", "path": "macros/cross_db_utils/replace.sql", "original_file_path": "macros/cross_db_utils/replace.sql", "name": "default__replace", "macro_sql": "{% macro default__replace(field, old_chars, new_chars) %}\n\n replace(\n {{ field }},\n {{ old_chars }},\n {{ new_chars }}\n )\n \n\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1661544121.391983}, "macro.dbt_utils.concat": {"unique_id": "macro.dbt_utils.concat", "package_name": "dbt_utils", "root_path": "/Users/joseph.markiewicz/Documents/dbt_packages/ad_reporting/tiktok/dbt_tiktok_ads_source/integration_tests/dbt_packages/dbt_utils", "path": "macros/cross_db_utils/concat.sql", "original_file_path": "macros/cross_db_utils/concat.sql", "name": "concat", "macro_sql": "{% macro concat(fields) -%}\n {{ return(adapter.dispatch('concat', 'dbt_utils')(fields)) }}\n{%- endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.dbt_utils.default__concat"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1661544121.392311}, "macro.dbt_utils.default__concat": {"unique_id": "macro.dbt_utils.default__concat", "package_name": "dbt_utils", "root_path": "/Users/joseph.markiewicz/Documents/dbt_packages/ad_reporting/tiktok/dbt_tiktok_ads_source/integration_tests/dbt_packages/dbt_utils", "path": "macros/cross_db_utils/concat.sql", "original_file_path": "macros/cross_db_utils/concat.sql", "name": "default__concat", "macro_sql": "{% macro default__concat(fields) -%}\n {{ fields|join(' || ') }}\n{%- endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1661544121.392535}, "macro.dbt_utils.type_string": {"unique_id": "macro.dbt_utils.type_string", "package_name": "dbt_utils", "root_path": "/Users/joseph.markiewicz/Documents/dbt_packages/ad_reporting/tiktok/dbt_tiktok_ads_source/integration_tests/dbt_packages/dbt_utils", "path": "macros/cross_db_utils/datatypes.sql", "original_file_path": "macros/cross_db_utils/datatypes.sql", "name": "type_string", "macro_sql": "\n\n{%- macro type_string() -%}\n {{ return(adapter.dispatch('type_string', 'dbt_utils')()) }}\n{%- endmacro -%}\n\n", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.dbt_utils.postgres__type_string"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1661544121.3932748}, "macro.dbt_utils.default__type_string": {"unique_id": "macro.dbt_utils.default__type_string", "package_name": "dbt_utils", "root_path": "/Users/joseph.markiewicz/Documents/dbt_packages/ad_reporting/tiktok/dbt_tiktok_ads_source/integration_tests/dbt_packages/dbt_utils", "path": "macros/cross_db_utils/datatypes.sql", "original_file_path": "macros/cross_db_utils/datatypes.sql", "name": "default__type_string", "macro_sql": "{% macro default__type_string() %}\n string\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1661544121.393348}, "macro.dbt_utils.redshift__type_string": {"unique_id": "macro.dbt_utils.redshift__type_string", "package_name": "dbt_utils", "root_path": "/Users/joseph.markiewicz/Documents/dbt_packages/ad_reporting/tiktok/dbt_tiktok_ads_source/integration_tests/dbt_packages/dbt_utils", "path": "macros/cross_db_utils/datatypes.sql", "original_file_path": "macros/cross_db_utils/datatypes.sql", "name": "redshift__type_string", "macro_sql": "\n\n{%- macro redshift__type_string() -%}\n varchar\n{%- endmacro -%}\n\n", "resource_type": "macro", "tags": [], "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1661544121.393418}, "macro.dbt_utils.postgres__type_string": {"unique_id": "macro.dbt_utils.postgres__type_string", "package_name": "dbt_utils", "root_path": "/Users/joseph.markiewicz/Documents/dbt_packages/ad_reporting/tiktok/dbt_tiktok_ads_source/integration_tests/dbt_packages/dbt_utils", "path": "macros/cross_db_utils/datatypes.sql", "original_file_path": "macros/cross_db_utils/datatypes.sql", "name": "postgres__type_string", "macro_sql": "{% macro postgres__type_string() %}\n varchar\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1661544121.393486}, "macro.dbt_utils.snowflake__type_string": {"unique_id": "macro.dbt_utils.snowflake__type_string", "package_name": "dbt_utils", "root_path": "/Users/joseph.markiewicz/Documents/dbt_packages/ad_reporting/tiktok/dbt_tiktok_ads_source/integration_tests/dbt_packages/dbt_utils", "path": "macros/cross_db_utils/datatypes.sql", "original_file_path": "macros/cross_db_utils/datatypes.sql", "name": "snowflake__type_string", "macro_sql": "{% macro snowflake__type_string() %}\n varchar\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1661544121.3935559}, "macro.dbt_utils.type_timestamp": {"unique_id": "macro.dbt_utils.type_timestamp", "package_name": "dbt_utils", "root_path": "/Users/joseph.markiewicz/Documents/dbt_packages/ad_reporting/tiktok/dbt_tiktok_ads_source/integration_tests/dbt_packages/dbt_utils", "path": "macros/cross_db_utils/datatypes.sql", "original_file_path": "macros/cross_db_utils/datatypes.sql", "name": "type_timestamp", "macro_sql": "\n\n{%- macro type_timestamp() -%}\n {{ return(adapter.dispatch('type_timestamp', 'dbt_utils')()) }}\n{%- endmacro -%}\n\n", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.dbt_utils.postgres__type_timestamp"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1661544121.393714}, "macro.dbt_utils.default__type_timestamp": {"unique_id": "macro.dbt_utils.default__type_timestamp", "package_name": "dbt_utils", "root_path": "/Users/joseph.markiewicz/Documents/dbt_packages/ad_reporting/tiktok/dbt_tiktok_ads_source/integration_tests/dbt_packages/dbt_utils", "path": "macros/cross_db_utils/datatypes.sql", "original_file_path": "macros/cross_db_utils/datatypes.sql", "name": "default__type_timestamp", "macro_sql": "{% macro default__type_timestamp() %}\n timestamp\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1661544121.39379}, "macro.dbt_utils.postgres__type_timestamp": {"unique_id": "macro.dbt_utils.postgres__type_timestamp", "package_name": "dbt_utils", "root_path": "/Users/joseph.markiewicz/Documents/dbt_packages/ad_reporting/tiktok/dbt_tiktok_ads_source/integration_tests/dbt_packages/dbt_utils", "path": "macros/cross_db_utils/datatypes.sql", "original_file_path": "macros/cross_db_utils/datatypes.sql", "name": "postgres__type_timestamp", "macro_sql": "{% macro postgres__type_timestamp() %}\n timestamp without time zone\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1661544121.393861}, "macro.dbt_utils.snowflake__type_timestamp": {"unique_id": "macro.dbt_utils.snowflake__type_timestamp", "package_name": "dbt_utils", "root_path": "/Users/joseph.markiewicz/Documents/dbt_packages/ad_reporting/tiktok/dbt_tiktok_ads_source/integration_tests/dbt_packages/dbt_utils", "path": "macros/cross_db_utils/datatypes.sql", "original_file_path": "macros/cross_db_utils/datatypes.sql", "name": "snowflake__type_timestamp", "macro_sql": "{% macro snowflake__type_timestamp() %}\n timestamp_ntz\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1661544121.3939588}, "macro.dbt_utils.type_float": {"unique_id": "macro.dbt_utils.type_float", "package_name": "dbt_utils", "root_path": "/Users/joseph.markiewicz/Documents/dbt_packages/ad_reporting/tiktok/dbt_tiktok_ads_source/integration_tests/dbt_packages/dbt_utils", "path": "macros/cross_db_utils/datatypes.sql", "original_file_path": "macros/cross_db_utils/datatypes.sql", "name": "type_float", "macro_sql": "\n\n{%- macro type_float() -%}\n {{ return(adapter.dispatch('type_float', 'dbt_utils')()) }}\n{%- endmacro -%}\n\n", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.dbt_utils.default__type_float"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1661544121.39413}, "macro.dbt_utils.default__type_float": {"unique_id": "macro.dbt_utils.default__type_float", "package_name": "dbt_utils", "root_path": "/Users/joseph.markiewicz/Documents/dbt_packages/ad_reporting/tiktok/dbt_tiktok_ads_source/integration_tests/dbt_packages/dbt_utils", "path": "macros/cross_db_utils/datatypes.sql", "original_file_path": "macros/cross_db_utils/datatypes.sql", "name": "default__type_float", "macro_sql": "{% macro default__type_float() %}\n float\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1661544121.394204}, "macro.dbt_utils.bigquery__type_float": {"unique_id": "macro.dbt_utils.bigquery__type_float", "package_name": "dbt_utils", "root_path": "/Users/joseph.markiewicz/Documents/dbt_packages/ad_reporting/tiktok/dbt_tiktok_ads_source/integration_tests/dbt_packages/dbt_utils", "path": "macros/cross_db_utils/datatypes.sql", "original_file_path": "macros/cross_db_utils/datatypes.sql", "name": "bigquery__type_float", "macro_sql": "{% macro bigquery__type_float() %}\n float64\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1661544121.3942778}, "macro.dbt_utils.type_numeric": {"unique_id": "macro.dbt_utils.type_numeric", "package_name": "dbt_utils", "root_path": "/Users/joseph.markiewicz/Documents/dbt_packages/ad_reporting/tiktok/dbt_tiktok_ads_source/integration_tests/dbt_packages/dbt_utils", "path": "macros/cross_db_utils/datatypes.sql", "original_file_path": "macros/cross_db_utils/datatypes.sql", "name": "type_numeric", "macro_sql": "\n\n{%- macro type_numeric() -%}\n {{ return(adapter.dispatch('type_numeric', 'dbt_utils')()) }}\n{%- endmacro -%}\n\n", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.dbt_utils.default__type_numeric"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1661544121.3944378}, "macro.dbt_utils.default__type_numeric": {"unique_id": "macro.dbt_utils.default__type_numeric", "package_name": "dbt_utils", "root_path": "/Users/joseph.markiewicz/Documents/dbt_packages/ad_reporting/tiktok/dbt_tiktok_ads_source/integration_tests/dbt_packages/dbt_utils", "path": "macros/cross_db_utils/datatypes.sql", "original_file_path": "macros/cross_db_utils/datatypes.sql", "name": "default__type_numeric", "macro_sql": "{% macro default__type_numeric() %}\n numeric(28, 6)\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1661544121.39451}, "macro.dbt_utils.bigquery__type_numeric": {"unique_id": "macro.dbt_utils.bigquery__type_numeric", "package_name": "dbt_utils", "root_path": "/Users/joseph.markiewicz/Documents/dbt_packages/ad_reporting/tiktok/dbt_tiktok_ads_source/integration_tests/dbt_packages/dbt_utils", "path": "macros/cross_db_utils/datatypes.sql", "original_file_path": "macros/cross_db_utils/datatypes.sql", "name": "bigquery__type_numeric", "macro_sql": "{% macro bigquery__type_numeric() %}\n numeric\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1661544121.394578}, "macro.dbt_utils.type_bigint": {"unique_id": "macro.dbt_utils.type_bigint", "package_name": "dbt_utils", "root_path": "/Users/joseph.markiewicz/Documents/dbt_packages/ad_reporting/tiktok/dbt_tiktok_ads_source/integration_tests/dbt_packages/dbt_utils", "path": "macros/cross_db_utils/datatypes.sql", "original_file_path": "macros/cross_db_utils/datatypes.sql", "name": "type_bigint", "macro_sql": "\n\n{%- macro type_bigint() -%}\n {{ return(adapter.dispatch('type_bigint', 'dbt_utils')()) }}\n{%- endmacro -%}\n\n", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.dbt_utils.default__type_bigint"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1661544121.394738}, "macro.dbt_utils.default__type_bigint": {"unique_id": "macro.dbt_utils.default__type_bigint", "package_name": "dbt_utils", "root_path": "/Users/joseph.markiewicz/Documents/dbt_packages/ad_reporting/tiktok/dbt_tiktok_ads_source/integration_tests/dbt_packages/dbt_utils", "path": "macros/cross_db_utils/datatypes.sql", "original_file_path": "macros/cross_db_utils/datatypes.sql", "name": "default__type_bigint", "macro_sql": "{% macro default__type_bigint() %}\n bigint\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1661544121.3948119}, "macro.dbt_utils.bigquery__type_bigint": {"unique_id": "macro.dbt_utils.bigquery__type_bigint", "package_name": "dbt_utils", "root_path": "/Users/joseph.markiewicz/Documents/dbt_packages/ad_reporting/tiktok/dbt_tiktok_ads_source/integration_tests/dbt_packages/dbt_utils", "path": "macros/cross_db_utils/datatypes.sql", "original_file_path": "macros/cross_db_utils/datatypes.sql", "name": "bigquery__type_bigint", "macro_sql": "{% macro bigquery__type_bigint() %}\n int64\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1661544121.3948789}, "macro.dbt_utils.type_int": {"unique_id": "macro.dbt_utils.type_int", "package_name": "dbt_utils", "root_path": "/Users/joseph.markiewicz/Documents/dbt_packages/ad_reporting/tiktok/dbt_tiktok_ads_source/integration_tests/dbt_packages/dbt_utils", "path": "macros/cross_db_utils/datatypes.sql", "original_file_path": "macros/cross_db_utils/datatypes.sql", "name": "type_int", "macro_sql": "\n\n{%- macro type_int() -%}\n {{ return(adapter.dispatch('type_int', 'dbt_utils')()) }}\n{%- endmacro -%}\n\n", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.dbt_utils.default__type_int"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1661544121.395285}, "macro.dbt_utils.default__type_int": {"unique_id": "macro.dbt_utils.default__type_int", "package_name": "dbt_utils", "root_path": "/Users/joseph.markiewicz/Documents/dbt_packages/ad_reporting/tiktok/dbt_tiktok_ads_source/integration_tests/dbt_packages/dbt_utils", "path": "macros/cross_db_utils/datatypes.sql", "original_file_path": "macros/cross_db_utils/datatypes.sql", "name": "default__type_int", "macro_sql": "{% macro default__type_int() %}\n int\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1661544121.395359}, "macro.dbt_utils.bigquery__type_int": {"unique_id": "macro.dbt_utils.bigquery__type_int", "package_name": "dbt_utils", "root_path": "/Users/joseph.markiewicz/Documents/dbt_packages/ad_reporting/tiktok/dbt_tiktok_ads_source/integration_tests/dbt_packages/dbt_utils", "path": "macros/cross_db_utils/datatypes.sql", "original_file_path": "macros/cross_db_utils/datatypes.sql", "name": "bigquery__type_int", "macro_sql": "{% macro bigquery__type_int() %}\n int64\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1661544121.395427}, "macro.dbt_utils._is_relation": {"unique_id": "macro.dbt_utils._is_relation", "package_name": "dbt_utils", "root_path": "/Users/joseph.markiewicz/Documents/dbt_packages/ad_reporting/tiktok/dbt_tiktok_ads_source/integration_tests/dbt_packages/dbt_utils", "path": "macros/cross_db_utils/_is_relation.sql", "original_file_path": "macros/cross_db_utils/_is_relation.sql", "name": "_is_relation", "macro_sql": "{% macro _is_relation(obj, macro) %}\n {%- if not (obj is mapping and obj.get('metadata', {}).get('type', '').endswith('Relation')) -%}\n {%- do exceptions.raise_compiler_error(\"Macro \" ~ macro ~ \" expected a Relation but received the value: \" ~ obj) -%}\n {%- endif -%}\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1661544121.396023}, "macro.dbt_utils.cast_array_to_string": {"unique_id": "macro.dbt_utils.cast_array_to_string", "package_name": "dbt_utils", "root_path": "/Users/joseph.markiewicz/Documents/dbt_packages/ad_reporting/tiktok/dbt_tiktok_ads_source/integration_tests/dbt_packages/dbt_utils", "path": "macros/cross_db_utils/cast_array_to_string.sql", "original_file_path": "macros/cross_db_utils/cast_array_to_string.sql", "name": "cast_array_to_string", "macro_sql": "{% macro cast_array_to_string(array) %}\n {{ adapter.dispatch('cast_array_to_string', 'dbt_utils') (array) }}\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.dbt_utils.postgres__cast_array_to_string"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1661544121.3964942}, "macro.dbt_utils.default__cast_array_to_string": {"unique_id": "macro.dbt_utils.default__cast_array_to_string", "package_name": "dbt_utils", "root_path": "/Users/joseph.markiewicz/Documents/dbt_packages/ad_reporting/tiktok/dbt_tiktok_ads_source/integration_tests/dbt_packages/dbt_utils", "path": "macros/cross_db_utils/cast_array_to_string.sql", "original_file_path": "macros/cross_db_utils/cast_array_to_string.sql", "name": "default__cast_array_to_string", "macro_sql": "{% macro default__cast_array_to_string(array) %}\n cast({{ array }} as {{ dbt_utils.type_string() }})\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.dbt_utils.type_string"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1661544121.396634}, "macro.dbt_utils.postgres__cast_array_to_string": {"unique_id": "macro.dbt_utils.postgres__cast_array_to_string", "package_name": "dbt_utils", "root_path": "/Users/joseph.markiewicz/Documents/dbt_packages/ad_reporting/tiktok/dbt_tiktok_ads_source/integration_tests/dbt_packages/dbt_utils", "path": "macros/cross_db_utils/cast_array_to_string.sql", "original_file_path": "macros/cross_db_utils/cast_array_to_string.sql", "name": "postgres__cast_array_to_string", "macro_sql": "{% macro postgres__cast_array_to_string(array) %}\n {%- set array_as_string -%}cast({{ array }} as {{ dbt_utils.type_string() }}){%- endset -%}\n {{ dbt_utils.replace(dbt_utils.replace(array_as_string,\"'}'\",\"']'\"),\"'{'\",\"'['\") }}\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.dbt_utils.type_string", "macro.dbt_utils.replace"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1661544121.396947}, "macro.dbt_utils.redshift__cast_array_to_string": {"unique_id": "macro.dbt_utils.redshift__cast_array_to_string", "package_name": "dbt_utils", "root_path": "/Users/joseph.markiewicz/Documents/dbt_packages/ad_reporting/tiktok/dbt_tiktok_ads_source/integration_tests/dbt_packages/dbt_utils", "path": "macros/cross_db_utils/cast_array_to_string.sql", "original_file_path": "macros/cross_db_utils/cast_array_to_string.sql", "name": "redshift__cast_array_to_string", "macro_sql": "{% macro redshift__cast_array_to_string(array) %}\n cast({{ array }} as {{ dbt_utils.type_string() }})\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.dbt_utils.type_string"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1661544121.397089}, "macro.dbt_utils.bigquery__cast_array_to_string": {"unique_id": "macro.dbt_utils.bigquery__cast_array_to_string", "package_name": "dbt_utils", "root_path": "/Users/joseph.markiewicz/Documents/dbt_packages/ad_reporting/tiktok/dbt_tiktok_ads_source/integration_tests/dbt_packages/dbt_utils", "path": "macros/cross_db_utils/cast_array_to_string.sql", "original_file_path": "macros/cross_db_utils/cast_array_to_string.sql", "name": "bigquery__cast_array_to_string", "macro_sql": "{% macro bigquery__cast_array_to_string(array) %}\n '['||(select string_agg(cast(element as string), ',') from unnest({{ array }}) element)||']'\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1661544121.397195}, "macro.dbt_utils.length": {"unique_id": "macro.dbt_utils.length", "package_name": "dbt_utils", "root_path": "/Users/joseph.markiewicz/Documents/dbt_packages/ad_reporting/tiktok/dbt_tiktok_ads_source/integration_tests/dbt_packages/dbt_utils", "path": "macros/cross_db_utils/length.sql", "original_file_path": "macros/cross_db_utils/length.sql", "name": "length", "macro_sql": "{% macro length(expression) -%}\n {{ return(adapter.dispatch('length', 'dbt_utils') (expression)) }}\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.dbt_utils.default__length"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1661544121.397572}, "macro.dbt_utils.default__length": {"unique_id": "macro.dbt_utils.default__length", "package_name": "dbt_utils", "root_path": "/Users/joseph.markiewicz/Documents/dbt_packages/ad_reporting/tiktok/dbt_tiktok_ads_source/integration_tests/dbt_packages/dbt_utils", "path": "macros/cross_db_utils/length.sql", "original_file_path": "macros/cross_db_utils/length.sql", "name": "default__length", "macro_sql": "{% macro default__length(expression) %}\n \n length(\n {{ expression }}\n )\n \n{%- endmacro -%}\n\n\n", "resource_type": "macro", "tags": [], "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1661544121.397679}, "macro.dbt_utils.redshift__length": {"unique_id": "macro.dbt_utils.redshift__length", "package_name": "dbt_utils", "root_path": "/Users/joseph.markiewicz/Documents/dbt_packages/ad_reporting/tiktok/dbt_tiktok_ads_source/integration_tests/dbt_packages/dbt_utils", "path": "macros/cross_db_utils/length.sql", "original_file_path": "macros/cross_db_utils/length.sql", "name": "redshift__length", "macro_sql": "{% macro redshift__length(expression) %}\n\n len(\n {{ expression }}\n )\n \n{%- endmacro -%}", "resource_type": "macro", "tags": [], "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1661544121.3977861}, "macro.dbt_utils.dateadd": {"unique_id": "macro.dbt_utils.dateadd", "package_name": "dbt_utils", "root_path": "/Users/joseph.markiewicz/Documents/dbt_packages/ad_reporting/tiktok/dbt_tiktok_ads_source/integration_tests/dbt_packages/dbt_utils", "path": "macros/cross_db_utils/dateadd.sql", "original_file_path": "macros/cross_db_utils/dateadd.sql", "name": "dateadd", "macro_sql": "{% macro dateadd(datepart, interval, from_date_or_timestamp) %}\n {{ return(adapter.dispatch('dateadd', 'dbt_utils')(datepart, interval, from_date_or_timestamp)) }}\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.dbt_utils.postgres__dateadd"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1661544121.3984}, "macro.dbt_utils.default__dateadd": {"unique_id": "macro.dbt_utils.default__dateadd", "package_name": "dbt_utils", "root_path": "/Users/joseph.markiewicz/Documents/dbt_packages/ad_reporting/tiktok/dbt_tiktok_ads_source/integration_tests/dbt_packages/dbt_utils", "path": "macros/cross_db_utils/dateadd.sql", "original_file_path": "macros/cross_db_utils/dateadd.sql", "name": "default__dateadd", "macro_sql": "{% macro default__dateadd(datepart, interval, from_date_or_timestamp) %}\n\n dateadd(\n {{ datepart }},\n {{ interval }},\n {{ from_date_or_timestamp }}\n )\n\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1661544121.3985658}, "macro.dbt_utils.bigquery__dateadd": {"unique_id": "macro.dbt_utils.bigquery__dateadd", "package_name": "dbt_utils", "root_path": "/Users/joseph.markiewicz/Documents/dbt_packages/ad_reporting/tiktok/dbt_tiktok_ads_source/integration_tests/dbt_packages/dbt_utils", "path": "macros/cross_db_utils/dateadd.sql", "original_file_path": "macros/cross_db_utils/dateadd.sql", "name": "bigquery__dateadd", "macro_sql": "{% macro bigquery__dateadd(datepart, interval, from_date_or_timestamp) %}\n\n datetime_add(\n cast( {{ from_date_or_timestamp }} as datetime),\n interval {{ interval }} {{ datepart }}\n )\n\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1661544121.398725}, "macro.dbt_utils.postgres__dateadd": {"unique_id": "macro.dbt_utils.postgres__dateadd", "package_name": "dbt_utils", "root_path": "/Users/joseph.markiewicz/Documents/dbt_packages/ad_reporting/tiktok/dbt_tiktok_ads_source/integration_tests/dbt_packages/dbt_utils", "path": "macros/cross_db_utils/dateadd.sql", "original_file_path": "macros/cross_db_utils/dateadd.sql", "name": "postgres__dateadd", "macro_sql": "{% macro postgres__dateadd(datepart, interval, from_date_or_timestamp) %}\n\n {{ from_date_or_timestamp }} + ((interval '1 {{ datepart }}') * ({{ interval }}))\n\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1661544121.398885}, "macro.dbt_utils.redshift__dateadd": {"unique_id": "macro.dbt_utils.redshift__dateadd", "package_name": "dbt_utils", "root_path": "/Users/joseph.markiewicz/Documents/dbt_packages/ad_reporting/tiktok/dbt_tiktok_ads_source/integration_tests/dbt_packages/dbt_utils", "path": "macros/cross_db_utils/dateadd.sql", "original_file_path": "macros/cross_db_utils/dateadd.sql", "name": "redshift__dateadd", "macro_sql": "{% macro redshift__dateadd(datepart, interval, from_date_or_timestamp) %}\n\n {{ return(dbt_utils.default__dateadd(datepart, interval, from_date_or_timestamp)) }}\n\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.dbt_utils.default__dateadd"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1661544121.3990788}, "macro.dbt_utils.intersect": {"unique_id": "macro.dbt_utils.intersect", "package_name": "dbt_utils", "root_path": "/Users/joseph.markiewicz/Documents/dbt_packages/ad_reporting/tiktok/dbt_tiktok_ads_source/integration_tests/dbt_packages/dbt_utils", "path": "macros/cross_db_utils/intersect.sql", "original_file_path": "macros/cross_db_utils/intersect.sql", "name": "intersect", "macro_sql": "{% macro intersect() %}\n {{ return(adapter.dispatch('intersect', 'dbt_utils')()) }}\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.dbt_utils.default__intersect"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1661544121.399421}, "macro.dbt_utils.default__intersect": {"unique_id": "macro.dbt_utils.default__intersect", "package_name": "dbt_utils", "root_path": "/Users/joseph.markiewicz/Documents/dbt_packages/ad_reporting/tiktok/dbt_tiktok_ads_source/integration_tests/dbt_packages/dbt_utils", "path": "macros/cross_db_utils/intersect.sql", "original_file_path": "macros/cross_db_utils/intersect.sql", "name": "default__intersect", "macro_sql": "{% macro default__intersect() %}\n\n intersect\n\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1661544121.3994958}, "macro.dbt_utils.bigquery__intersect": {"unique_id": "macro.dbt_utils.bigquery__intersect", "package_name": "dbt_utils", "root_path": "/Users/joseph.markiewicz/Documents/dbt_packages/ad_reporting/tiktok/dbt_tiktok_ads_source/integration_tests/dbt_packages/dbt_utils", "path": "macros/cross_db_utils/intersect.sql", "original_file_path": "macros/cross_db_utils/intersect.sql", "name": "bigquery__intersect", "macro_sql": "{% macro bigquery__intersect() %}\n\n intersect distinct\n\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1661544121.3995671}, "macro.dbt_utils.escape_single_quotes": {"unique_id": "macro.dbt_utils.escape_single_quotes", "package_name": "dbt_utils", "root_path": "/Users/joseph.markiewicz/Documents/dbt_packages/ad_reporting/tiktok/dbt_tiktok_ads_source/integration_tests/dbt_packages/dbt_utils", "path": "macros/cross_db_utils/escape_single_quotes.sql", "original_file_path": "macros/cross_db_utils/escape_single_quotes.sql", "name": "escape_single_quotes", "macro_sql": "{% macro escape_single_quotes(expression) %}\n {{ return(adapter.dispatch('escape_single_quotes', 'dbt_utils') (expression)) }}\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.dbt_utils.default__escape_single_quotes"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1661544121.3999748}, "macro.dbt_utils.default__escape_single_quotes": {"unique_id": "macro.dbt_utils.default__escape_single_quotes", "package_name": "dbt_utils", "root_path": "/Users/joseph.markiewicz/Documents/dbt_packages/ad_reporting/tiktok/dbt_tiktok_ads_source/integration_tests/dbt_packages/dbt_utils", "path": "macros/cross_db_utils/escape_single_quotes.sql", "original_file_path": "macros/cross_db_utils/escape_single_quotes.sql", "name": "default__escape_single_quotes", "macro_sql": "{% macro default__escape_single_quotes(expression) -%}\n{{ expression | replace(\"'\",\"''\") }}\n{%- endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1661544121.400126}, "macro.dbt_utils.snowflake__escape_single_quotes": {"unique_id": "macro.dbt_utils.snowflake__escape_single_quotes", "package_name": "dbt_utils", "root_path": "/Users/joseph.markiewicz/Documents/dbt_packages/ad_reporting/tiktok/dbt_tiktok_ads_source/integration_tests/dbt_packages/dbt_utils", "path": "macros/cross_db_utils/escape_single_quotes.sql", "original_file_path": "macros/cross_db_utils/escape_single_quotes.sql", "name": "snowflake__escape_single_quotes", "macro_sql": "{% macro snowflake__escape_single_quotes(expression) -%}\n{{ expression | replace(\"'\", \"\\\\'\") }}\n{%- endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1661544121.42397}, "macro.dbt_utils.bigquery__escape_single_quotes": {"unique_id": "macro.dbt_utils.bigquery__escape_single_quotes", "package_name": "dbt_utils", "root_path": "/Users/joseph.markiewicz/Documents/dbt_packages/ad_reporting/tiktok/dbt_tiktok_ads_source/integration_tests/dbt_packages/dbt_utils", "path": "macros/cross_db_utils/escape_single_quotes.sql", "original_file_path": "macros/cross_db_utils/escape_single_quotes.sql", "name": "bigquery__escape_single_quotes", "macro_sql": "{% macro bigquery__escape_single_quotes(expression) -%}\n{{ expression | replace(\"'\", \"\\\\'\") }}\n{%- endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1661544121.424166}, "macro.dbt_utils.right": {"unique_id": "macro.dbt_utils.right", "package_name": "dbt_utils", "root_path": "/Users/joseph.markiewicz/Documents/dbt_packages/ad_reporting/tiktok/dbt_tiktok_ads_source/integration_tests/dbt_packages/dbt_utils", "path": "macros/cross_db_utils/right.sql", "original_file_path": "macros/cross_db_utils/right.sql", "name": "right", "macro_sql": "{% macro right(string_text, length_expression) -%}\n {{ return(adapter.dispatch('right', 'dbt_utils') (string_text, length_expression)) }}\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.dbt_utils.default__right"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1661544121.425112}, "macro.dbt_utils.default__right": {"unique_id": "macro.dbt_utils.default__right", "package_name": "dbt_utils", "root_path": "/Users/joseph.markiewicz/Documents/dbt_packages/ad_reporting/tiktok/dbt_tiktok_ads_source/integration_tests/dbt_packages/dbt_utils", "path": "macros/cross_db_utils/right.sql", "original_file_path": "macros/cross_db_utils/right.sql", "name": "default__right", "macro_sql": "{% macro default__right(string_text, length_expression) %}\n\n right(\n {{ string_text }},\n {{ length_expression }}\n )\n \n{%- endmacro -%}\n\n", "resource_type": "macro", "tags": [], "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1661544121.42526}, "macro.dbt_utils.bigquery__right": {"unique_id": "macro.dbt_utils.bigquery__right", "package_name": "dbt_utils", "root_path": "/Users/joseph.markiewicz/Documents/dbt_packages/ad_reporting/tiktok/dbt_tiktok_ads_source/integration_tests/dbt_packages/dbt_utils", "path": "macros/cross_db_utils/right.sql", "original_file_path": "macros/cross_db_utils/right.sql", "name": "bigquery__right", "macro_sql": "{% macro bigquery__right(string_text, length_expression) %}\n\n case when {{ length_expression }} = 0 \n then ''\n else \n substr(\n {{ string_text }},\n -1 * ({{ length_expression }})\n )\n end\n\n{%- endmacro -%}\n\n", "resource_type": "macro", "tags": [], "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1661544121.425419}, "macro.dbt_utils.snowflake__right": {"unique_id": "macro.dbt_utils.snowflake__right", "package_name": "dbt_utils", "root_path": "/Users/joseph.markiewicz/Documents/dbt_packages/ad_reporting/tiktok/dbt_tiktok_ads_source/integration_tests/dbt_packages/dbt_utils", "path": "macros/cross_db_utils/right.sql", "original_file_path": "macros/cross_db_utils/right.sql", "name": "snowflake__right", "macro_sql": "{% macro snowflake__right(string_text, length_expression) %}\n\n case when {{ length_expression }} = 0 \n then ''\n else \n right(\n {{ string_text }},\n {{ length_expression }}\n )\n end\n\n{%- endmacro -%}", "resource_type": "macro", "tags": [], "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1661544121.425575}, "macro.dbt_utils.listagg": {"unique_id": "macro.dbt_utils.listagg", "package_name": "dbt_utils", "root_path": "/Users/joseph.markiewicz/Documents/dbt_packages/ad_reporting/tiktok/dbt_tiktok_ads_source/integration_tests/dbt_packages/dbt_utils", "path": "macros/cross_db_utils/listagg.sql", "original_file_path": "macros/cross_db_utils/listagg.sql", "name": "listagg", "macro_sql": "{% macro listagg(measure, delimiter_text=\"','\", order_by_clause=none, limit_num=none) -%}\n {{ return(adapter.dispatch('listagg', 'dbt_utils') (measure, delimiter_text, order_by_clause, limit_num)) }}\n{%- endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.dbt_utils.postgres__listagg"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1661544121.427934}, "macro.dbt_utils.default__listagg": {"unique_id": "macro.dbt_utils.default__listagg", "package_name": "dbt_utils", "root_path": "/Users/joseph.markiewicz/Documents/dbt_packages/ad_reporting/tiktok/dbt_tiktok_ads_source/integration_tests/dbt_packages/dbt_utils", "path": "macros/cross_db_utils/listagg.sql", "original_file_path": "macros/cross_db_utils/listagg.sql", "name": "default__listagg", "macro_sql": "{% macro default__listagg(measure, delimiter_text, order_by_clause, limit_num) -%}\n\n {% if limit_num -%}\n array_to_string(\n array_slice(\n array_agg(\n {{ measure }}\n ){% if order_by_clause -%}\n within group ({{ order_by_clause }})\n {%- endif %}\n ,0\n ,{{ limit_num }}\n ),\n {{ delimiter_text }}\n )\n {%- else %}\n listagg(\n {{ measure }},\n {{ delimiter_text }}\n )\n {% if order_by_clause -%}\n within group ({{ order_by_clause }})\n {%- endif %}\n {%- endif %}\n\n{%- endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1661544121.428349}, "macro.dbt_utils.bigquery__listagg": {"unique_id": "macro.dbt_utils.bigquery__listagg", "package_name": "dbt_utils", "root_path": "/Users/joseph.markiewicz/Documents/dbt_packages/ad_reporting/tiktok/dbt_tiktok_ads_source/integration_tests/dbt_packages/dbt_utils", "path": "macros/cross_db_utils/listagg.sql", "original_file_path": "macros/cross_db_utils/listagg.sql", "name": "bigquery__listagg", "macro_sql": "{% macro bigquery__listagg(measure, delimiter_text, order_by_clause, limit_num) -%}\n\n string_agg(\n {{ measure }},\n {{ delimiter_text }}\n {% if order_by_clause -%}\n {{ order_by_clause }}\n {%- endif %}\n {% if limit_num -%}\n limit {{ limit_num }}\n {%- endif %}\n )\n\n{%- endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1661544121.428627}, "macro.dbt_utils.postgres__listagg": {"unique_id": "macro.dbt_utils.postgres__listagg", "package_name": "dbt_utils", "root_path": "/Users/joseph.markiewicz/Documents/dbt_packages/ad_reporting/tiktok/dbt_tiktok_ads_source/integration_tests/dbt_packages/dbt_utils", "path": "macros/cross_db_utils/listagg.sql", "original_file_path": "macros/cross_db_utils/listagg.sql", "name": "postgres__listagg", "macro_sql": "{% macro postgres__listagg(measure, delimiter_text, order_by_clause, limit_num) -%}\n \n {% if limit_num -%}\n array_to_string(\n (array_agg(\n {{ measure }}\n {% if order_by_clause -%}\n {{ order_by_clause }}\n {%- endif %}\n ))[1:{{ limit_num }}],\n {{ delimiter_text }}\n )\n {%- else %}\n string_agg(\n {{ measure }},\n {{ delimiter_text }}\n {% if order_by_clause -%}\n {{ order_by_clause }}\n {%- endif %}\n )\n {%- endif %}\n\n{%- endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1661544121.429027}, "macro.dbt_utils.redshift__listagg": {"unique_id": "macro.dbt_utils.redshift__listagg", "package_name": "dbt_utils", "root_path": "/Users/joseph.markiewicz/Documents/dbt_packages/ad_reporting/tiktok/dbt_tiktok_ads_source/integration_tests/dbt_packages/dbt_utils", "path": "macros/cross_db_utils/listagg.sql", "original_file_path": "macros/cross_db_utils/listagg.sql", "name": "redshift__listagg", "macro_sql": "{% macro redshift__listagg(measure, delimiter_text, order_by_clause, limit_num) -%}\n\n {% if limit_num -%}\n {% set ns = namespace() %}\n {% set ns.delimiter_text_regex = delimiter_text|trim(\"'\") %}\n {% set special_chars %}\\,^,$,.,|,?,*,+,(,),[,],{,}{% endset %} \n {%- for char in special_chars.split(',') -%}\n {% set escape_char %}\\\\{{ char }}{% endset %}\n {% set ns.delimiter_text_regex = ns.delimiter_text_regex|replace(char,escape_char) %}\n {%- endfor -%}\n\n {% set regex %}'([^{{ ns.delimiter_text_regex }}]+{{ ns.delimiter_text_regex }}){1,{{ limit_num - 1}}}[^{{ ns.delimiter_text_regex }}]+'{% endset %}\n regexp_substr(\n listagg(\n {{ measure }},\n {{ delimiter_text }}\n )\n {% if order_by_clause -%}\n within group ({{ order_by_clause }})\n {%- endif %}\n ,{{ regex }}\n )\n {%- else %}\n listagg(\n {{ measure }},\n {{ delimiter_text }}\n )\n {% if order_by_clause -%}\n within group ({{ order_by_clause }})\n {%- endif %}\n {%- endif %}\n\n{%- endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1661544121.43}, "macro.dbt_utils.datediff": {"unique_id": "macro.dbt_utils.datediff", "package_name": "dbt_utils", "root_path": "/Users/joseph.markiewicz/Documents/dbt_packages/ad_reporting/tiktok/dbt_tiktok_ads_source/integration_tests/dbt_packages/dbt_utils", "path": "macros/cross_db_utils/datediff.sql", "original_file_path": "macros/cross_db_utils/datediff.sql", "name": "datediff", "macro_sql": "{% macro datediff(first_date, second_date, datepart) %}\n {{ return(adapter.dispatch('datediff', 'dbt_utils')(first_date, second_date, datepart)) }}\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.dbt_utils.postgres__datediff"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1661544121.432645}, "macro.dbt_utils.default__datediff": {"unique_id": "macro.dbt_utils.default__datediff", "package_name": "dbt_utils", "root_path": "/Users/joseph.markiewicz/Documents/dbt_packages/ad_reporting/tiktok/dbt_tiktok_ads_source/integration_tests/dbt_packages/dbt_utils", "path": "macros/cross_db_utils/datediff.sql", "original_file_path": "macros/cross_db_utils/datediff.sql", "name": "default__datediff", "macro_sql": "{% macro default__datediff(first_date, second_date, datepart) -%}\n\n datediff(\n {{ datepart }},\n {{ first_date }},\n {{ second_date }}\n )\n\n{%- endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1661544121.432811}, "macro.dbt_utils.bigquery__datediff": {"unique_id": "macro.dbt_utils.bigquery__datediff", "package_name": "dbt_utils", "root_path": "/Users/joseph.markiewicz/Documents/dbt_packages/ad_reporting/tiktok/dbt_tiktok_ads_source/integration_tests/dbt_packages/dbt_utils", "path": "macros/cross_db_utils/datediff.sql", "original_file_path": "macros/cross_db_utils/datediff.sql", "name": "bigquery__datediff", "macro_sql": "{% macro bigquery__datediff(first_date, second_date, datepart) -%}\n\n datetime_diff(\n cast({{second_date}} as datetime),\n cast({{first_date}} as datetime),\n {{datepart}}\n )\n\n{%- endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1661544121.4329689}, "macro.dbt_utils.postgres__datediff": {"unique_id": "macro.dbt_utils.postgres__datediff", "package_name": "dbt_utils", "root_path": "/Users/joseph.markiewicz/Documents/dbt_packages/ad_reporting/tiktok/dbt_tiktok_ads_source/integration_tests/dbt_packages/dbt_utils", "path": "macros/cross_db_utils/datediff.sql", "original_file_path": "macros/cross_db_utils/datediff.sql", "name": "postgres__datediff", "macro_sql": "{% macro postgres__datediff(first_date, second_date, datepart) -%}\n\n {% if datepart == 'year' %}\n (date_part('year', ({{second_date}})::date) - date_part('year', ({{first_date}})::date))\n {% elif datepart == 'quarter' %}\n ({{ dbt_utils.datediff(first_date, second_date, 'year') }} * 4 + date_part('quarter', ({{second_date}})::date) - date_part('quarter', ({{first_date}})::date))\n {% elif datepart == 'month' %}\n ({{ dbt_utils.datediff(first_date, second_date, 'year') }} * 12 + date_part('month', ({{second_date}})::date) - date_part('month', ({{first_date}})::date))\n {% elif datepart == 'day' %}\n (({{second_date}})::date - ({{first_date}})::date)\n {% elif datepart == 'week' %}\n ({{ dbt_utils.datediff(first_date, second_date, 'day') }} / 7 + case\n when date_part('dow', ({{first_date}})::timestamp) <= date_part('dow', ({{second_date}})::timestamp) then\n case when {{first_date}} <= {{second_date}} then 0 else -1 end\n else\n case when {{first_date}} <= {{second_date}} then 1 else 0 end\n end)\n {% elif datepart == 'hour' %}\n ({{ dbt_utils.datediff(first_date, second_date, 'day') }} * 24 + date_part('hour', ({{second_date}})::timestamp) - date_part('hour', ({{first_date}})::timestamp))\n {% elif datepart == 'minute' %}\n ({{ dbt_utils.datediff(first_date, second_date, 'hour') }} * 60 + date_part('minute', ({{second_date}})::timestamp) - date_part('minute', ({{first_date}})::timestamp))\n {% elif datepart == 'second' %}\n ({{ dbt_utils.datediff(first_date, second_date, 'minute') }} * 60 + floor(date_part('second', ({{second_date}})::timestamp)) - floor(date_part('second', ({{first_date}})::timestamp)))\n {% elif datepart == 'millisecond' %}\n ({{ dbt_utils.datediff(first_date, second_date, 'minute') }} * 60000 + floor(date_part('millisecond', ({{second_date}})::timestamp)) - floor(date_part('millisecond', ({{first_date}})::timestamp)))\n {% elif datepart == 'microsecond' %}\n ({{ dbt_utils.datediff(first_date, second_date, 'minute') }} * 60000000 + floor(date_part('microsecond', ({{second_date}})::timestamp)) - floor(date_part('microsecond', ({{first_date}})::timestamp)))\n {% else %}\n {{ exceptions.raise_compiler_error(\"Unsupported datepart for macro datediff in postgres: {!r}\".format(datepart)) }}\n {% endif %}\n\n{%- endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.dbt_utils.datediff"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1661544121.434794}, "macro.dbt_utils.redshift__datediff": {"unique_id": "macro.dbt_utils.redshift__datediff", "package_name": "dbt_utils", "root_path": "/Users/joseph.markiewicz/Documents/dbt_packages/ad_reporting/tiktok/dbt_tiktok_ads_source/integration_tests/dbt_packages/dbt_utils", "path": "macros/cross_db_utils/datediff.sql", "original_file_path": "macros/cross_db_utils/datediff.sql", "name": "redshift__datediff", "macro_sql": "{% macro redshift__datediff(first_date, second_date, datepart) -%}\n\n {{ return(dbt_utils.default__datediff(first_date, second_date, datepart)) }}\n\n{%- endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.dbt_utils.default__datediff"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1661544121.435019}, "macro.dbt_utils.safe_cast": {"unique_id": "macro.dbt_utils.safe_cast", "package_name": "dbt_utils", "root_path": "/Users/joseph.markiewicz/Documents/dbt_packages/ad_reporting/tiktok/dbt_tiktok_ads_source/integration_tests/dbt_packages/dbt_utils", "path": "macros/cross_db_utils/safe_cast.sql", "original_file_path": "macros/cross_db_utils/safe_cast.sql", "name": "safe_cast", "macro_sql": "{% macro safe_cast(field, type) %}\n {{ return(adapter.dispatch('safe_cast', 'dbt_utils') (field, type)) }}\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.dbt_utils.default__safe_cast"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1661544121.4355469}, "macro.dbt_utils.default__safe_cast": {"unique_id": "macro.dbt_utils.default__safe_cast", "package_name": "dbt_utils", "root_path": "/Users/joseph.markiewicz/Documents/dbt_packages/ad_reporting/tiktok/dbt_tiktok_ads_source/integration_tests/dbt_packages/dbt_utils", "path": "macros/cross_db_utils/safe_cast.sql", "original_file_path": "macros/cross_db_utils/safe_cast.sql", "name": "default__safe_cast", "macro_sql": "{% macro default__safe_cast(field, type) %}\n {# most databases don't support this function yet\n so we just need to use cast #}\n cast({{field}} as {{type}})\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1661544121.43569}, "macro.dbt_utils.snowflake__safe_cast": {"unique_id": "macro.dbt_utils.snowflake__safe_cast", "package_name": "dbt_utils", "root_path": "/Users/joseph.markiewicz/Documents/dbt_packages/ad_reporting/tiktok/dbt_tiktok_ads_source/integration_tests/dbt_packages/dbt_utils", "path": "macros/cross_db_utils/safe_cast.sql", "original_file_path": "macros/cross_db_utils/safe_cast.sql", "name": "snowflake__safe_cast", "macro_sql": "{% macro snowflake__safe_cast(field, type) %}\n try_cast({{field}} as {{type}})\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1661544121.435816}, "macro.dbt_utils.bigquery__safe_cast": {"unique_id": "macro.dbt_utils.bigquery__safe_cast", "package_name": "dbt_utils", "root_path": "/Users/joseph.markiewicz/Documents/dbt_packages/ad_reporting/tiktok/dbt_tiktok_ads_source/integration_tests/dbt_packages/dbt_utils", "path": "macros/cross_db_utils/safe_cast.sql", "original_file_path": "macros/cross_db_utils/safe_cast.sql", "name": "bigquery__safe_cast", "macro_sql": "{% macro bigquery__safe_cast(field, type) %}\n safe_cast({{field}} as {{type}})\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1661544121.4359412}, "macro.dbt_utils.hash": {"unique_id": "macro.dbt_utils.hash", "package_name": "dbt_utils", "root_path": "/Users/joseph.markiewicz/Documents/dbt_packages/ad_reporting/tiktok/dbt_tiktok_ads_source/integration_tests/dbt_packages/dbt_utils", "path": "macros/cross_db_utils/hash.sql", "original_file_path": "macros/cross_db_utils/hash.sql", "name": "hash", "macro_sql": "{% macro hash(field) -%}\n {{ return(adapter.dispatch('hash', 'dbt_utils') (field)) }}\n{%- endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.dbt_utils.default__hash"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1661544121.436306}, "macro.dbt_utils.default__hash": {"unique_id": "macro.dbt_utils.default__hash", "package_name": "dbt_utils", "root_path": "/Users/joseph.markiewicz/Documents/dbt_packages/ad_reporting/tiktok/dbt_tiktok_ads_source/integration_tests/dbt_packages/dbt_utils", "path": "macros/cross_db_utils/hash.sql", "original_file_path": "macros/cross_db_utils/hash.sql", "name": "default__hash", "macro_sql": "{% macro default__hash(field) -%}\n md5(cast({{field}} as {{dbt_utils.type_string()}}))\n{%- endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.dbt_utils.type_string"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1661544121.436447}, "macro.dbt_utils.bigquery__hash": {"unique_id": "macro.dbt_utils.bigquery__hash", "package_name": "dbt_utils", "root_path": "/Users/joseph.markiewicz/Documents/dbt_packages/ad_reporting/tiktok/dbt_tiktok_ads_source/integration_tests/dbt_packages/dbt_utils", "path": "macros/cross_db_utils/hash.sql", "original_file_path": "macros/cross_db_utils/hash.sql", "name": "bigquery__hash", "macro_sql": "{% macro bigquery__hash(field) -%}\n to_hex({{dbt_utils.default__hash(field)}})\n{%- endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.dbt_utils.default__hash"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1661544121.436576}, "macro.dbt_utils.cast_bool_to_text": {"unique_id": "macro.dbt_utils.cast_bool_to_text", "package_name": "dbt_utils", "root_path": "/Users/joseph.markiewicz/Documents/dbt_packages/ad_reporting/tiktok/dbt_tiktok_ads_source/integration_tests/dbt_packages/dbt_utils", "path": "macros/cross_db_utils/cast_bool_to_text.sql", "original_file_path": "macros/cross_db_utils/cast_bool_to_text.sql", "name": "cast_bool_to_text", "macro_sql": "{% macro cast_bool_to_text(field) %}\n {{ adapter.dispatch('cast_bool_to_text', 'dbt_utils') (field) }}\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.dbt_utils.default__cast_bool_to_text"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1661544121.436951}, "macro.dbt_utils.default__cast_bool_to_text": {"unique_id": "macro.dbt_utils.default__cast_bool_to_text", "package_name": "dbt_utils", "root_path": "/Users/joseph.markiewicz/Documents/dbt_packages/ad_reporting/tiktok/dbt_tiktok_ads_source/integration_tests/dbt_packages/dbt_utils", "path": "macros/cross_db_utils/cast_bool_to_text.sql", "original_file_path": "macros/cross_db_utils/cast_bool_to_text.sql", "name": "default__cast_bool_to_text", "macro_sql": "{% macro default__cast_bool_to_text(field) %}\n cast({{ field }} as {{ dbt_utils.type_string() }})\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.dbt_utils.type_string"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1661544121.437089}, "macro.dbt_utils.redshift__cast_bool_to_text": {"unique_id": "macro.dbt_utils.redshift__cast_bool_to_text", "package_name": "dbt_utils", "root_path": "/Users/joseph.markiewicz/Documents/dbt_packages/ad_reporting/tiktok/dbt_tiktok_ads_source/integration_tests/dbt_packages/dbt_utils", "path": "macros/cross_db_utils/cast_bool_to_text.sql", "original_file_path": "macros/cross_db_utils/cast_bool_to_text.sql", "name": "redshift__cast_bool_to_text", "macro_sql": "{% macro redshift__cast_bool_to_text(field) %}\n case\n when {{ field }} is true then 'true'\n when {{ field }} is false then 'false'\n end::text\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1661544121.437213}, "macro.dbt_utils.identifier": {"unique_id": "macro.dbt_utils.identifier", "package_name": "dbt_utils", "root_path": "/Users/joseph.markiewicz/Documents/dbt_packages/ad_reporting/tiktok/dbt_tiktok_ads_source/integration_tests/dbt_packages/dbt_utils", "path": "macros/cross_db_utils/identifier.sql", "original_file_path": "macros/cross_db_utils/identifier.sql", "name": "identifier", "macro_sql": "{% macro identifier(value) %}\t\n {%- set error_message = '\n Warning: the `identifier` macro is no longer supported and will be deprecated in a future release of dbt-utils. \\\n Use `adapter.quote` instead. The {}.{} model triggered this warning. \\\n '.format(model.package_name, model.name) -%}\n {%- do exceptions.warn(error_message) -%}\n {{ return(adapter.dispatch('identifier', 'dbt_utils') (value)) }}\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.dbt_utils.default__identifier"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1661544121.4377542}, "macro.dbt_utils.default__identifier": {"unique_id": "macro.dbt_utils.default__identifier", "package_name": "dbt_utils", "root_path": "/Users/joseph.markiewicz/Documents/dbt_packages/ad_reporting/tiktok/dbt_tiktok_ads_source/integration_tests/dbt_packages/dbt_utils", "path": "macros/cross_db_utils/identifier.sql", "original_file_path": "macros/cross_db_utils/identifier.sql", "name": "default__identifier", "macro_sql": "{% macro default__identifier(value) -%}\t\n \"{{ value }}\"\t\n{%- endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1661544121.437862}, "macro.dbt_utils.bigquery__identifier": {"unique_id": "macro.dbt_utils.bigquery__identifier", "package_name": "dbt_utils", "root_path": "/Users/joseph.markiewicz/Documents/dbt_packages/ad_reporting/tiktok/dbt_tiktok_ads_source/integration_tests/dbt_packages/dbt_utils", "path": "macros/cross_db_utils/identifier.sql", "original_file_path": "macros/cross_db_utils/identifier.sql", "name": "bigquery__identifier", "macro_sql": "{% macro bigquery__identifier(value) -%}\t\n `{{ value }}`\t\n{%- endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1661544121.4379609}, "macro.dbt_utils.any_value": {"unique_id": "macro.dbt_utils.any_value", "package_name": "dbt_utils", "root_path": "/Users/joseph.markiewicz/Documents/dbt_packages/ad_reporting/tiktok/dbt_tiktok_ads_source/integration_tests/dbt_packages/dbt_utils", "path": "macros/cross_db_utils/any_value.sql", "original_file_path": "macros/cross_db_utils/any_value.sql", "name": "any_value", "macro_sql": "{% macro any_value(expression) -%}\n {{ return(adapter.dispatch('any_value', 'dbt_utils') (expression)) }}\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.dbt_utils.postgres__any_value"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1661544121.438318}, "macro.dbt_utils.default__any_value": {"unique_id": "macro.dbt_utils.default__any_value", "package_name": "dbt_utils", "root_path": "/Users/joseph.markiewicz/Documents/dbt_packages/ad_reporting/tiktok/dbt_tiktok_ads_source/integration_tests/dbt_packages/dbt_utils", "path": "macros/cross_db_utils/any_value.sql", "original_file_path": "macros/cross_db_utils/any_value.sql", "name": "default__any_value", "macro_sql": "{% macro default__any_value(expression) -%}\n \n any_value({{ expression }})\n \n{%- endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1661544121.438425}, "macro.dbt_utils.postgres__any_value": {"unique_id": "macro.dbt_utils.postgres__any_value", "package_name": "dbt_utils", "root_path": "/Users/joseph.markiewicz/Documents/dbt_packages/ad_reporting/tiktok/dbt_tiktok_ads_source/integration_tests/dbt_packages/dbt_utils", "path": "macros/cross_db_utils/any_value.sql", "original_file_path": "macros/cross_db_utils/any_value.sql", "name": "postgres__any_value", "macro_sql": "{% macro postgres__any_value(expression) -%}\n {#- /*Postgres doesn't support any_value, so we're using min() to get the same result*/ -#}\n min({{ expression }})\n \n{%- endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1661544121.4385312}, "macro.dbt_utils.position": {"unique_id": "macro.dbt_utils.position", "package_name": "dbt_utils", "root_path": "/Users/joseph.markiewicz/Documents/dbt_packages/ad_reporting/tiktok/dbt_tiktok_ads_source/integration_tests/dbt_packages/dbt_utils", "path": "macros/cross_db_utils/position.sql", "original_file_path": "macros/cross_db_utils/position.sql", "name": "position", "macro_sql": "{% macro position(substring_text, string_text) -%}\n {{ return(adapter.dispatch('position', 'dbt_utils') (substring_text, string_text)) }}\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.dbt_utils.default__position"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1661544121.43898}, "macro.dbt_utils.default__position": {"unique_id": "macro.dbt_utils.default__position", "package_name": "dbt_utils", "root_path": "/Users/joseph.markiewicz/Documents/dbt_packages/ad_reporting/tiktok/dbt_tiktok_ads_source/integration_tests/dbt_packages/dbt_utils", "path": "macros/cross_db_utils/position.sql", "original_file_path": "macros/cross_db_utils/position.sql", "name": "default__position", "macro_sql": "{% macro default__position(substring_text, string_text) %}\n\n position(\n {{ substring_text }} in {{ string_text }}\n )\n \n{%- endmacro -%}\n\n", "resource_type": "macro", "tags": [], "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1661544121.4391391}, "macro.dbt_utils.bigquery__position": {"unique_id": "macro.dbt_utils.bigquery__position", "package_name": "dbt_utils", "root_path": "/Users/joseph.markiewicz/Documents/dbt_packages/ad_reporting/tiktok/dbt_tiktok_ads_source/integration_tests/dbt_packages/dbt_utils", "path": "macros/cross_db_utils/position.sql", "original_file_path": "macros/cross_db_utils/position.sql", "name": "bigquery__position", "macro_sql": "{% macro bigquery__position(substring_text, string_text) %}\n\n strpos(\n {{ string_text }},\n {{ substring_text }}\n \n )\n \n{%- endmacro -%}", "resource_type": "macro", "tags": [], "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1661544121.439314}, "macro.dbt_utils.string_literal": {"unique_id": "macro.dbt_utils.string_literal", "package_name": "dbt_utils", "root_path": "/Users/joseph.markiewicz/Documents/dbt_packages/ad_reporting/tiktok/dbt_tiktok_ads_source/integration_tests/dbt_packages/dbt_utils", "path": "macros/cross_db_utils/literal.sql", "original_file_path": "macros/cross_db_utils/literal.sql", "name": "string_literal", "macro_sql": "{%- macro string_literal(value) -%}\n {{ return(adapter.dispatch('string_literal', 'dbt_utils') (value)) }}\n{%- endmacro -%}\n\n", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.dbt_utils.default__string_literal"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1661544121.439789}, "macro.dbt_utils.default__string_literal": {"unique_id": "macro.dbt_utils.default__string_literal", "package_name": "dbt_utils", "root_path": "/Users/joseph.markiewicz/Documents/dbt_packages/ad_reporting/tiktok/dbt_tiktok_ads_source/integration_tests/dbt_packages/dbt_utils", "path": "macros/cross_db_utils/literal.sql", "original_file_path": "macros/cross_db_utils/literal.sql", "name": "default__string_literal", "macro_sql": "{% macro default__string_literal(value) -%}\n '{{ value }}'\n{%- endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1661544121.439904}, "macro.dbt_utils.current_timestamp": {"unique_id": "macro.dbt_utils.current_timestamp", "package_name": "dbt_utils", "root_path": "/Users/joseph.markiewicz/Documents/dbt_packages/ad_reporting/tiktok/dbt_tiktok_ads_source/integration_tests/dbt_packages/dbt_utils", "path": "macros/cross_db_utils/current_timestamp.sql", "original_file_path": "macros/cross_db_utils/current_timestamp.sql", "name": "current_timestamp", "macro_sql": "{% macro current_timestamp() -%}\n {{ return(adapter.dispatch('current_timestamp', 'dbt_utils')()) }}\n{%- endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.dbt_utils.default__current_timestamp"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1661544121.440542}, "macro.dbt_utils.default__current_timestamp": {"unique_id": "macro.dbt_utils.default__current_timestamp", "package_name": "dbt_utils", "root_path": "/Users/joseph.markiewicz/Documents/dbt_packages/ad_reporting/tiktok/dbt_tiktok_ads_source/integration_tests/dbt_packages/dbt_utils", "path": "macros/cross_db_utils/current_timestamp.sql", "original_file_path": "macros/cross_db_utils/current_timestamp.sql", "name": "default__current_timestamp", "macro_sql": "{% macro default__current_timestamp() %}\n current_timestamp::{{dbt_utils.type_timestamp()}}\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.dbt_utils.type_timestamp"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1661544121.440659}, "macro.dbt_utils.redshift__current_timestamp": {"unique_id": "macro.dbt_utils.redshift__current_timestamp", "package_name": "dbt_utils", "root_path": "/Users/joseph.markiewicz/Documents/dbt_packages/ad_reporting/tiktok/dbt_tiktok_ads_source/integration_tests/dbt_packages/dbt_utils", "path": "macros/cross_db_utils/current_timestamp.sql", "original_file_path": "macros/cross_db_utils/current_timestamp.sql", "name": "redshift__current_timestamp", "macro_sql": "{% macro redshift__current_timestamp() %}\n getdate()\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1661544121.440734}, "macro.dbt_utils.bigquery__current_timestamp": {"unique_id": "macro.dbt_utils.bigquery__current_timestamp", "package_name": "dbt_utils", "root_path": "/Users/joseph.markiewicz/Documents/dbt_packages/ad_reporting/tiktok/dbt_tiktok_ads_source/integration_tests/dbt_packages/dbt_utils", "path": "macros/cross_db_utils/current_timestamp.sql", "original_file_path": "macros/cross_db_utils/current_timestamp.sql", "name": "bigquery__current_timestamp", "macro_sql": "{% macro bigquery__current_timestamp() %}\n current_timestamp\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1661544121.4408078}, "macro.dbt_utils.current_timestamp_in_utc": {"unique_id": "macro.dbt_utils.current_timestamp_in_utc", "package_name": "dbt_utils", "root_path": "/Users/joseph.markiewicz/Documents/dbt_packages/ad_reporting/tiktok/dbt_tiktok_ads_source/integration_tests/dbt_packages/dbt_utils", "path": "macros/cross_db_utils/current_timestamp.sql", "original_file_path": "macros/cross_db_utils/current_timestamp.sql", "name": "current_timestamp_in_utc", "macro_sql": "{% macro current_timestamp_in_utc() -%}\n {{ return(adapter.dispatch('current_timestamp_in_utc', 'dbt_utils')()) }}\n{%- endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.dbt_utils.postgres__current_timestamp_in_utc"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1661544121.440971}, "macro.dbt_utils.default__current_timestamp_in_utc": {"unique_id": "macro.dbt_utils.default__current_timestamp_in_utc", "package_name": "dbt_utils", "root_path": "/Users/joseph.markiewicz/Documents/dbt_packages/ad_reporting/tiktok/dbt_tiktok_ads_source/integration_tests/dbt_packages/dbt_utils", "path": "macros/cross_db_utils/current_timestamp.sql", "original_file_path": "macros/cross_db_utils/current_timestamp.sql", "name": "default__current_timestamp_in_utc", "macro_sql": "{% macro default__current_timestamp_in_utc() %}\n {{dbt_utils.current_timestamp()}}\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.dbt_utils.current_timestamp"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1661544121.441087}, "macro.dbt_utils.snowflake__current_timestamp_in_utc": {"unique_id": "macro.dbt_utils.snowflake__current_timestamp_in_utc", "package_name": "dbt_utils", "root_path": "/Users/joseph.markiewicz/Documents/dbt_packages/ad_reporting/tiktok/dbt_tiktok_ads_source/integration_tests/dbt_packages/dbt_utils", "path": "macros/cross_db_utils/current_timestamp.sql", "original_file_path": "macros/cross_db_utils/current_timestamp.sql", "name": "snowflake__current_timestamp_in_utc", "macro_sql": "{% macro snowflake__current_timestamp_in_utc() %}\n convert_timezone('UTC', {{dbt_utils.current_timestamp()}})::{{dbt_utils.type_timestamp()}}\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.dbt_utils.current_timestamp", "macro.dbt_utils.type_timestamp"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1661544121.4412339}, "macro.dbt_utils.postgres__current_timestamp_in_utc": {"unique_id": "macro.dbt_utils.postgres__current_timestamp_in_utc", "package_name": "dbt_utils", "root_path": "/Users/joseph.markiewicz/Documents/dbt_packages/ad_reporting/tiktok/dbt_tiktok_ads_source/integration_tests/dbt_packages/dbt_utils", "path": "macros/cross_db_utils/current_timestamp.sql", "original_file_path": "macros/cross_db_utils/current_timestamp.sql", "name": "postgres__current_timestamp_in_utc", "macro_sql": "{% macro postgres__current_timestamp_in_utc() %}\n (current_timestamp at time zone 'utc')::{{dbt_utils.type_timestamp()}}\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.dbt_utils.type_timestamp"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1661544121.441349}, "macro.dbt_utils.redshift__current_timestamp_in_utc": {"unique_id": "macro.dbt_utils.redshift__current_timestamp_in_utc", "package_name": "dbt_utils", "root_path": "/Users/joseph.markiewicz/Documents/dbt_packages/ad_reporting/tiktok/dbt_tiktok_ads_source/integration_tests/dbt_packages/dbt_utils", "path": "macros/cross_db_utils/current_timestamp.sql", "original_file_path": "macros/cross_db_utils/current_timestamp.sql", "name": "redshift__current_timestamp_in_utc", "macro_sql": "{% macro redshift__current_timestamp_in_utc() %}\n {{ return(dbt_utils.default__current_timestamp_in_utc()) }}\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.dbt_utils.default__current_timestamp_in_utc"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1661544121.441483}, "macro.dbt_utils.width_bucket": {"unique_id": "macro.dbt_utils.width_bucket", "package_name": "dbt_utils", "root_path": "/Users/joseph.markiewicz/Documents/dbt_packages/ad_reporting/tiktok/dbt_tiktok_ads_source/integration_tests/dbt_packages/dbt_utils", "path": "macros/cross_db_utils/width_bucket.sql", "original_file_path": "macros/cross_db_utils/width_bucket.sql", "name": "width_bucket", "macro_sql": "{% macro width_bucket(expr, min_value, max_value, num_buckets) %}\n {{ return(adapter.dispatch('width_bucket', 'dbt_utils') (expr, min_value, max_value, num_buckets)) }}\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.dbt_utils.default__width_bucket"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1661544121.442951}, "macro.dbt_utils.default__width_bucket": {"unique_id": "macro.dbt_utils.default__width_bucket", "package_name": "dbt_utils", "root_path": "/Users/joseph.markiewicz/Documents/dbt_packages/ad_reporting/tiktok/dbt_tiktok_ads_source/integration_tests/dbt_packages/dbt_utils", "path": "macros/cross_db_utils/width_bucket.sql", "original_file_path": "macros/cross_db_utils/width_bucket.sql", "name": "default__width_bucket", "macro_sql": "{% macro default__width_bucket(expr, min_value, max_value, num_buckets) -%}\n\n {% set bin_size -%}\n (( {{ max_value }} - {{ min_value }} ) / {{ num_buckets }} )\n {%- endset %}\n (\n -- to break ties when the amount is eaxtly at the bucket egde\n case\n when\n mod(\n {{ dbt_utils.safe_cast(expr, dbt_utils.type_numeric() ) }},\n {{ dbt_utils.safe_cast(bin_size, dbt_utils.type_numeric() ) }}\n ) = 0\n then 1\n else 0\n end\n ) +\n -- Anything over max_value goes the N+1 bucket\n least(\n ceil(\n ({{ expr }} - {{ min_value }})/{{ bin_size }}\n ),\n {{ num_buckets }} + 1\n )\n{%- endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.dbt_utils.safe_cast", "macro.dbt_utils.type_numeric"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1661544121.443428}, "macro.dbt_utils.redshift__width_bucket": {"unique_id": "macro.dbt_utils.redshift__width_bucket", "package_name": "dbt_utils", "root_path": "/Users/joseph.markiewicz/Documents/dbt_packages/ad_reporting/tiktok/dbt_tiktok_ads_source/integration_tests/dbt_packages/dbt_utils", "path": "macros/cross_db_utils/width_bucket.sql", "original_file_path": "macros/cross_db_utils/width_bucket.sql", "name": "redshift__width_bucket", "macro_sql": "{% macro redshift__width_bucket(expr, min_value, max_value, num_buckets) -%}\n\n {% set bin_size -%}\n (( {{ max_value }} - {{ min_value }} ) / {{ num_buckets }} )\n {%- endset %}\n (\n -- to break ties when the amount is exactly at the bucket edge\n case\n when\n {{ dbt_utils.safe_cast(expr, dbt_utils.type_numeric() ) }} %\n {{ dbt_utils.safe_cast(bin_size, dbt_utils.type_numeric() ) }}\n = 0\n then 1\n else 0\n end\n ) +\n -- Anything over max_value goes the N+1 bucket\n least(\n ceil(\n ({{ expr }} - {{ min_value }})/{{ bin_size }}\n ),\n {{ num_buckets }} + 1\n )\n{%- endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.dbt_utils.safe_cast", "macro.dbt_utils.type_numeric"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1661544121.4439082}, "macro.dbt_utils.snowflake__width_bucket": {"unique_id": "macro.dbt_utils.snowflake__width_bucket", "package_name": "dbt_utils", "root_path": "/Users/joseph.markiewicz/Documents/dbt_packages/ad_reporting/tiktok/dbt_tiktok_ads_source/integration_tests/dbt_packages/dbt_utils", "path": "macros/cross_db_utils/width_bucket.sql", "original_file_path": "macros/cross_db_utils/width_bucket.sql", "name": "snowflake__width_bucket", "macro_sql": "{% macro snowflake__width_bucket(expr, min_value, max_value, num_buckets) %}\n width_bucket({{ expr }}, {{ min_value }}, {{ max_value }}, {{ num_buckets }} )\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1661544121.444101}, "macro.dbt_utils.array_concat": {"unique_id": "macro.dbt_utils.array_concat", "package_name": "dbt_utils", "root_path": "/Users/joseph.markiewicz/Documents/dbt_packages/ad_reporting/tiktok/dbt_tiktok_ads_source/integration_tests/dbt_packages/dbt_utils", "path": "macros/cross_db_utils/array_concat.sql", "original_file_path": "macros/cross_db_utils/array_concat.sql", "name": "array_concat", "macro_sql": "{% macro array_concat(array_1, array_2) -%}\n {{ return(adapter.dispatch('array_concat', 'dbt_utils')(array_1, array_2)) }}\n{%- endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.dbt_utils.default__array_concat"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1661544121.444566}, "macro.dbt_utils.default__array_concat": {"unique_id": "macro.dbt_utils.default__array_concat", "package_name": "dbt_utils", "root_path": "/Users/joseph.markiewicz/Documents/dbt_packages/ad_reporting/tiktok/dbt_tiktok_ads_source/integration_tests/dbt_packages/dbt_utils", "path": "macros/cross_db_utils/array_concat.sql", "original_file_path": "macros/cross_db_utils/array_concat.sql", "name": "default__array_concat", "macro_sql": "{% macro default__array_concat(array_1, array_2) -%}\n array_cat({{ array_1 }}, {{ array_2 }})\n{%- endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1661544121.444698}, "macro.dbt_utils.bigquery__array_concat": {"unique_id": "macro.dbt_utils.bigquery__array_concat", "package_name": "dbt_utils", "root_path": "/Users/joseph.markiewicz/Documents/dbt_packages/ad_reporting/tiktok/dbt_tiktok_ads_source/integration_tests/dbt_packages/dbt_utils", "path": "macros/cross_db_utils/array_concat.sql", "original_file_path": "macros/cross_db_utils/array_concat.sql", "name": "bigquery__array_concat", "macro_sql": "{% macro bigquery__array_concat(array_1, array_2) -%}\n array_concat({{ array_1 }}, {{ array_2 }})\n{%- endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1661544121.4448261}, "macro.dbt_utils.redshift__array_concat": {"unique_id": "macro.dbt_utils.redshift__array_concat", "package_name": "dbt_utils", "root_path": "/Users/joseph.markiewicz/Documents/dbt_packages/ad_reporting/tiktok/dbt_tiktok_ads_source/integration_tests/dbt_packages/dbt_utils", "path": "macros/cross_db_utils/array_concat.sql", "original_file_path": "macros/cross_db_utils/array_concat.sql", "name": "redshift__array_concat", "macro_sql": "{% macro redshift__array_concat(array_1, array_2) -%}\n array_concat({{ array_1 }}, {{ array_2 }})\n{%- endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1661544121.444957}, "macro.dbt_utils.bool_or": {"unique_id": "macro.dbt_utils.bool_or", "package_name": "dbt_utils", "root_path": "/Users/joseph.markiewicz/Documents/dbt_packages/ad_reporting/tiktok/dbt_tiktok_ads_source/integration_tests/dbt_packages/dbt_utils", "path": "macros/cross_db_utils/bool_or.sql", "original_file_path": "macros/cross_db_utils/bool_or.sql", "name": "bool_or", "macro_sql": "{% macro bool_or(expression) -%}\n {{ return(adapter.dispatch('bool_or', 'dbt_utils') (expression)) }}\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.dbt_utils.default__bool_or"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1661544121.445359}, "macro.dbt_utils.default__bool_or": {"unique_id": "macro.dbt_utils.default__bool_or", "package_name": "dbt_utils", "root_path": "/Users/joseph.markiewicz/Documents/dbt_packages/ad_reporting/tiktok/dbt_tiktok_ads_source/integration_tests/dbt_packages/dbt_utils", "path": "macros/cross_db_utils/bool_or.sql", "original_file_path": "macros/cross_db_utils/bool_or.sql", "name": "default__bool_or", "macro_sql": "{% macro default__bool_or(expression) -%}\n \n bool_or({{ expression }})\n \n{%- endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1661544121.445465}, "macro.dbt_utils.snowflake__bool_or": {"unique_id": "macro.dbt_utils.snowflake__bool_or", "package_name": "dbt_utils", "root_path": "/Users/joseph.markiewicz/Documents/dbt_packages/ad_reporting/tiktok/dbt_tiktok_ads_source/integration_tests/dbt_packages/dbt_utils", "path": "macros/cross_db_utils/bool_or.sql", "original_file_path": "macros/cross_db_utils/bool_or.sql", "name": "snowflake__bool_or", "macro_sql": "{% macro snowflake__bool_or(expression) -%}\n \n boolor_agg({{ expression }})\n \n{%- endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1661544121.4456499}, "macro.dbt_utils.bigquery__bool_or": {"unique_id": "macro.dbt_utils.bigquery__bool_or", "package_name": "dbt_utils", "root_path": "/Users/joseph.markiewicz/Documents/dbt_packages/ad_reporting/tiktok/dbt_tiktok_ads_source/integration_tests/dbt_packages/dbt_utils", "path": "macros/cross_db_utils/bool_or.sql", "original_file_path": "macros/cross_db_utils/bool_or.sql", "name": "bigquery__bool_or", "macro_sql": "{% macro bigquery__bool_or(expression) -%}\n \n logical_or({{ expression }})\n \n{%- endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1661544121.445751}, "macro.dbt_utils.last_day": {"unique_id": "macro.dbt_utils.last_day", "package_name": "dbt_utils", "root_path": "/Users/joseph.markiewicz/Documents/dbt_packages/ad_reporting/tiktok/dbt_tiktok_ads_source/integration_tests/dbt_packages/dbt_utils", "path": "macros/cross_db_utils/last_day.sql", "original_file_path": "macros/cross_db_utils/last_day.sql", "name": "last_day", "macro_sql": "{% macro last_day(date, datepart) %}\n {{ return(adapter.dispatch('last_day', 'dbt_utils') (date, datepart)) }}\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.dbt_utils.postgres__last_day"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1661544121.446369}, "macro.dbt_utils.default_last_day": {"unique_id": "macro.dbt_utils.default_last_day", "package_name": "dbt_utils", "root_path": "/Users/joseph.markiewicz/Documents/dbt_packages/ad_reporting/tiktok/dbt_tiktok_ads_source/integration_tests/dbt_packages/dbt_utils", "path": "macros/cross_db_utils/last_day.sql", "original_file_path": "macros/cross_db_utils/last_day.sql", "name": "default_last_day", "macro_sql": "\n\n\n{%- macro default_last_day(date, datepart) -%}\n cast(\n {{dbt_utils.dateadd('day', '-1',\n dbt_utils.dateadd(datepart, '1', dbt_utils.date_trunc(datepart, date))\n )}}\n as date)\n{%- endmacro -%}\n\n\n", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.dbt_utils.dateadd", "macro.dbt_utils.date_trunc"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1661544121.446642}, "macro.dbt_utils.default__last_day": {"unique_id": "macro.dbt_utils.default__last_day", "package_name": "dbt_utils", "root_path": "/Users/joseph.markiewicz/Documents/dbt_packages/ad_reporting/tiktok/dbt_tiktok_ads_source/integration_tests/dbt_packages/dbt_utils", "path": "macros/cross_db_utils/last_day.sql", "original_file_path": "macros/cross_db_utils/last_day.sql", "name": "default__last_day", "macro_sql": "{% macro default__last_day(date, datepart) -%}\n {{dbt_utils.default_last_day(date, datepart)}}\n{%- endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.dbt_utils.default_last_day"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1661544121.4467928}, "macro.dbt_utils.postgres__last_day": {"unique_id": "macro.dbt_utils.postgres__last_day", "package_name": "dbt_utils", "root_path": "/Users/joseph.markiewicz/Documents/dbt_packages/ad_reporting/tiktok/dbt_tiktok_ads_source/integration_tests/dbt_packages/dbt_utils", "path": "macros/cross_db_utils/last_day.sql", "original_file_path": "macros/cross_db_utils/last_day.sql", "name": "postgres__last_day", "macro_sql": "{% macro postgres__last_day(date, datepart) -%}\n\n {%- if datepart == 'quarter' -%}\n -- postgres dateadd does not support quarter interval.\n cast(\n {{dbt_utils.dateadd('day', '-1',\n dbt_utils.dateadd('month', '3', dbt_utils.date_trunc(datepart, date))\n )}}\n as date)\n {%- else -%}\n {{dbt_utils.default_last_day(date, datepart)}}\n {%- endif -%}\n\n{%- endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.dbt_utils.dateadd", "macro.dbt_utils.date_trunc", "macro.dbt_utils.default_last_day"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1661544121.4471948}, "macro.dbt_utils.redshift__last_day": {"unique_id": "macro.dbt_utils.redshift__last_day", "package_name": "dbt_utils", "root_path": "/Users/joseph.markiewicz/Documents/dbt_packages/ad_reporting/tiktok/dbt_tiktok_ads_source/integration_tests/dbt_packages/dbt_utils", "path": "macros/cross_db_utils/last_day.sql", "original_file_path": "macros/cross_db_utils/last_day.sql", "name": "redshift__last_day", "macro_sql": "{% macro redshift__last_day(date, datepart) %}\n\n {{ return(dbt_utils.default__last_day(date, datepart)) }}\n\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.dbt_utils.default__last_day"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1661544121.447378}, "macro.dbt_utils.split_part": {"unique_id": "macro.dbt_utils.split_part", "package_name": "dbt_utils", "root_path": "/Users/joseph.markiewicz/Documents/dbt_packages/ad_reporting/tiktok/dbt_tiktok_ads_source/integration_tests/dbt_packages/dbt_utils", "path": "macros/cross_db_utils/split_part.sql", "original_file_path": "macros/cross_db_utils/split_part.sql", "name": "split_part", "macro_sql": "{% macro split_part(string_text, delimiter_text, part_number) %}\n {{ return(adapter.dispatch('split_part', 'dbt_utils') (string_text, delimiter_text, part_number)) }}\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.dbt_utils.postgres__split_part"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1661544121.44886}, "macro.dbt_utils.default__split_part": {"unique_id": "macro.dbt_utils.default__split_part", "package_name": "dbt_utils", "root_path": "/Users/joseph.markiewicz/Documents/dbt_packages/ad_reporting/tiktok/dbt_tiktok_ads_source/integration_tests/dbt_packages/dbt_utils", "path": "macros/cross_db_utils/split_part.sql", "original_file_path": "macros/cross_db_utils/split_part.sql", "name": "default__split_part", "macro_sql": "{% macro default__split_part(string_text, delimiter_text, part_number) %}\n\n split_part(\n {{ string_text }},\n {{ delimiter_text }},\n {{ part_number }}\n )\n\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1661544121.449023}, "macro.dbt_utils._split_part_negative": {"unique_id": "macro.dbt_utils._split_part_negative", "package_name": "dbt_utils", "root_path": "/Users/joseph.markiewicz/Documents/dbt_packages/ad_reporting/tiktok/dbt_tiktok_ads_source/integration_tests/dbt_packages/dbt_utils", "path": "macros/cross_db_utils/split_part.sql", "original_file_path": "macros/cross_db_utils/split_part.sql", "name": "_split_part_negative", "macro_sql": "{% macro _split_part_negative(string_text, delimiter_text, part_number) %}\n\n split_part(\n {{ string_text }},\n {{ delimiter_text }},\n length({{ string_text }}) \n - length(\n replace({{ string_text }}, {{ delimiter_text }}, '')\n ) + 2 {{ part_number }}\n )\n\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1661544121.4492538}, "macro.dbt_utils.postgres__split_part": {"unique_id": "macro.dbt_utils.postgres__split_part", "package_name": "dbt_utils", "root_path": "/Users/joseph.markiewicz/Documents/dbt_packages/ad_reporting/tiktok/dbt_tiktok_ads_source/integration_tests/dbt_packages/dbt_utils", "path": "macros/cross_db_utils/split_part.sql", "original_file_path": "macros/cross_db_utils/split_part.sql", "name": "postgres__split_part", "macro_sql": "{% macro postgres__split_part(string_text, delimiter_text, part_number) %}\n\n {% if part_number >= 0 %}\n {{ dbt_utils.default__split_part(string_text, delimiter_text, part_number) }}\n {% else %}\n {{ dbt_utils._split_part_negative(string_text, delimiter_text, part_number) }}\n {% endif %}\n\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.dbt_utils.default__split_part", "macro.dbt_utils._split_part_negative"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1661544121.449593}, "macro.dbt_utils.redshift__split_part": {"unique_id": "macro.dbt_utils.redshift__split_part", "package_name": "dbt_utils", "root_path": "/Users/joseph.markiewicz/Documents/dbt_packages/ad_reporting/tiktok/dbt_tiktok_ads_source/integration_tests/dbt_packages/dbt_utils", "path": "macros/cross_db_utils/split_part.sql", "original_file_path": "macros/cross_db_utils/split_part.sql", "name": "redshift__split_part", "macro_sql": "{% macro redshift__split_part(string_text, delimiter_text, part_number) %}\n\n {% if part_number >= 0 %}\n {{ dbt_utils.default__split_part(string_text, delimiter_text, part_number) }}\n {% else %}\n {{ dbt_utils._split_part_negative(string_text, delimiter_text, part_number) }}\n {% endif %}\n\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.dbt_utils.default__split_part", "macro.dbt_utils._split_part_negative"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1661544121.4499252}, "macro.dbt_utils.bigquery__split_part": {"unique_id": "macro.dbt_utils.bigquery__split_part", "package_name": "dbt_utils", "root_path": "/Users/joseph.markiewicz/Documents/dbt_packages/ad_reporting/tiktok/dbt_tiktok_ads_source/integration_tests/dbt_packages/dbt_utils", "path": "macros/cross_db_utils/split_part.sql", "original_file_path": "macros/cross_db_utils/split_part.sql", "name": "bigquery__split_part", "macro_sql": "{% macro bigquery__split_part(string_text, delimiter_text, part_number) %}\n\n {% if part_number >= 0 %}\n split(\n {{ string_text }},\n {{ delimiter_text }}\n )[safe_offset({{ part_number - 1 }})]\n {% else %}\n split(\n {{ string_text }},\n {{ delimiter_text }}\n )[safe_offset(\n length({{ string_text }}) \n - length(\n replace({{ string_text }}, {{ delimiter_text }}, '')\n ) + 1\n )]\n {% endif %}\n\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1661544121.4502861}, "macro.dbt_utils.date_trunc": {"unique_id": "macro.dbt_utils.date_trunc", "package_name": "dbt_utils", "root_path": "/Users/joseph.markiewicz/Documents/dbt_packages/ad_reporting/tiktok/dbt_tiktok_ads_source/integration_tests/dbt_packages/dbt_utils", "path": "macros/cross_db_utils/date_trunc.sql", "original_file_path": "macros/cross_db_utils/date_trunc.sql", "name": "date_trunc", "macro_sql": "{% macro date_trunc(datepart, date) -%}\n {{ return(adapter.dispatch('date_trunc', 'dbt_utils') (datepart, date)) }}\n{%- endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.dbt_utils.default__date_trunc"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1661544121.450727}, "macro.dbt_utils.default__date_trunc": {"unique_id": "macro.dbt_utils.default__date_trunc", "package_name": "dbt_utils", "root_path": "/Users/joseph.markiewicz/Documents/dbt_packages/ad_reporting/tiktok/dbt_tiktok_ads_source/integration_tests/dbt_packages/dbt_utils", "path": "macros/cross_db_utils/date_trunc.sql", "original_file_path": "macros/cross_db_utils/date_trunc.sql", "name": "default__date_trunc", "macro_sql": "{% macro default__date_trunc(datepart, date) -%}\n date_trunc('{{datepart}}', {{date}})\n{%- endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1661544121.45086}, "macro.dbt_utils.bigquery__date_trunc": {"unique_id": "macro.dbt_utils.bigquery__date_trunc", "package_name": "dbt_utils", "root_path": "/Users/joseph.markiewicz/Documents/dbt_packages/ad_reporting/tiktok/dbt_tiktok_ads_source/integration_tests/dbt_packages/dbt_utils", "path": "macros/cross_db_utils/date_trunc.sql", "original_file_path": "macros/cross_db_utils/date_trunc.sql", "name": "bigquery__date_trunc", "macro_sql": "{% macro bigquery__date_trunc(datepart, date) -%}\n timestamp_trunc(\n cast({{date}} as timestamp),\n {{datepart}}\n )\n\n{%- endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1661544121.45099}, "macro.dbt_utils.array_construct": {"unique_id": "macro.dbt_utils.array_construct", "package_name": "dbt_utils", "root_path": "/Users/joseph.markiewicz/Documents/dbt_packages/ad_reporting/tiktok/dbt_tiktok_ads_source/integration_tests/dbt_packages/dbt_utils", "path": "macros/cross_db_utils/array_construct.sql", "original_file_path": "macros/cross_db_utils/array_construct.sql", "name": "array_construct", "macro_sql": "{% macro array_construct(inputs = [], data_type = api.Column.translate_type('integer')) -%}\n {{ return(adapter.dispatch('array_construct', 'dbt_utils')(inputs, data_type)) }}\n{%- endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.dbt_utils.default__array_construct"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1661544121.451554}, "macro.dbt_utils.default__array_construct": {"unique_id": "macro.dbt_utils.default__array_construct", "package_name": "dbt_utils", "root_path": "/Users/joseph.markiewicz/Documents/dbt_packages/ad_reporting/tiktok/dbt_tiktok_ads_source/integration_tests/dbt_packages/dbt_utils", "path": "macros/cross_db_utils/array_construct.sql", "original_file_path": "macros/cross_db_utils/array_construct.sql", "name": "default__array_construct", "macro_sql": "{% macro default__array_construct(inputs, data_type) -%}\n {% if inputs|length > 0 %}\n array[ {{ inputs|join(' , ') }} ]\n {% else %}\n array[]::{{data_type}}[]\n {% endif %}\n{%- endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1661544121.451791}, "macro.dbt_utils.snowflake__array_construct": {"unique_id": "macro.dbt_utils.snowflake__array_construct", "package_name": "dbt_utils", "root_path": "/Users/joseph.markiewicz/Documents/dbt_packages/ad_reporting/tiktok/dbt_tiktok_ads_source/integration_tests/dbt_packages/dbt_utils", "path": "macros/cross_db_utils/array_construct.sql", "original_file_path": "macros/cross_db_utils/array_construct.sql", "name": "snowflake__array_construct", "macro_sql": "{% macro snowflake__array_construct(inputs, data_type) -%}\n array_construct( {{ inputs|join(' , ') }} )\n{%- endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1661544121.4519281}, "macro.dbt_utils.redshift__array_construct": {"unique_id": "macro.dbt_utils.redshift__array_construct", "package_name": "dbt_utils", "root_path": "/Users/joseph.markiewicz/Documents/dbt_packages/ad_reporting/tiktok/dbt_tiktok_ads_source/integration_tests/dbt_packages/dbt_utils", "path": "macros/cross_db_utils/array_construct.sql", "original_file_path": "macros/cross_db_utils/array_construct.sql", "name": "redshift__array_construct", "macro_sql": "{% macro redshift__array_construct(inputs, data_type) -%}\n array( {{ inputs|join(' , ') }} )\n{%- endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1661544121.452062}, "macro.dbt_utils.bigquery__array_construct": {"unique_id": "macro.dbt_utils.bigquery__array_construct", "package_name": "dbt_utils", "root_path": "/Users/joseph.markiewicz/Documents/dbt_packages/ad_reporting/tiktok/dbt_tiktok_ads_source/integration_tests/dbt_packages/dbt_utils", "path": "macros/cross_db_utils/array_construct.sql", "original_file_path": "macros/cross_db_utils/array_construct.sql", "name": "bigquery__array_construct", "macro_sql": "{% macro bigquery__array_construct(inputs, data_type) -%}\n [ {{ inputs|join(' , ') }} ]\n{%- endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1661544121.4522681}, "macro.dbt_utils._is_ephemeral": {"unique_id": "macro.dbt_utils._is_ephemeral", "package_name": "dbt_utils", "root_path": "/Users/joseph.markiewicz/Documents/dbt_packages/ad_reporting/tiktok/dbt_tiktok_ads_source/integration_tests/dbt_packages/dbt_utils", "path": "macros/cross_db_utils/_is_ephemeral.sql", "original_file_path": "macros/cross_db_utils/_is_ephemeral.sql", "name": "_is_ephemeral", "macro_sql": "{% macro _is_ephemeral(obj, macro) %}\n {%- if obj.is_cte -%}\n {% set ephemeral_prefix = api.Relation.add_ephemeral_prefix('') %}\n {% if obj.name.startswith(ephemeral_prefix) %}\n {% set model_name = obj.name[(ephemeral_prefix|length):] %}\n {% else %}\n {% set model_name = obj.name %}\n {%- endif -%}\n {% set error_message %}\nThe `{{ macro }}` macro cannot be used with ephemeral models, as it relies on the information schema.\n\n`{{ model_name }}` is an ephemeral model. Consider making it a view or table instead.\n {% endset %}\n {%- do exceptions.raise_compiler_error(error_message) -%}\n {%- endif -%}\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1661544121.453132}, "macro.dbt_utils.array_append": {"unique_id": "macro.dbt_utils.array_append", "package_name": "dbt_utils", "root_path": "/Users/joseph.markiewicz/Documents/dbt_packages/ad_reporting/tiktok/dbt_tiktok_ads_source/integration_tests/dbt_packages/dbt_utils", "path": "macros/cross_db_utils/array_append.sql", "original_file_path": "macros/cross_db_utils/array_append.sql", "name": "array_append", "macro_sql": "{% macro array_append(array, new_element) -%}\n {{ return(adapter.dispatch('array_append', 'dbt_utils')(array, new_element)) }}\n{%- endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.dbt_utils.default__array_append"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1661544121.4536169}, "macro.dbt_utils.default__array_append": {"unique_id": "macro.dbt_utils.default__array_append", "package_name": "dbt_utils", "root_path": "/Users/joseph.markiewicz/Documents/dbt_packages/ad_reporting/tiktok/dbt_tiktok_ads_source/integration_tests/dbt_packages/dbt_utils", "path": "macros/cross_db_utils/array_append.sql", "original_file_path": "macros/cross_db_utils/array_append.sql", "name": "default__array_append", "macro_sql": "{% macro default__array_append(array, new_element) -%}\n array_append({{ array }}, {{ new_element }})\n{%- endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1661544121.453761}, "macro.dbt_utils.bigquery__array_append": {"unique_id": "macro.dbt_utils.bigquery__array_append", "package_name": "dbt_utils", "root_path": "/Users/joseph.markiewicz/Documents/dbt_packages/ad_reporting/tiktok/dbt_tiktok_ads_source/integration_tests/dbt_packages/dbt_utils", "path": "macros/cross_db_utils/array_append.sql", "original_file_path": "macros/cross_db_utils/array_append.sql", "name": "bigquery__array_append", "macro_sql": "{% macro bigquery__array_append(array, new_element) -%}\n {{ dbt_utils.array_concat(array, dbt_utils.array_construct([new_element])) }}\n{%- endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.dbt_utils.array_concat", "macro.dbt_utils.array_construct"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1661544121.453953}, "macro.dbt_utils.redshift__array_append": {"unique_id": "macro.dbt_utils.redshift__array_append", "package_name": "dbt_utils", "root_path": "/Users/joseph.markiewicz/Documents/dbt_packages/ad_reporting/tiktok/dbt_tiktok_ads_source/integration_tests/dbt_packages/dbt_utils", "path": "macros/cross_db_utils/array_append.sql", "original_file_path": "macros/cross_db_utils/array_append.sql", "name": "redshift__array_append", "macro_sql": "{% macro redshift__array_append(array, new_element) -%}\n {{ dbt_utils.array_concat(array, dbt_utils.array_construct([new_element])) }}\n{%- endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.dbt_utils.array_concat", "macro.dbt_utils.array_construct"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1661544121.4541361}, "macro.dbt_utils.get_period_boundaries": {"unique_id": "macro.dbt_utils.get_period_boundaries", "package_name": "dbt_utils", "root_path": "/Users/joseph.markiewicz/Documents/dbt_packages/ad_reporting/tiktok/dbt_tiktok_ads_source/integration_tests/dbt_packages/dbt_utils", "path": "macros/materializations/insert_by_period_materialization.sql", "original_file_path": "macros/materializations/insert_by_period_materialization.sql", "name": "get_period_boundaries", "macro_sql": "{% macro get_period_boundaries(target_schema, target_table, timestamp_field, start_date, stop_date, period) -%}\n {{ return(adapter.dispatch('get_period_boundaries', 'dbt_utils')(target_schema, target_table, timestamp_field, start_date, stop_date, period)) }}\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.dbt_utils.default__get_period_boundaries"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1661544121.459989}, "macro.dbt_utils.default__get_period_boundaries": {"unique_id": "macro.dbt_utils.default__get_period_boundaries", "package_name": "dbt_utils", "root_path": "/Users/joseph.markiewicz/Documents/dbt_packages/ad_reporting/tiktok/dbt_tiktok_ads_source/integration_tests/dbt_packages/dbt_utils", "path": "macros/materializations/insert_by_period_materialization.sql", "original_file_path": "macros/materializations/insert_by_period_materialization.sql", "name": "default__get_period_boundaries", "macro_sql": "{% macro default__get_period_boundaries(target_schema, target_table, timestamp_field, start_date, stop_date, period) -%}\n\n {% call statement('period_boundaries', fetch_result=True) -%}\n with data as (\n select\n coalesce(max(\"{{timestamp_field}}\"), '{{start_date}}')::timestamp as start_timestamp,\n coalesce(\n {{dbt_utils.dateadd('millisecond',\n -1,\n \"nullif('\" ~ stop_date ~ \"','')::timestamp\")}},\n {{dbt_utils.current_timestamp()}}\n ) as stop_timestamp\n from \"{{target_schema}}\".\"{{target_table}}\"\n )\n\n select\n start_timestamp,\n stop_timestamp,\n {{dbt_utils.datediff('start_timestamp',\n 'stop_timestamp',\n period)}} + 1 as num_periods\n from data\n {%- endcall %}\n\n{%- endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.dbt.statement", "macro.dbt_utils.dateadd", "macro.dbt_utils.current_timestamp", "macro.dbt_utils.datediff"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1661544121.460532}, "macro.dbt_utils.get_period_sql": {"unique_id": "macro.dbt_utils.get_period_sql", "package_name": "dbt_utils", "root_path": "/Users/joseph.markiewicz/Documents/dbt_packages/ad_reporting/tiktok/dbt_tiktok_ads_source/integration_tests/dbt_packages/dbt_utils", "path": "macros/materializations/insert_by_period_materialization.sql", "original_file_path": "macros/materializations/insert_by_period_materialization.sql", "name": "get_period_sql", "macro_sql": "{% macro get_period_sql(target_cols_csv, sql, timestamp_field, period, start_timestamp, stop_timestamp, offset) -%}\n {{ return(adapter.dispatch('get_period_sql', 'dbt_utils')(target_cols_csv, sql, timestamp_field, period, start_timestamp, stop_timestamp, offset)) }}\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.dbt_utils.default__get_period_sql"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1661544121.460865}, "macro.dbt_utils.default__get_period_sql": {"unique_id": "macro.dbt_utils.default__get_period_sql", "package_name": "dbt_utils", "root_path": "/Users/joseph.markiewicz/Documents/dbt_packages/ad_reporting/tiktok/dbt_tiktok_ads_source/integration_tests/dbt_packages/dbt_utils", "path": "macros/materializations/insert_by_period_materialization.sql", "original_file_path": "macros/materializations/insert_by_period_materialization.sql", "name": "default__get_period_sql", "macro_sql": "{% macro default__get_period_sql(target_cols_csv, sql, timestamp_field, period, start_timestamp, stop_timestamp, offset) -%}\n\n {%- set period_filter -%}\n (\"{{timestamp_field}}\" > '{{start_timestamp}}'::timestamp + interval '{{offset}} {{period}}' and\n \"{{timestamp_field}}\" <= '{{start_timestamp}}'::timestamp + interval '{{offset}} {{period}}' + interval '1 {{period}}' and\n \"{{timestamp_field}}\" < '{{stop_timestamp}}'::timestamp)\n {%- endset -%}\n\n {%- set filtered_sql = sql | replace(\"__PERIOD_FILTER__\", period_filter) -%}\n\n select\n {{target_cols_csv}}\n from (\n {{filtered_sql}}\n )\n\n{%- endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1661544121.4613702}, "macro.dbt_utils.materialization_insert_by_period_default": {"unique_id": "macro.dbt_utils.materialization_insert_by_period_default", "package_name": "dbt_utils", "root_path": "/Users/joseph.markiewicz/Documents/dbt_packages/ad_reporting/tiktok/dbt_tiktok_ads_source/integration_tests/dbt_packages/dbt_utils", "path": "macros/materializations/insert_by_period_materialization.sql", "original_file_path": "macros/materializations/insert_by_period_materialization.sql", "name": "materialization_insert_by_period_default", "macro_sql": "{% materialization insert_by_period, default -%}\n {%- set timestamp_field = config.require('timestamp_field') -%}\n {%- set start_date = config.require('start_date') -%}\n {%- set stop_date = config.get('stop_date') or '' -%}\n {%- set period = config.get('period') or 'week' -%}\n\n {%- if sql.find('__PERIOD_FILTER__') == -1 -%}\n {%- set error_message -%}\n Model '{{ model.unique_id }}' does not include the required string '__PERIOD_FILTER__' in its sql\n {%- endset -%}\n {{ exceptions.raise_compiler_error(error_message) }}\n {%- endif -%}\n\n {%- set identifier = model['name'] -%}\n\n {%- set old_relation = adapter.get_relation(database=database, schema=schema, identifier=identifier) -%}\n {%- set target_relation = api.Relation.create(identifier=identifier, schema=schema, type='table') -%}\n\n {%- set non_destructive_mode = (flags.NON_DESTRUCTIVE == True) -%}\n {%- set full_refresh_mode = (flags.FULL_REFRESH == True) -%}\n\n {%- set exists_as_table = (old_relation is not none and old_relation.is_table) -%}\n {%- set exists_not_as_table = (old_relation is not none and not old_relation.is_table) -%}\n\n {%- set should_truncate = (non_destructive_mode and full_refresh_mode and exists_as_table) -%}\n {%- set should_drop = (not should_truncate and (full_refresh_mode or exists_not_as_table)) -%}\n {%- set force_create = (flags.FULL_REFRESH and not flags.NON_DESTRUCTIVE) -%}\n\n -- setup\n {% if old_relation is none -%}\n -- noop\n {%- elif should_truncate -%}\n {{adapter.truncate_relation(old_relation)}}\n {%- elif should_drop -%}\n {{adapter.drop_relation(old_relation)}}\n {%- set old_relation = none -%}\n {%- endif %}\n\n {{run_hooks(pre_hooks, inside_transaction=False)}}\n\n -- `begin` happens here, so `commit` after it to finish the transaction\n {{run_hooks(pre_hooks, inside_transaction=True)}}\n {% call statement() -%}\n begin; -- make extra sure we've closed out the transaction\n commit;\n {%- endcall %}\n\n -- build model\n {% if force_create or old_relation is none -%}\n {# Create an empty target table -#}\n {% call statement('main') -%}\n {%- set empty_sql = sql | replace(\"__PERIOD_FILTER__\", 'false') -%}\n {{create_table_as(False, target_relation, empty_sql)}}\n {%- endcall %}\n {%- endif %}\n\n {% set _ = dbt_utils.get_period_boundaries(schema,\n identifier,\n timestamp_field,\n start_date,\n stop_date,\n period) %}\n {%- set start_timestamp = load_result('period_boundaries')['data'][0][0] | string -%}\n {%- set stop_timestamp = load_result('period_boundaries')['data'][0][1] | string -%}\n {%- set num_periods = load_result('period_boundaries')['data'][0][2] | int -%}\n\n {% set target_columns = adapter.get_columns_in_relation(target_relation) %}\n {%- set target_cols_csv = target_columns | map(attribute='quoted') | join(', ') -%}\n {%- set loop_vars = {'sum_rows_inserted': 0} -%}\n\n -- commit each period as a separate transaction\n {% for i in range(num_periods) -%}\n {%- set msg = \"Running for \" ~ period ~ \" \" ~ (i + 1) ~ \" of \" ~ (num_periods) -%}\n {{ dbt_utils.log_info(msg) }}\n\n {%- set tmp_identifier = model['name'] ~ '__dbt_incremental_period' ~ i ~ '_tmp' -%}\n {%- set tmp_relation = api.Relation.create(identifier=tmp_identifier,\n schema=schema, type='table') -%}\n {% call statement() -%}\n {% set tmp_table_sql = dbt_utils.get_period_sql(target_cols_csv,\n sql,\n timestamp_field,\n period,\n start_timestamp,\n stop_timestamp,\n i) %}\n {{dbt.create_table_as(True, tmp_relation, tmp_table_sql)}}\n {%- endcall %}\n\n {{adapter.expand_target_column_types(from_relation=tmp_relation,\n to_relation=target_relation)}}\n {%- set name = 'main-' ~ i -%}\n {% call statement(name, fetch_result=True) -%}\n insert into {{target_relation}} ({{target_cols_csv}})\n (\n select\n {{target_cols_csv}}\n from {{tmp_relation.include(schema=False)}}\n );\n {%- endcall %}\n {% set result = load_result('main-' ~ i) %}\n {% if 'response' in result.keys() %} {# added in v0.19.0 #}\n {% set rows_inserted = result['response']['rows_affected'] %}\n {% else %} {# older versions #}\n {% set rows_inserted = result['status'].split(\" \")[2] | int %}\n {% endif %}\n \n {%- set sum_rows_inserted = loop_vars['sum_rows_inserted'] + rows_inserted -%}\n {%- if loop_vars.update({'sum_rows_inserted': sum_rows_inserted}) %} {% endif -%}\n\n {%- set msg = \"Ran for \" ~ period ~ \" \" ~ (i + 1) ~ \" of \" ~ (num_periods) ~ \"; \" ~ rows_inserted ~ \" records inserted\" -%}\n {{ dbt_utils.log_info(msg) }}\n\n {%- endfor %}\n\n {% call statement() -%}\n begin;\n {%- endcall %}\n\n {{run_hooks(post_hooks, inside_transaction=True)}}\n\n {% call statement() -%}\n commit;\n {%- endcall %}\n\n {{run_hooks(post_hooks, inside_transaction=False)}}\n\n {%- set status_string = \"INSERT \" ~ loop_vars['sum_rows_inserted'] -%}\n\n {% call noop_statement('main', status_string) -%}\n -- no-op\n {%- endcall %}\n\n -- Return the relations created in this materialization\n {{ return({'relations': [target_relation]}) }} \n\n{%- endmaterialization %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.dbt.run_hooks", "macro.dbt.statement", "macro.dbt.create_table_as", "macro.dbt_utils.get_period_boundaries", "macro.dbt_utils.log_info", "macro.dbt_utils.get_period_sql", "macro.dbt.noop_statement"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1661544121.466655}, "macro.dbt_utils.get_url_host": {"unique_id": "macro.dbt_utils.get_url_host", "package_name": "dbt_utils", "root_path": "/Users/joseph.markiewicz/Documents/dbt_packages/ad_reporting/tiktok/dbt_tiktok_ads_source/integration_tests/dbt_packages/dbt_utils", "path": "macros/web/get_url_host.sql", "original_file_path": "macros/web/get_url_host.sql", "name": "get_url_host", "macro_sql": "{% macro get_url_host(field) -%}\n {{ return(adapter.dispatch('get_url_host', 'dbt_utils')(field)) }}\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.dbt_utils.default__get_url_host"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1661544121.4672918}, "macro.dbt_utils.default__get_url_host": {"unique_id": "macro.dbt_utils.default__get_url_host", "package_name": "dbt_utils", "root_path": "/Users/joseph.markiewicz/Documents/dbt_packages/ad_reporting/tiktok/dbt_tiktok_ads_source/integration_tests/dbt_packages/dbt_utils", "path": "macros/web/get_url_host.sql", "original_file_path": "macros/web/get_url_host.sql", "name": "default__get_url_host", "macro_sql": "{% macro default__get_url_host(field) -%}\n\n{%- set parsed =\n dbt_utils.split_part(\n dbt_utils.split_part(\n dbt_utils.replace(\n dbt_utils.replace(\n dbt_utils.replace(field, \"'android-app://'\", \"''\"\n ), \"'http://'\", \"''\"\n ), \"'https://'\", \"''\"\n ), \"'/'\", 1\n ), \"'?'\", 1\n )\n\n-%}\n\n\n {{ dbt_utils.safe_cast(\n parsed,\n dbt_utils.type_string()\n )}}\n\n{%- endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.dbt_utils.split_part", "macro.dbt_utils.replace", "macro.dbt_utils.safe_cast", "macro.dbt_utils.type_string"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1661544121.467791}, "macro.dbt_utils.get_url_path": {"unique_id": "macro.dbt_utils.get_url_path", "package_name": "dbt_utils", "root_path": "/Users/joseph.markiewicz/Documents/dbt_packages/ad_reporting/tiktok/dbt_tiktok_ads_source/integration_tests/dbt_packages/dbt_utils", "path": "macros/web/get_url_path.sql", "original_file_path": "macros/web/get_url_path.sql", "name": "get_url_path", "macro_sql": "{% macro get_url_path(field) -%}\n {{ return(adapter.dispatch('get_url_path', 'dbt_utils')(field)) }}\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.dbt_utils.default__get_url_path"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1661544121.468354}, "macro.dbt_utils.default__get_url_path": {"unique_id": "macro.dbt_utils.default__get_url_path", "package_name": "dbt_utils", "root_path": "/Users/joseph.markiewicz/Documents/dbt_packages/ad_reporting/tiktok/dbt_tiktok_ads_source/integration_tests/dbt_packages/dbt_utils", "path": "macros/web/get_url_path.sql", "original_file_path": "macros/web/get_url_path.sql", "name": "default__get_url_path", "macro_sql": "{% macro default__get_url_path(field) -%}\n\n {%- set stripped_url = \n dbt_utils.replace(\n dbt_utils.replace(field, \"'http://'\", \"''\"), \"'https://'\", \"''\")\n -%}\n\n {%- set first_slash_pos -%}\n coalesce(\n nullif({{dbt_utils.position(\"'/'\", stripped_url)}}, 0),\n {{dbt_utils.position(\"'?'\", stripped_url)}} - 1\n )\n {%- endset -%}\n\n {%- set parsed_path =\n dbt_utils.split_part(\n dbt_utils.right(\n stripped_url, \n dbt_utils.length(stripped_url) ~ \"-\" ~ first_slash_pos\n ), \n \"'?'\", 1\n )\n -%}\n\n {{ dbt_utils.safe_cast(\n parsed_path,\n dbt_utils.type_string()\n )}}\n \n{%- endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.dbt_utils.replace", "macro.dbt_utils.position", "macro.dbt_utils.split_part", "macro.dbt_utils.right", "macro.dbt_utils.length", "macro.dbt_utils.safe_cast", "macro.dbt_utils.type_string"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1661544121.4690309}, "macro.dbt_utils.get_url_parameter": {"unique_id": "macro.dbt_utils.get_url_parameter", "package_name": "dbt_utils", "root_path": "/Users/joseph.markiewicz/Documents/dbt_packages/ad_reporting/tiktok/dbt_tiktok_ads_source/integration_tests/dbt_packages/dbt_utils", "path": "macros/web/get_url_parameter.sql", "original_file_path": "macros/web/get_url_parameter.sql", "name": "get_url_parameter", "macro_sql": "{% macro get_url_parameter(field, url_parameter) -%}\n {{ return(adapter.dispatch('get_url_parameter', 'dbt_utils')(field, url_parameter)) }}\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.dbt_utils.default__get_url_parameter"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1661544121.469443}, "macro.dbt_utils.default__get_url_parameter": {"unique_id": "macro.dbt_utils.default__get_url_parameter", "package_name": "dbt_utils", "root_path": "/Users/joseph.markiewicz/Documents/dbt_packages/ad_reporting/tiktok/dbt_tiktok_ads_source/integration_tests/dbt_packages/dbt_utils", "path": "macros/web/get_url_parameter.sql", "original_file_path": "macros/web/get_url_parameter.sql", "name": "default__get_url_parameter", "macro_sql": "{% macro default__get_url_parameter(field, url_parameter) -%}\n\n{%- set formatted_url_parameter = \"'\" + url_parameter + \"='\" -%}\n\n{%- set split = dbt_utils.split_part(dbt_utils.split_part(field, formatted_url_parameter, 2), \"'&'\", 1) -%}\n\nnullif({{ split }},'')\n\n{%- endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.dbt_utils.split_part"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1661544121.469769}, "macro.dbt_utils.test_fewer_rows_than": {"unique_id": "macro.dbt_utils.test_fewer_rows_than", "package_name": "dbt_utils", "root_path": "/Users/joseph.markiewicz/Documents/dbt_packages/ad_reporting/tiktok/dbt_tiktok_ads_source/integration_tests/dbt_packages/dbt_utils", "path": "macros/generic_tests/fewer_rows_than.sql", "original_file_path": "macros/generic_tests/fewer_rows_than.sql", "name": "test_fewer_rows_than", "macro_sql": "{% test fewer_rows_than(model, compare_model) %}\n {{ return(adapter.dispatch('test_fewer_rows_than', 'dbt_utils')(model, compare_model)) }}\n{% endtest %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.dbt_utils.default__test_fewer_rows_than"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1661544121.470379}, "macro.dbt_utils.default__test_fewer_rows_than": {"unique_id": "macro.dbt_utils.default__test_fewer_rows_than", "package_name": "dbt_utils", "root_path": "/Users/joseph.markiewicz/Documents/dbt_packages/ad_reporting/tiktok/dbt_tiktok_ads_source/integration_tests/dbt_packages/dbt_utils", "path": "macros/generic_tests/fewer_rows_than.sql", "original_file_path": "macros/generic_tests/fewer_rows_than.sql", "name": "default__test_fewer_rows_than", "macro_sql": "{% macro default__test_fewer_rows_than(model, compare_model) %}\n\n{{ config(fail_calc = 'coalesce(row_count_delta, 0)') }}\n\nwith a as (\n\n select count(*) as count_our_model from {{ model }}\n\n),\nb as (\n\n select count(*) as count_comparison_model from {{ compare_model }}\n\n),\ncounts as (\n\n select\n count_our_model,\n count_comparison_model\n from a\n cross join b\n\n),\nfinal as (\n\n select *,\n case\n -- fail the test if we have more rows than the reference model and return the row count delta\n when count_our_model > count_comparison_model then (count_our_model - count_comparison_model)\n -- fail the test if they are the same number\n when count_our_model = count_comparison_model then 1\n -- pass the test if the delta is positive (i.e. return the number 0)\n else 0\n end as row_count_delta\n from counts\n\n)\n\nselect * from final\n\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1661544121.4706109}, "macro.dbt_utils.test_equal_rowcount": {"unique_id": "macro.dbt_utils.test_equal_rowcount", "package_name": "dbt_utils", "root_path": "/Users/joseph.markiewicz/Documents/dbt_packages/ad_reporting/tiktok/dbt_tiktok_ads_source/integration_tests/dbt_packages/dbt_utils", "path": "macros/generic_tests/equal_rowcount.sql", "original_file_path": "macros/generic_tests/equal_rowcount.sql", "name": "test_equal_rowcount", "macro_sql": "{% test equal_rowcount(model, compare_model) %}\n {{ return(adapter.dispatch('test_equal_rowcount', 'dbt_utils')(model, compare_model)) }}\n{% endtest %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.dbt_utils.default__test_equal_rowcount"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1661544121.4710941}, "macro.dbt_utils.default__test_equal_rowcount": {"unique_id": "macro.dbt_utils.default__test_equal_rowcount", "package_name": "dbt_utils", "root_path": "/Users/joseph.markiewicz/Documents/dbt_packages/ad_reporting/tiktok/dbt_tiktok_ads_source/integration_tests/dbt_packages/dbt_utils", "path": "macros/generic_tests/equal_rowcount.sql", "original_file_path": "macros/generic_tests/equal_rowcount.sql", "name": "default__test_equal_rowcount", "macro_sql": "{% macro default__test_equal_rowcount(model, compare_model) %}\n\n{#-- Needs to be set at parse time, before we return '' below --#}\n{{ config(fail_calc = 'coalesce(diff_count, 0)') }}\n\n{#-- Prevent querying of db in parsing mode. This works because this macro does not create any new refs. #}\n{%- if not execute -%}\n {{ return('') }}\n{% endif %}\n\nwith a as (\n\n select count(*) as count_a from {{ model }}\n\n),\nb as (\n\n select count(*) as count_b from {{ compare_model }}\n\n),\nfinal as (\n\n select\n count_a,\n count_b,\n abs(count_a - count_b) as diff_count\n from a\n cross join b\n\n)\n\nselect * from final\n\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1661544121.471413}, "macro.dbt_utils.test_relationships_where": {"unique_id": "macro.dbt_utils.test_relationships_where", "package_name": "dbt_utils", "root_path": "/Users/joseph.markiewicz/Documents/dbt_packages/ad_reporting/tiktok/dbt_tiktok_ads_source/integration_tests/dbt_packages/dbt_utils", "path": "macros/generic_tests/relationships_where.sql", "original_file_path": "macros/generic_tests/relationships_where.sql", "name": "test_relationships_where", "macro_sql": "{% test relationships_where(model, column_name, to, field, from_condition=\"1=1\", to_condition=\"1=1\") %}\n {{ return(adapter.dispatch('test_relationships_where', 'dbt_utils')(model, column_name, to, field, from_condition, to_condition)) }}\n{% endtest %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.dbt_utils.default__test_relationships_where"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1661544121.4721658}, "macro.dbt_utils.default__test_relationships_where": {"unique_id": "macro.dbt_utils.default__test_relationships_where", "package_name": "dbt_utils", "root_path": "/Users/joseph.markiewicz/Documents/dbt_packages/ad_reporting/tiktok/dbt_tiktok_ads_source/integration_tests/dbt_packages/dbt_utils", "path": "macros/generic_tests/relationships_where.sql", "original_file_path": "macros/generic_tests/relationships_where.sql", "name": "default__test_relationships_where", "macro_sql": "{% macro default__test_relationships_where(model, column_name, to, field, from_condition=\"1=1\", to_condition=\"1=1\") %}\n\n{# T-SQL has no boolean data type so we use 1=1 which returns TRUE #}\n{# ref https://stackoverflow.com/a/7170753/3842610 #}\n\nwith left_table as (\n\n select\n {{column_name}} as id\n\n from {{model}}\n\n where {{column_name}} is not null\n and {{from_condition}}\n\n),\n\nright_table as (\n\n select\n {{field}} as id\n\n from {{to}}\n\n where {{field}} is not null\n and {{to_condition}}\n\n),\n\nexceptions as (\n\n select\n left_table.id,\n right_table.id as right_id\n\n from left_table\n\n left join right_table\n on left_table.id = right_table.id\n\n where right_table.id is null\n\n)\n\nselect * from exceptions\n\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1661544121.472524}, "macro.dbt_utils.test_recency": {"unique_id": "macro.dbt_utils.test_recency", "package_name": "dbt_utils", "root_path": "/Users/joseph.markiewicz/Documents/dbt_packages/ad_reporting/tiktok/dbt_tiktok_ads_source/integration_tests/dbt_packages/dbt_utils", "path": "macros/generic_tests/recency.sql", "original_file_path": "macros/generic_tests/recency.sql", "name": "test_recency", "macro_sql": "{% test recency(model, field, datepart, interval) %}\n {{ return(adapter.dispatch('test_recency', 'dbt_utils')(model, field, datepart, interval)) }}\n{% endtest %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.dbt_utils.default__test_recency"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1661544121.4730182}, "macro.dbt_utils.default__test_recency": {"unique_id": "macro.dbt_utils.default__test_recency", "package_name": "dbt_utils", "root_path": "/Users/joseph.markiewicz/Documents/dbt_packages/ad_reporting/tiktok/dbt_tiktok_ads_source/integration_tests/dbt_packages/dbt_utils", "path": "macros/generic_tests/recency.sql", "original_file_path": "macros/generic_tests/recency.sql", "name": "default__test_recency", "macro_sql": "{% macro default__test_recency(model, field, datepart, interval) %}\n\n{% set threshold = dbt_utils.dateadd(datepart, interval * -1, dbt_utils.current_timestamp()) %}\n\nwith recency as (\n\n select max({{field}}) as most_recent\n from {{ model }}\n\n)\n\nselect\n\n most_recent,\n {{ threshold }} as threshold\n\nfrom recency\nwhere most_recent < {{ threshold }}\n\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.dbt_utils.dateadd", "macro.dbt_utils.current_timestamp"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1661544121.473353}, "macro.dbt_utils.test_not_constant": {"unique_id": "macro.dbt_utils.test_not_constant", "package_name": "dbt_utils", "root_path": "/Users/joseph.markiewicz/Documents/dbt_packages/ad_reporting/tiktok/dbt_tiktok_ads_source/integration_tests/dbt_packages/dbt_utils", "path": "macros/generic_tests/not_constant.sql", "original_file_path": "macros/generic_tests/not_constant.sql", "name": "test_not_constant", "macro_sql": "{% test not_constant(model, column_name) %}\n {{ return(adapter.dispatch('test_not_constant', 'dbt_utils')(model, column_name)) }}\n{% endtest %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.dbt_utils.default__test_not_constant"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1661544121.473755}, "macro.dbt_utils.default__test_not_constant": {"unique_id": "macro.dbt_utils.default__test_not_constant", "package_name": "dbt_utils", "root_path": "/Users/joseph.markiewicz/Documents/dbt_packages/ad_reporting/tiktok/dbt_tiktok_ads_source/integration_tests/dbt_packages/dbt_utils", "path": "macros/generic_tests/not_constant.sql", "original_file_path": "macros/generic_tests/not_constant.sql", "name": "default__test_not_constant", "macro_sql": "{% macro default__test_not_constant(model, column_name) %}\n\n\nselect\n {# In TSQL, subquery aggregate columns need aliases #}\n {# thus: a filler col name, 'filler_column' #}\n count(distinct {{ column_name }}) as filler_column\n\nfrom {{ model }}\n\nhaving count(distinct {{ column_name }}) = 1\n\n\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1661544121.4739342}, "macro.dbt_utils.test_accepted_range": {"unique_id": "macro.dbt_utils.test_accepted_range", "package_name": "dbt_utils", "root_path": "/Users/joseph.markiewicz/Documents/dbt_packages/ad_reporting/tiktok/dbt_tiktok_ads_source/integration_tests/dbt_packages/dbt_utils", "path": "macros/generic_tests/accepted_range.sql", "original_file_path": "macros/generic_tests/accepted_range.sql", "name": "test_accepted_range", "macro_sql": "{% test accepted_range(model, column_name, min_value=none, max_value=none, inclusive=true) %}\n {{ return(adapter.dispatch('test_accepted_range', 'dbt_utils')(model, column_name, min_value, max_value, inclusive)) }}\n{% endtest %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.dbt_utils.default__test_accepted_range"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1661544121.474598}, "macro.dbt_utils.default__test_accepted_range": {"unique_id": "macro.dbt_utils.default__test_accepted_range", "package_name": "dbt_utils", "root_path": "/Users/joseph.markiewicz/Documents/dbt_packages/ad_reporting/tiktok/dbt_tiktok_ads_source/integration_tests/dbt_packages/dbt_utils", "path": "macros/generic_tests/accepted_range.sql", "original_file_path": "macros/generic_tests/accepted_range.sql", "name": "default__test_accepted_range", "macro_sql": "{% macro default__test_accepted_range(model, column_name, min_value=none, max_value=none, inclusive=true) %}\n\nwith meet_condition as(\n select *\n from {{ model }}\n),\n\nvalidation_errors as (\n select *\n from meet_condition\n where\n -- never true, defaults to an empty result set. Exists to ensure any combo of the `or` clauses below succeeds\n 1 = 2\n\n {%- if min_value is not none %}\n -- records with a value >= min_value are permitted. The `not` flips this to find records that don't meet the rule.\n or not {{ column_name }} > {{- \"=\" if inclusive }} {{ min_value }}\n {%- endif %}\n\n {%- if max_value is not none %}\n -- records with a value <= max_value are permitted. The `not` flips this to find records that don't meet the rule.\n or not {{ column_name }} < {{- \"=\" if inclusive }} {{ max_value }}\n {%- endif %}\n)\n\nselect *\nfrom validation_errors\n\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1661544121.4751732}, "macro.dbt_utils.test_not_accepted_values": {"unique_id": "macro.dbt_utils.test_not_accepted_values", "package_name": "dbt_utils", "root_path": "/Users/joseph.markiewicz/Documents/dbt_packages/ad_reporting/tiktok/dbt_tiktok_ads_source/integration_tests/dbt_packages/dbt_utils", "path": "macros/generic_tests/not_accepted_values.sql", "original_file_path": "macros/generic_tests/not_accepted_values.sql", "name": "test_not_accepted_values", "macro_sql": "{% test not_accepted_values(model, column_name, values, quote=True) %}\n {{ return(adapter.dispatch('test_not_accepted_values', 'dbt_utils')(model, column_name, values, quote)) }}\n{% endtest %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.dbt_utils.default__test_not_accepted_values"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1661544121.4758022}, "macro.dbt_utils.default__test_not_accepted_values": {"unique_id": "macro.dbt_utils.default__test_not_accepted_values", "package_name": "dbt_utils", "root_path": "/Users/joseph.markiewicz/Documents/dbt_packages/ad_reporting/tiktok/dbt_tiktok_ads_source/integration_tests/dbt_packages/dbt_utils", "path": "macros/generic_tests/not_accepted_values.sql", "original_file_path": "macros/generic_tests/not_accepted_values.sql", "name": "default__test_not_accepted_values", "macro_sql": "{% macro default__test_not_accepted_values(model, column_name, values, quote=True) %}\nwith all_values as (\n\n select distinct\n {{ column_name }} as value_field\n\n from {{ model }}\n\n),\n\nvalidation_errors as (\n\n select\n value_field\n\n from all_values\n where value_field in (\n {% for value in values -%}\n {% if quote -%}\n '{{ value }}'\n {%- else -%}\n {{ value }}\n {%- endif -%}\n {%- if not loop.last -%},{%- endif %}\n {%- endfor %}\n )\n\n)\n\nselect *\nfrom validation_errors\n\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1661544121.476195}, "macro.dbt_utils.test_unique_where": {"unique_id": "macro.dbt_utils.test_unique_where", "package_name": "dbt_utils", "root_path": "/Users/joseph.markiewicz/Documents/dbt_packages/ad_reporting/tiktok/dbt_tiktok_ads_source/integration_tests/dbt_packages/dbt_utils", "path": "macros/generic_tests/test_unique_where.sql", "original_file_path": "macros/generic_tests/test_unique_where.sql", "name": "test_unique_where", "macro_sql": "{% test unique_where(model, column_name) %}\r\n {%- set deprecation_warning = '\r\n Warning: `dbt_utils.unique_where` is no longer supported.\r\n Starting in dbt v0.20.0, the built-in `unique` test supports a `where` config.\r\n ' -%}\r\n {%- do exceptions.warn(deprecation_warning) -%}\r\n {{ return(adapter.dispatch('test_unique_where', 'dbt_utils')(model, column_name)) }}\r\n{% endtest %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.dbt_utils.default__test_unique_where"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1661544121.476688}, "macro.dbt_utils.default__test_unique_where": {"unique_id": "macro.dbt_utils.default__test_unique_where", "package_name": "dbt_utils", "root_path": "/Users/joseph.markiewicz/Documents/dbt_packages/ad_reporting/tiktok/dbt_tiktok_ads_source/integration_tests/dbt_packages/dbt_utils", "path": "macros/generic_tests/test_unique_where.sql", "original_file_path": "macros/generic_tests/test_unique_where.sql", "name": "default__test_unique_where", "macro_sql": "{% macro default__test_unique_where(model, column_name) %}\r\n {{ return(test_unique(model, column_name)) }}\r\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.dbt.test_unique"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1661544121.4768598}, "macro.dbt_utils.test_at_least_one": {"unique_id": "macro.dbt_utils.test_at_least_one", "package_name": "dbt_utils", "root_path": "/Users/joseph.markiewicz/Documents/dbt_packages/ad_reporting/tiktok/dbt_tiktok_ads_source/integration_tests/dbt_packages/dbt_utils", "path": "macros/generic_tests/at_least_one.sql", "original_file_path": "macros/generic_tests/at_least_one.sql", "name": "test_at_least_one", "macro_sql": "{% test at_least_one(model, column_name) %}\n {{ return(adapter.dispatch('test_at_least_one', 'dbt_utils')(model, column_name)) }}\n{% endtest %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.dbt_utils.default__test_at_least_one"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1661544121.477258}, "macro.dbt_utils.default__test_at_least_one": {"unique_id": "macro.dbt_utils.default__test_at_least_one", "package_name": "dbt_utils", "root_path": "/Users/joseph.markiewicz/Documents/dbt_packages/ad_reporting/tiktok/dbt_tiktok_ads_source/integration_tests/dbt_packages/dbt_utils", "path": "macros/generic_tests/at_least_one.sql", "original_file_path": "macros/generic_tests/at_least_one.sql", "name": "default__test_at_least_one", "macro_sql": "{% macro default__test_at_least_one(model, column_name) %}\n\nselect *\nfrom (\n select\n {# In TSQL, subquery aggregate columns need aliases #}\n {# thus: a filler col name, 'filler_column' #}\n count({{ column_name }}) as filler_column\n\n from {{ model }}\n\n having count({{ column_name }}) = 0\n\n) validation_errors\n\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1661544121.477437}, "macro.dbt_utils.test_unique_combination_of_columns": {"unique_id": "macro.dbt_utils.test_unique_combination_of_columns", "package_name": "dbt_utils", "root_path": "/Users/joseph.markiewicz/Documents/dbt_packages/ad_reporting/tiktok/dbt_tiktok_ads_source/integration_tests/dbt_packages/dbt_utils", "path": "macros/generic_tests/unique_combination_of_columns.sql", "original_file_path": "macros/generic_tests/unique_combination_of_columns.sql", "name": "test_unique_combination_of_columns", "macro_sql": "{% test unique_combination_of_columns(model, combination_of_columns, quote_columns=false) %}\n {{ return(adapter.dispatch('test_unique_combination_of_columns', 'dbt_utils')(model, combination_of_columns, quote_columns)) }}\n{% endtest %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.dbt_utils.default__test_unique_combination_of_columns"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1661544121.478103}, "macro.dbt_utils.default__test_unique_combination_of_columns": {"unique_id": "macro.dbt_utils.default__test_unique_combination_of_columns", "package_name": "dbt_utils", "root_path": "/Users/joseph.markiewicz/Documents/dbt_packages/ad_reporting/tiktok/dbt_tiktok_ads_source/integration_tests/dbt_packages/dbt_utils", "path": "macros/generic_tests/unique_combination_of_columns.sql", "original_file_path": "macros/generic_tests/unique_combination_of_columns.sql", "name": "default__test_unique_combination_of_columns", "macro_sql": "{% macro default__test_unique_combination_of_columns(model, combination_of_columns, quote_columns=false) %}\n\n{% if not quote_columns %}\n {%- set column_list=combination_of_columns %}\n{% elif quote_columns %}\n {%- set column_list=[] %}\n {% for column in combination_of_columns -%}\n {% set column_list = column_list.append( adapter.quote(column) ) %}\n {%- endfor %}\n{% else %}\n {{ exceptions.raise_compiler_error(\n \"`quote_columns` argument for unique_combination_of_columns test must be one of [True, False] Got: '\" ~ quote ~\"'.'\"\n ) }}\n{% endif %}\n\n{%- set columns_csv=column_list | join(', ') %}\n\n\nwith validation_errors as (\n\n select\n {{ columns_csv }}\n from {{ model }}\n group by {{ columns_csv }}\n having count(*) > 1\n\n)\n\nselect *\nfrom validation_errors\n\n\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1661544121.47876}, "macro.dbt_utils.test_cardinality_equality": {"unique_id": "macro.dbt_utils.test_cardinality_equality", "package_name": "dbt_utils", "root_path": "/Users/joseph.markiewicz/Documents/dbt_packages/ad_reporting/tiktok/dbt_tiktok_ads_source/integration_tests/dbt_packages/dbt_utils", "path": "macros/generic_tests/cardinality_equality.sql", "original_file_path": "macros/generic_tests/cardinality_equality.sql", "name": "test_cardinality_equality", "macro_sql": "{% test cardinality_equality(model, column_name, to, field) %}\n {{ return(adapter.dispatch('test_cardinality_equality', 'dbt_utils')(model, column_name, to, field)) }}\n{% endtest %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.dbt_utils.default__test_cardinality_equality"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1661544121.479393}, "macro.dbt_utils.default__test_cardinality_equality": {"unique_id": "macro.dbt_utils.default__test_cardinality_equality", "package_name": "dbt_utils", "root_path": "/Users/joseph.markiewicz/Documents/dbt_packages/ad_reporting/tiktok/dbt_tiktok_ads_source/integration_tests/dbt_packages/dbt_utils", "path": "macros/generic_tests/cardinality_equality.sql", "original_file_path": "macros/generic_tests/cardinality_equality.sql", "name": "default__test_cardinality_equality", "macro_sql": "{% macro default__test_cardinality_equality(model, column_name, to, field) %}\n\n{# T-SQL does not let you use numbers as aliases for columns #}\n{# Thus, no \"GROUP BY 1\" #}\n\nwith table_a as (\nselect\n {{ column_name }},\n count(*) as num_rows\nfrom {{ model }}\ngroup by {{ column_name }}\n),\n\ntable_b as (\nselect\n {{ field }},\n count(*) as num_rows\nfrom {{ to }}\ngroup by {{ field }}\n),\n\nexcept_a as (\n select *\n from table_a\n {{ dbt_utils.except() }}\n select *\n from table_b\n),\n\nexcept_b as (\n select *\n from table_b\n {{ dbt_utils.except() }}\n select *\n from table_a\n),\n\nunioned as (\n select *\n from except_a\n union all\n select *\n from except_b\n)\n\nselect *\nfrom unioned\n\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.dbt_utils.except"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1661544121.479742}, "macro.dbt_utils.test_expression_is_true": {"unique_id": "macro.dbt_utils.test_expression_is_true", "package_name": "dbt_utils", "root_path": "/Users/joseph.markiewicz/Documents/dbt_packages/ad_reporting/tiktok/dbt_tiktok_ads_source/integration_tests/dbt_packages/dbt_utils", "path": "macros/generic_tests/expression_is_true.sql", "original_file_path": "macros/generic_tests/expression_is_true.sql", "name": "test_expression_is_true", "macro_sql": "{% test expression_is_true(model, expression, column_name=None, condition='1=1') %}\n{# T-SQL has no boolean data type so we use 1=1 which returns TRUE #}\n{# ref https://stackoverflow.com/a/7170753/3842610 #}\n {{ return(adapter.dispatch('test_expression_is_true', 'dbt_utils')(model, expression, column_name, condition)) }}\n{% endtest %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.dbt_utils.default__test_expression_is_true"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1661544121.480278}, "macro.dbt_utils.default__test_expression_is_true": {"unique_id": "macro.dbt_utils.default__test_expression_is_true", "package_name": "dbt_utils", "root_path": "/Users/joseph.markiewicz/Documents/dbt_packages/ad_reporting/tiktok/dbt_tiktok_ads_source/integration_tests/dbt_packages/dbt_utils", "path": "macros/generic_tests/expression_is_true.sql", "original_file_path": "macros/generic_tests/expression_is_true.sql", "name": "default__test_expression_is_true", "macro_sql": "{% macro default__test_expression_is_true(model, expression, column_name, condition) %}\n\nwith meet_condition as (\n select * from {{ model }} where {{ condition }}\n)\n\nselect\n *\nfrom meet_condition\n{% if column_name is none %}\nwhere not({{ expression }})\n{%- else %}\nwhere not({{ column_name }} {{ expression }})\n{%- endif %}\n\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1661544121.480575}, "macro.dbt_utils.test_not_null_proportion": {"unique_id": "macro.dbt_utils.test_not_null_proportion", "package_name": "dbt_utils", "root_path": "/Users/joseph.markiewicz/Documents/dbt_packages/ad_reporting/tiktok/dbt_tiktok_ads_source/integration_tests/dbt_packages/dbt_utils", "path": "macros/generic_tests/not_null_proportion.sql", "original_file_path": "macros/generic_tests/not_null_proportion.sql", "name": "test_not_null_proportion", "macro_sql": "{% macro test_not_null_proportion(model) %}\n {{ return(adapter.dispatch('test_not_null_proportion', 'dbt_utils')(model, **kwargs)) }}\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.dbt_utils.default__test_not_null_proportion"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1661544121.481066}, "macro.dbt_utils.default__test_not_null_proportion": {"unique_id": "macro.dbt_utils.default__test_not_null_proportion", "package_name": "dbt_utils", "root_path": "/Users/joseph.markiewicz/Documents/dbt_packages/ad_reporting/tiktok/dbt_tiktok_ads_source/integration_tests/dbt_packages/dbt_utils", "path": "macros/generic_tests/not_null_proportion.sql", "original_file_path": "macros/generic_tests/not_null_proportion.sql", "name": "default__test_not_null_proportion", "macro_sql": "{% macro default__test_not_null_proportion(model) %}\n\n{% set column_name = kwargs.get('column_name', kwargs.get('arg')) %}\n{% set at_least = kwargs.get('at_least', kwargs.get('arg')) %}\n{% set at_most = kwargs.get('at_most', kwargs.get('arg', 1)) %}\n\nwith validation as (\n select\n sum(case when {{ column_name }} is null then 0 else 1 end) / cast(count(*) as numeric) as not_null_proportion\n from {{ model }}\n),\nvalidation_errors as (\n select\n not_null_proportion\n from validation\n where not_null_proportion < {{ at_least }} or not_null_proportion > {{ at_most }}\n)\nselect\n *\nfrom validation_errors\n\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1661544121.481604}, "macro.dbt_utils.test_sequential_values": {"unique_id": "macro.dbt_utils.test_sequential_values", "package_name": "dbt_utils", "root_path": "/Users/joseph.markiewicz/Documents/dbt_packages/ad_reporting/tiktok/dbt_tiktok_ads_source/integration_tests/dbt_packages/dbt_utils", "path": "macros/generic_tests/sequential_values.sql", "original_file_path": "macros/generic_tests/sequential_values.sql", "name": "test_sequential_values", "macro_sql": "{% test sequential_values(model, column_name, interval=1, datepart=None) %}\n\n {{ return(adapter.dispatch('test_sequential_values', 'dbt_utils')(model, column_name, interval, datepart)) }}\n\n{% endtest %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.dbt_utils.default__test_sequential_values"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1661544121.4823308}, "macro.dbt_utils.default__test_sequential_values": {"unique_id": "macro.dbt_utils.default__test_sequential_values", "package_name": "dbt_utils", "root_path": "/Users/joseph.markiewicz/Documents/dbt_packages/ad_reporting/tiktok/dbt_tiktok_ads_source/integration_tests/dbt_packages/dbt_utils", "path": "macros/generic_tests/sequential_values.sql", "original_file_path": "macros/generic_tests/sequential_values.sql", "name": "default__test_sequential_values", "macro_sql": "{% macro default__test_sequential_values(model, column_name, interval=1, datepart=None) %}\n\n{% set previous_column_name = \"previous_\" ~ dbt_utils.slugify(column_name) %}\n\nwith windowed as (\n\n select\n {{ column_name }},\n lag({{ column_name }}) over (\n order by {{ column_name }}\n ) as {{ previous_column_name }}\n from {{ model }}\n),\n\nvalidation_errors as (\n select\n *\n from windowed\n {% if datepart %}\n where not(cast({{ column_name }} as {{ dbt_utils.type_timestamp() }})= cast({{ dbt_utils.dateadd(datepart, interval, previous_column_name) }} as {{ dbt_utils.type_timestamp() }}))\n {% else %}\n where not({{ column_name }} = {{ previous_column_name }} + {{ interval }})\n {% endif %}\n)\n\nselect *\nfrom validation_errors\n\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.dbt_utils.slugify", "macro.dbt_utils.type_timestamp", "macro.dbt_utils.dateadd"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1661544121.483049}, "macro.dbt_utils.test_not_null_where": {"unique_id": "macro.dbt_utils.test_not_null_where", "package_name": "dbt_utils", "root_path": "/Users/joseph.markiewicz/Documents/dbt_packages/ad_reporting/tiktok/dbt_tiktok_ads_source/integration_tests/dbt_packages/dbt_utils", "path": "macros/generic_tests/test_not_null_where.sql", "original_file_path": "macros/generic_tests/test_not_null_where.sql", "name": "test_not_null_where", "macro_sql": "{% test not_null_where(model, column_name) %}\r\n {%- set deprecation_warning = '\r\n Warning: `dbt_utils.not_null_where` is no longer supported.\r\n Starting in dbt v0.20.0, the built-in `not_null` test supports a `where` config.\r\n ' -%}\r\n {%- do exceptions.warn(deprecation_warning) -%}\r\n {{ return(adapter.dispatch('test_not_null_where', 'dbt_utils')(model, column_name)) }}\r\n{% endtest %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.dbt_utils.default__test_not_null_where"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1661544121.4835489}, "macro.dbt_utils.default__test_not_null_where": {"unique_id": "macro.dbt_utils.default__test_not_null_where", "package_name": "dbt_utils", "root_path": "/Users/joseph.markiewicz/Documents/dbt_packages/ad_reporting/tiktok/dbt_tiktok_ads_source/integration_tests/dbt_packages/dbt_utils", "path": "macros/generic_tests/test_not_null_where.sql", "original_file_path": "macros/generic_tests/test_not_null_where.sql", "name": "default__test_not_null_where", "macro_sql": "{% macro default__test_not_null_where(model, column_name) %}\r\n {{ return(test_not_null(model, column_name)) }}\r\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.dbt.test_not_null"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1661544121.4837198}, "macro.dbt_utils.test_equality": {"unique_id": "macro.dbt_utils.test_equality", "package_name": "dbt_utils", "root_path": "/Users/joseph.markiewicz/Documents/dbt_packages/ad_reporting/tiktok/dbt_tiktok_ads_source/integration_tests/dbt_packages/dbt_utils", "path": "macros/generic_tests/equality.sql", "original_file_path": "macros/generic_tests/equality.sql", "name": "test_equality", "macro_sql": "{% test equality(model, compare_model, compare_columns=None) %}\n {{ return(adapter.dispatch('test_equality', 'dbt_utils')(model, compare_model, compare_columns)) }}\n{% endtest %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.dbt_utils.default__test_equality"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1661544121.484513}, "macro.dbt_utils.default__test_equality": {"unique_id": "macro.dbt_utils.default__test_equality", "package_name": "dbt_utils", "root_path": "/Users/joseph.markiewicz/Documents/dbt_packages/ad_reporting/tiktok/dbt_tiktok_ads_source/integration_tests/dbt_packages/dbt_utils", "path": "macros/generic_tests/equality.sql", "original_file_path": "macros/generic_tests/equality.sql", "name": "default__test_equality", "macro_sql": "{% macro default__test_equality(model, compare_model, compare_columns=None) %}\n\n{% set set_diff %}\n count(*) + coalesce(abs(\n sum(case when which_diff = 'a_minus_b' then 1 else 0 end) -\n sum(case when which_diff = 'b_minus_a' then 1 else 0 end)\n ), 0)\n{% endset %}\n\n{#-- Needs to be set at parse time, before we return '' below --#}\n{{ config(fail_calc = set_diff) }}\n\n{#-- Prevent querying of db in parsing mode. This works because this macro does not create any new refs. #}\n{%- if not execute -%}\n {{ return('') }}\n{% endif %}\n\n-- setup\n{%- do dbt_utils._is_relation(model, 'test_equality') -%}\n\n{#-\nIf the compare_cols arg is provided, we can run this test without querying the\ninformation schema\u00a0\u2014 this allows the model to be an ephemeral model\n-#}\n\n{%- if not compare_columns -%}\n {%- do dbt_utils._is_ephemeral(model, 'test_equality') -%}\n {%- set compare_columns = adapter.get_columns_in_relation(model) | map(attribute='quoted') -%}\n{%- endif -%}\n\n{% set compare_cols_csv = compare_columns | join(', ') %}\n\nwith a as (\n\n select * from {{ model }}\n\n),\n\nb as (\n\n select * from {{ compare_model }}\n\n),\n\na_minus_b as (\n\n select {{compare_cols_csv}} from a\n {{ dbt_utils.except() }}\n select {{compare_cols_csv}} from b\n\n),\n\nb_minus_a as (\n\n select {{compare_cols_csv}} from b\n {{ dbt_utils.except() }}\n select {{compare_cols_csv}} from a\n\n),\n\nunioned as (\n\n select 'a_minus_b' as which_diff, a_minus_b.* from a_minus_b\n union all\n select 'b_minus_a' as which_diff, b_minus_a.* from b_minus_a\n\n)\n\nselect * from unioned\n\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.dbt_utils._is_relation", "macro.dbt_utils._is_ephemeral", "macro.dbt_utils.except"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1661544121.485419}, "macro.dbt_utils.test_mutually_exclusive_ranges": {"unique_id": "macro.dbt_utils.test_mutually_exclusive_ranges", "package_name": "dbt_utils", "root_path": "/Users/joseph.markiewicz/Documents/dbt_packages/ad_reporting/tiktok/dbt_tiktok_ads_source/integration_tests/dbt_packages/dbt_utils", "path": "macros/generic_tests/mutually_exclusive_ranges.sql", "original_file_path": "macros/generic_tests/mutually_exclusive_ranges.sql", "name": "test_mutually_exclusive_ranges", "macro_sql": "{% test mutually_exclusive_ranges(model, lower_bound_column, upper_bound_column, partition_by=None, gaps='allowed', zero_length_range_allowed=False) %}\n {{ return(adapter.dispatch('test_mutually_exclusive_ranges', 'dbt_utils')(model, lower_bound_column, upper_bound_column, partition_by, gaps, zero_length_range_allowed)) }}\n{% endtest %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.dbt_utils.default__test_mutually_exclusive_ranges"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1661544121.4885492}, "macro.dbt_utils.default__test_mutually_exclusive_ranges": {"unique_id": "macro.dbt_utils.default__test_mutually_exclusive_ranges", "package_name": "dbt_utils", "root_path": "/Users/joseph.markiewicz/Documents/dbt_packages/ad_reporting/tiktok/dbt_tiktok_ads_source/integration_tests/dbt_packages/dbt_utils", "path": "macros/generic_tests/mutually_exclusive_ranges.sql", "original_file_path": "macros/generic_tests/mutually_exclusive_ranges.sql", "name": "default__test_mutually_exclusive_ranges", "macro_sql": "{% macro default__test_mutually_exclusive_ranges(model, lower_bound_column, upper_bound_column, partition_by=None, gaps='allowed', zero_length_range_allowed=False) %}\n{% if gaps == 'not_allowed' %}\n {% set allow_gaps_operator='=' %}\n {% set allow_gaps_operator_in_words='equal_to' %}\n{% elif gaps == 'allowed' %}\n {% set allow_gaps_operator='<=' %}\n {% set allow_gaps_operator_in_words='less_than_or_equal_to' %}\n{% elif gaps == 'required' %}\n {% set allow_gaps_operator='<' %}\n {% set allow_gaps_operator_in_words='less_than' %}\n{% else %}\n {{ exceptions.raise_compiler_error(\n \"`gaps` argument for mutually_exclusive_ranges test must be one of ['not_allowed', 'allowed', 'required'] Got: '\" ~ gaps ~\"'.'\"\n ) }}\n{% endif %}\n{% if not zero_length_range_allowed %}\n {% set allow_zero_length_operator='<' %}\n {% set allow_zero_length_operator_in_words='less_than' %}\n{% elif zero_length_range_allowed %}\n {% set allow_zero_length_operator='<=' %}\n {% set allow_zero_length_operator_in_words='less_than_or_equal_to' %}\n{% else %}\n {{ exceptions.raise_compiler_error(\n \"`zero_length_range_allowed` argument for mutually_exclusive_ranges test must be one of [true, false] Got: '\" ~ zero_length_range_allowed ~\"'.'\"\n ) }}\n{% endif %}\n\n{% set partition_clause=\"partition by \" ~ partition_by if partition_by else '' %}\n\nwith window_functions as (\n\n select\n {% if partition_by %}\n {{ partition_by }} as partition_by_col,\n {% endif %}\n {{ lower_bound_column }} as lower_bound,\n {{ upper_bound_column }} as upper_bound,\n\n lead({{ lower_bound_column }}) over (\n {{ partition_clause }}\n order by {{ lower_bound_column }}\n ) as next_lower_bound,\n\n row_number() over (\n {{ partition_clause }}\n order by {{ lower_bound_column }} desc\n ) = 1 as is_last_record\n\n from {{ model }}\n\n),\n\ncalc as (\n -- We want to return records where one of our assumptions fails, so we'll use\n -- the `not` function with `and` statements so we can write our assumptions nore cleanly\n select\n *,\n\n -- For each record: lower_bound should be < upper_bound.\n -- Coalesce it to return an error on the null case (implicit assumption\n -- these columns are not_null)\n coalesce(\n lower_bound {{ allow_zero_length_operator }} upper_bound,\n false\n ) as lower_bound_{{ allow_zero_length_operator_in_words }}_upper_bound,\n\n -- For each record: upper_bound {{ allow_gaps_operator }} the next lower_bound.\n -- Coalesce it to handle null cases for the last record.\n coalesce(\n upper_bound {{ allow_gaps_operator }} next_lower_bound,\n is_last_record,\n false\n ) as upper_bound_{{ allow_gaps_operator_in_words }}_next_lower_bound\n\n from window_functions\n\n),\n\nvalidation_errors as (\n\n select\n *\n from calc\n\n where not(\n -- THE FOLLOWING SHOULD BE TRUE --\n lower_bound_{{ allow_zero_length_operator_in_words }}_upper_bound\n and upper_bound_{{ allow_gaps_operator_in_words }}_next_lower_bound\n )\n)\n\nselect * from validation_errors\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1661544121.490067}, "macro.dbt_utils.pretty_log_format": {"unique_id": "macro.dbt_utils.pretty_log_format", "package_name": "dbt_utils", "root_path": "/Users/joseph.markiewicz/Documents/dbt_packages/ad_reporting/tiktok/dbt_tiktok_ads_source/integration_tests/dbt_packages/dbt_utils", "path": "macros/jinja_helpers/pretty_log_format.sql", "original_file_path": "macros/jinja_helpers/pretty_log_format.sql", "name": "pretty_log_format", "macro_sql": "{% macro pretty_log_format(message) %}\n {{ return(adapter.dispatch('pretty_log_format', 'dbt_utils')(message)) }}\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.dbt_utils.default__pretty_log_format"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1661544121.490474}, "macro.dbt_utils.default__pretty_log_format": {"unique_id": "macro.dbt_utils.default__pretty_log_format", "package_name": "dbt_utils", "root_path": "/Users/joseph.markiewicz/Documents/dbt_packages/ad_reporting/tiktok/dbt_tiktok_ads_source/integration_tests/dbt_packages/dbt_utils", "path": "macros/jinja_helpers/pretty_log_format.sql", "original_file_path": "macros/jinja_helpers/pretty_log_format.sql", "name": "default__pretty_log_format", "macro_sql": "{% macro default__pretty_log_format(message) %}\n {{ return( dbt_utils.pretty_time() ~ ' + ' ~ message) }}\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.dbt_utils.pretty_time"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1661544121.490643}, "macro.dbt_utils.pretty_time": {"unique_id": "macro.dbt_utils.pretty_time", "package_name": "dbt_utils", "root_path": "/Users/joseph.markiewicz/Documents/dbt_packages/ad_reporting/tiktok/dbt_tiktok_ads_source/integration_tests/dbt_packages/dbt_utils", "path": "macros/jinja_helpers/pretty_time.sql", "original_file_path": "macros/jinja_helpers/pretty_time.sql", "name": "pretty_time", "macro_sql": "{% macro pretty_time(format='%H:%M:%S') %}\n {{ return(adapter.dispatch('pretty_time', 'dbt_utils')(format)) }}\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.dbt_utils.default__pretty_time"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1661544121.491009}, "macro.dbt_utils.default__pretty_time": {"unique_id": "macro.dbt_utils.default__pretty_time", "package_name": "dbt_utils", "root_path": "/Users/joseph.markiewicz/Documents/dbt_packages/ad_reporting/tiktok/dbt_tiktok_ads_source/integration_tests/dbt_packages/dbt_utils", "path": "macros/jinja_helpers/pretty_time.sql", "original_file_path": "macros/jinja_helpers/pretty_time.sql", "name": "default__pretty_time", "macro_sql": "{% macro default__pretty_time(format='%H:%M:%S') %}\n {{ return(modules.datetime.datetime.now().strftime(format)) }}\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1661544121.4912288}, "macro.dbt_utils.log_info": {"unique_id": "macro.dbt_utils.log_info", "package_name": "dbt_utils", "root_path": "/Users/joseph.markiewicz/Documents/dbt_packages/ad_reporting/tiktok/dbt_tiktok_ads_source/integration_tests/dbt_packages/dbt_utils", "path": "macros/jinja_helpers/log_info.sql", "original_file_path": "macros/jinja_helpers/log_info.sql", "name": "log_info", "macro_sql": "{% macro log_info(message) %}\n {{ return(adapter.dispatch('log_info', 'dbt_utils')(message)) }}\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.dbt_utils.default__log_info"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1661544121.4915688}, "macro.dbt_utils.default__log_info": {"unique_id": "macro.dbt_utils.default__log_info", "package_name": "dbt_utils", "root_path": "/Users/joseph.markiewicz/Documents/dbt_packages/ad_reporting/tiktok/dbt_tiktok_ads_source/integration_tests/dbt_packages/dbt_utils", "path": "macros/jinja_helpers/log_info.sql", "original_file_path": "macros/jinja_helpers/log_info.sql", "name": "default__log_info", "macro_sql": "{% macro default__log_info(message) %}\n {{ log(dbt_utils.pretty_log_format(message), info=True) }}\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.dbt_utils.pretty_log_format"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1661544121.4917529}, "macro.dbt_utils.slugify": {"unique_id": "macro.dbt_utils.slugify", "package_name": "dbt_utils", "root_path": "/Users/joseph.markiewicz/Documents/dbt_packages/ad_reporting/tiktok/dbt_tiktok_ads_source/integration_tests/dbt_packages/dbt_utils", "path": "macros/jinja_helpers/slugify.sql", "original_file_path": "macros/jinja_helpers/slugify.sql", "name": "slugify", "macro_sql": "{% macro slugify(string) %}\n\n{#- Lower case the string -#}\n{% set string = string | lower %}\n{#- Replace spaces and dashes with underscores -#}\n{% set string = modules.re.sub('[ -]+', '_', string) %}\n{#- Only take letters, numbers, and underscores -#}\n{% set string = modules.re.sub('[^a-z0-9_]+', '', string) %}\n\n{{ return(string) }}\n\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1661544121.492322}, "macro.dbt_utils.get_intervals_between": {"unique_id": "macro.dbt_utils.get_intervals_between", "package_name": "dbt_utils", "root_path": "/Users/joseph.markiewicz/Documents/dbt_packages/ad_reporting/tiktok/dbt_tiktok_ads_source/integration_tests/dbt_packages/dbt_utils", "path": "macros/sql/date_spine.sql", "original_file_path": "macros/sql/date_spine.sql", "name": "get_intervals_between", "macro_sql": "{% macro get_intervals_between(start_date, end_date, datepart) -%}\n {{ return(adapter.dispatch('get_intervals_between', 'dbt_utils')(start_date, end_date, datepart)) }}\n{%- endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.dbt_utils.default__get_intervals_between"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1661544121.493098}, "macro.dbt_utils.default__get_intervals_between": {"unique_id": "macro.dbt_utils.default__get_intervals_between", "package_name": "dbt_utils", "root_path": "/Users/joseph.markiewicz/Documents/dbt_packages/ad_reporting/tiktok/dbt_tiktok_ads_source/integration_tests/dbt_packages/dbt_utils", "path": "macros/sql/date_spine.sql", "original_file_path": "macros/sql/date_spine.sql", "name": "default__get_intervals_between", "macro_sql": "{% macro default__get_intervals_between(start_date, end_date, datepart) -%}\n {%- call statement('get_intervals_between', fetch_result=True) %}\n\n select {{dbt_utils.datediff(start_date, end_date, datepart)}}\n\n {%- endcall -%}\n\n {%- set value_list = load_result('get_intervals_between') -%}\n\n {%- if value_list and value_list['data'] -%}\n {%- set values = value_list['data'] | map(attribute=0) | list %}\n {{ return(values[0]) }}\n {%- else -%}\n {{ return(1) }}\n {%- endif -%}\n\n{%- endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.dbt.statement", "macro.dbt_utils.datediff"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1661544121.4937248}, "macro.dbt_utils.date_spine": {"unique_id": "macro.dbt_utils.date_spine", "package_name": "dbt_utils", "root_path": "/Users/joseph.markiewicz/Documents/dbt_packages/ad_reporting/tiktok/dbt_tiktok_ads_source/integration_tests/dbt_packages/dbt_utils", "path": "macros/sql/date_spine.sql", "original_file_path": "macros/sql/date_spine.sql", "name": "date_spine", "macro_sql": "{% macro date_spine(datepart, start_date, end_date) %}\n {{ return(adapter.dispatch('date_spine', 'dbt_utils')(datepart, start_date, end_date)) }}\n{%- endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.dbt_utils.default__date_spine"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1661544121.493973}, "macro.dbt_utils.default__date_spine": {"unique_id": "macro.dbt_utils.default__date_spine", "package_name": "dbt_utils", "root_path": "/Users/joseph.markiewicz/Documents/dbt_packages/ad_reporting/tiktok/dbt_tiktok_ads_source/integration_tests/dbt_packages/dbt_utils", "path": "macros/sql/date_spine.sql", "original_file_path": "macros/sql/date_spine.sql", "name": "default__date_spine", "macro_sql": "{% macro default__date_spine(datepart, start_date, end_date) %}\n\n\n{# call as follows:\n\ndate_spine(\n \"day\",\n \"to_date('01/01/2016', 'mm/dd/yyyy')\",\n \"dateadd(week, 1, current_date)\"\n) #}\n\n\nwith rawdata as (\n\n {{dbt_utils.generate_series(\n dbt_utils.get_intervals_between(start_date, end_date, datepart)\n )}}\n\n),\n\nall_periods as (\n\n select (\n {{\n dbt_utils.dateadd(\n datepart,\n \"row_number() over (order by 1) - 1\",\n start_date\n )\n }}\n ) as date_{{datepart}}\n from rawdata\n\n),\n\nfiltered as (\n\n select *\n from all_periods\n where date_{{datepart}} <= {{ end_date }}\n\n)\n\nselect * from filtered\n\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.dbt_utils.generate_series", "macro.dbt_utils.get_intervals_between", "macro.dbt_utils.dateadd"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1661544121.4943519}, "macro.dbt_utils.nullcheck_table": {"unique_id": "macro.dbt_utils.nullcheck_table", "package_name": "dbt_utils", "root_path": "/Users/joseph.markiewicz/Documents/dbt_packages/ad_reporting/tiktok/dbt_tiktok_ads_source/integration_tests/dbt_packages/dbt_utils", "path": "macros/sql/nullcheck_table.sql", "original_file_path": "macros/sql/nullcheck_table.sql", "name": "nullcheck_table", "macro_sql": "{% macro nullcheck_table(relation) %}\n {{ return(adapter.dispatch('nullcheck_table', 'dbt_utils')(relation)) }}\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.dbt_utils.default__nullcheck_table"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1661544121.494797}, "macro.dbt_utils.default__nullcheck_table": {"unique_id": "macro.dbt_utils.default__nullcheck_table", "package_name": "dbt_utils", "root_path": "/Users/joseph.markiewicz/Documents/dbt_packages/ad_reporting/tiktok/dbt_tiktok_ads_source/integration_tests/dbt_packages/dbt_utils", "path": "macros/sql/nullcheck_table.sql", "original_file_path": "macros/sql/nullcheck_table.sql", "name": "default__nullcheck_table", "macro_sql": "{% macro default__nullcheck_table(relation) %}\n\n {%- do dbt_utils._is_relation(relation, 'nullcheck_table') -%}\n {%- do dbt_utils._is_ephemeral(relation, 'nullcheck_table') -%}\n {% set cols = adapter.get_columns_in_relation(relation) %}\n\n select {{ dbt_utils.nullcheck(cols) }}\n from {{relation}}\n\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.dbt_utils._is_relation", "macro.dbt_utils._is_ephemeral", "macro.dbt_utils.nullcheck"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1661544121.495264}, "macro.dbt_utils.get_relations_by_pattern": {"unique_id": "macro.dbt_utils.get_relations_by_pattern", "package_name": "dbt_utils", "root_path": "/Users/joseph.markiewicz/Documents/dbt_packages/ad_reporting/tiktok/dbt_tiktok_ads_source/integration_tests/dbt_packages/dbt_utils", "path": "macros/sql/get_relations_by_pattern.sql", "original_file_path": "macros/sql/get_relations_by_pattern.sql", "name": "get_relations_by_pattern", "macro_sql": "{% macro get_relations_by_pattern(schema_pattern, table_pattern, exclude='', database=target.database) %}\n {{ return(adapter.dispatch('get_relations_by_pattern', 'dbt_utils')(schema_pattern, table_pattern, exclude, database)) }}\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.dbt_utils.default__get_relations_by_pattern"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1661544121.496036}, "macro.dbt_utils.default__get_relations_by_pattern": {"unique_id": "macro.dbt_utils.default__get_relations_by_pattern", "package_name": "dbt_utils", "root_path": "/Users/joseph.markiewicz/Documents/dbt_packages/ad_reporting/tiktok/dbt_tiktok_ads_source/integration_tests/dbt_packages/dbt_utils", "path": "macros/sql/get_relations_by_pattern.sql", "original_file_path": "macros/sql/get_relations_by_pattern.sql", "name": "default__get_relations_by_pattern", "macro_sql": "{% macro default__get_relations_by_pattern(schema_pattern, table_pattern, exclude='', database=target.database) %}\n\n {%- call statement('get_tables', fetch_result=True) %}\n\n {{ dbt_utils.get_tables_by_pattern_sql(schema_pattern, table_pattern, exclude, database) }}\n\n {%- endcall -%}\n\n {%- set table_list = load_result('get_tables') -%}\n\n {%- if table_list and table_list['table'] -%}\n {%- set tbl_relations = [] -%}\n {%- for row in table_list['table'] -%}\n {%- set tbl_relation = api.Relation.create(\n database=database,\n schema=row.table_schema,\n identifier=row.table_name,\n type=row.table_type\n ) -%}\n {%- do tbl_relations.append(tbl_relation) -%}\n {%- endfor -%}\n\n {{ return(tbl_relations) }}\n {%- else -%}\n {{ return([]) }}\n {%- endif -%}\n\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.dbt.statement", "macro.dbt_utils.get_tables_by_pattern_sql"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1661544121.496935}, "macro.dbt_utils.get_powers_of_two": {"unique_id": "macro.dbt_utils.get_powers_of_two", "package_name": "dbt_utils", "root_path": "/Users/joseph.markiewicz/Documents/dbt_packages/ad_reporting/tiktok/dbt_tiktok_ads_source/integration_tests/dbt_packages/dbt_utils", "path": "macros/sql/generate_series.sql", "original_file_path": "macros/sql/generate_series.sql", "name": "get_powers_of_two", "macro_sql": "{% macro get_powers_of_two(upper_bound) %}\n {{ return(adapter.dispatch('get_powers_of_two', 'dbt_utils')(upper_bound)) }}\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.dbt_utils.default__get_powers_of_two"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1661544121.497962}, "macro.dbt_utils.default__get_powers_of_two": {"unique_id": "macro.dbt_utils.default__get_powers_of_two", "package_name": "dbt_utils", "root_path": "/Users/joseph.markiewicz/Documents/dbt_packages/ad_reporting/tiktok/dbt_tiktok_ads_source/integration_tests/dbt_packages/dbt_utils", "path": "macros/sql/generate_series.sql", "original_file_path": "macros/sql/generate_series.sql", "name": "default__get_powers_of_two", "macro_sql": "{% macro default__get_powers_of_two(upper_bound) %}\n\n {% if upper_bound <= 0 %}\n {{ exceptions.raise_compiler_error(\"upper bound must be positive\") }}\n {% endif %}\n\n {% for _ in range(1, 100) %}\n {% if upper_bound <= 2 ** loop.index %}{{ return(loop.index) }}{% endif %}\n {% endfor %}\n\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1661544121.498419}, "macro.dbt_utils.generate_series": {"unique_id": "macro.dbt_utils.generate_series", "package_name": "dbt_utils", "root_path": "/Users/joseph.markiewicz/Documents/dbt_packages/ad_reporting/tiktok/dbt_tiktok_ads_source/integration_tests/dbt_packages/dbt_utils", "path": "macros/sql/generate_series.sql", "original_file_path": "macros/sql/generate_series.sql", "name": "generate_series", "macro_sql": "{% macro generate_series(upper_bound) %}\n {{ return(adapter.dispatch('generate_series', 'dbt_utils')(upper_bound)) }}\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.dbt_utils.default__generate_series"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1661544121.498626}, "macro.dbt_utils.default__generate_series": {"unique_id": "macro.dbt_utils.default__generate_series", "package_name": "dbt_utils", "root_path": "/Users/joseph.markiewicz/Documents/dbt_packages/ad_reporting/tiktok/dbt_tiktok_ads_source/integration_tests/dbt_packages/dbt_utils", "path": "macros/sql/generate_series.sql", "original_file_path": "macros/sql/generate_series.sql", "name": "default__generate_series", "macro_sql": "{% macro default__generate_series(upper_bound) %}\n\n {% set n = dbt_utils.get_powers_of_two(upper_bound) %}\n\n with p as (\n select 0 as generated_number union all select 1\n ), unioned as (\n\n select\n\n {% for i in range(n) %}\n p{{i}}.generated_number * power(2, {{i}})\n {% if not loop.last %} + {% endif %}\n {% endfor %}\n + 1\n as generated_number\n\n from\n\n {% for i in range(n) %}\n p as p{{i}}\n {% if not loop.last %} cross join {% endif %}\n {% endfor %}\n\n )\n\n select *\n from unioned\n where generated_number <= {{upper_bound}}\n order by generated_number\n\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.dbt_utils.get_powers_of_two"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1661544121.499181}, "macro.dbt_utils.get_relations_by_prefix": {"unique_id": "macro.dbt_utils.get_relations_by_prefix", "package_name": "dbt_utils", "root_path": "/Users/joseph.markiewicz/Documents/dbt_packages/ad_reporting/tiktok/dbt_tiktok_ads_source/integration_tests/dbt_packages/dbt_utils", "path": "macros/sql/get_relations_by_prefix.sql", "original_file_path": "macros/sql/get_relations_by_prefix.sql", "name": "get_relations_by_prefix", "macro_sql": "{% macro get_relations_by_prefix(schema, prefix, exclude='', database=target.database) %}\n {{ return(adapter.dispatch('get_relations_by_prefix', 'dbt_utils')(schema, prefix, exclude, database)) }}\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.dbt_utils.default__get_relations_by_prefix"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1661544121.500032}, "macro.dbt_utils.default__get_relations_by_prefix": {"unique_id": "macro.dbt_utils.default__get_relations_by_prefix", "package_name": "dbt_utils", "root_path": "/Users/joseph.markiewicz/Documents/dbt_packages/ad_reporting/tiktok/dbt_tiktok_ads_source/integration_tests/dbt_packages/dbt_utils", "path": "macros/sql/get_relations_by_prefix.sql", "original_file_path": "macros/sql/get_relations_by_prefix.sql", "name": "default__get_relations_by_prefix", "macro_sql": "{% macro default__get_relations_by_prefix(schema, prefix, exclude='', database=target.database) %}\n\n {%- call statement('get_tables', fetch_result=True) %}\n\n {{ dbt_utils.get_tables_by_prefix_sql(schema, prefix, exclude, database) }}\n\n {%- endcall -%}\n\n {%- set table_list = load_result('get_tables') -%}\n\n {%- if table_list and table_list['table'] -%}\n {%- set tbl_relations = [] -%}\n {%- for row in table_list['table'] -%}\n {%- set tbl_relation = api.Relation.create(\n database=database,\n schema=row.table_schema,\n identifier=row.table_name,\n type=row.table_type\n ) -%}\n {%- do tbl_relations.append(tbl_relation) -%}\n {%- endfor -%}\n\n {{ return(tbl_relations) }}\n {%- else -%}\n {{ return([]) }}\n {%- endif -%}\n\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.dbt.statement", "macro.dbt_utils.get_tables_by_prefix_sql"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1661544121.500941}, "macro.dbt_utils.get_tables_by_prefix_sql": {"unique_id": "macro.dbt_utils.get_tables_by_prefix_sql", "package_name": "dbt_utils", "root_path": "/Users/joseph.markiewicz/Documents/dbt_packages/ad_reporting/tiktok/dbt_tiktok_ads_source/integration_tests/dbt_packages/dbt_utils", "path": "macros/sql/get_tables_by_prefix_sql.sql", "original_file_path": "macros/sql/get_tables_by_prefix_sql.sql", "name": "get_tables_by_prefix_sql", "macro_sql": "{% macro get_tables_by_prefix_sql(schema, prefix, exclude='', database=target.database) %}\n {{ return(adapter.dispatch('get_tables_by_prefix_sql', 'dbt_utils')(schema, prefix, exclude, database)) }}\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.dbt_utils.default__get_tables_by_prefix_sql"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1661544121.501534}, "macro.dbt_utils.default__get_tables_by_prefix_sql": {"unique_id": "macro.dbt_utils.default__get_tables_by_prefix_sql", "package_name": "dbt_utils", "root_path": "/Users/joseph.markiewicz/Documents/dbt_packages/ad_reporting/tiktok/dbt_tiktok_ads_source/integration_tests/dbt_packages/dbt_utils", "path": "macros/sql/get_tables_by_prefix_sql.sql", "original_file_path": "macros/sql/get_tables_by_prefix_sql.sql", "name": "default__get_tables_by_prefix_sql", "macro_sql": "{% macro default__get_tables_by_prefix_sql(schema, prefix, exclude='', database=target.database) %}\n\n {{ dbt_utils.get_tables_by_pattern_sql(\n schema_pattern = schema,\n table_pattern = prefix ~ '%',\n exclude = exclude,\n database = database\n ) }}\n \n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.dbt_utils.get_tables_by_pattern_sql"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1661544121.5018492}, "macro.dbt_utils.star": {"unique_id": "macro.dbt_utils.star", "package_name": "dbt_utils", "root_path": "/Users/joseph.markiewicz/Documents/dbt_packages/ad_reporting/tiktok/dbt_tiktok_ads_source/integration_tests/dbt_packages/dbt_utils", "path": "macros/sql/star.sql", "original_file_path": "macros/sql/star.sql", "name": "star", "macro_sql": "{% macro star(from, relation_alias=False, except=[], prefix='', suffix='') -%}\n {{ return(adapter.dispatch('star', 'dbt_utils')(from, relation_alias, except, prefix, suffix)) }}\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.dbt_utils.default__star"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1661544121.502795}, "macro.dbt_utils.default__star": {"unique_id": "macro.dbt_utils.default__star", "package_name": "dbt_utils", "root_path": "/Users/joseph.markiewicz/Documents/dbt_packages/ad_reporting/tiktok/dbt_tiktok_ads_source/integration_tests/dbt_packages/dbt_utils", "path": "macros/sql/star.sql", "original_file_path": "macros/sql/star.sql", "name": "default__star", "macro_sql": "{% macro default__star(from, relation_alias=False, except=[], prefix='', suffix='') -%}\n {%- do dbt_utils._is_relation(from, 'star') -%}\n {%- do dbt_utils._is_ephemeral(from, 'star') -%}\n\n {#-- Prevent querying of db in parsing mode. This works because this macro does not create any new refs. #}\n {%- if not execute -%}\n {{ return('*') }}\n {% endif %}\n\n {% set cols = dbt_utils.get_filtered_columns_in_relation(from, except) %}\n\n {%- if cols|length <= 0 -%}\n {{- return('*') -}}\n {%- else -%}\n {%- for col in cols %}\n {%- if relation_alias %}{{ relation_alias }}.{% else %}{%- endif -%}{{ adapter.quote(col)|trim }} {%- if prefix!='' or suffix!='' %} as {{ adapter.quote(prefix ~ col ~ suffix)|trim }} {%- endif -%}\n {%- if not loop.last %},{{ '\\n ' }}{% endif %}\n {%- endfor -%}\n {% endif %}\n{%- endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.dbt_utils._is_relation", "macro.dbt_utils._is_ephemeral", "macro.dbt_utils.get_filtered_columns_in_relation"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1661544121.503923}, "macro.dbt_utils.unpivot": {"unique_id": "macro.dbt_utils.unpivot", "package_name": "dbt_utils", "root_path": "/Users/joseph.markiewicz/Documents/dbt_packages/ad_reporting/tiktok/dbt_tiktok_ads_source/integration_tests/dbt_packages/dbt_utils", "path": "macros/sql/unpivot.sql", "original_file_path": "macros/sql/unpivot.sql", "name": "unpivot", "macro_sql": "{% macro unpivot(relation=none, cast_to='varchar', exclude=none, remove=none, field_name='field_name', value_name='value', table=none) -%}\n {{ return(adapter.dispatch('unpivot', 'dbt_utils')(relation, cast_to, exclude, remove, field_name, value_name, table)) }}\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.dbt_utils.default__unpivot"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1661544121.505871}, "macro.dbt_utils.default__unpivot": {"unique_id": "macro.dbt_utils.default__unpivot", "package_name": "dbt_utils", "root_path": "/Users/joseph.markiewicz/Documents/dbt_packages/ad_reporting/tiktok/dbt_tiktok_ads_source/integration_tests/dbt_packages/dbt_utils", "path": "macros/sql/unpivot.sql", "original_file_path": "macros/sql/unpivot.sql", "name": "default__unpivot", "macro_sql": "{% macro default__unpivot(relation=none, cast_to='varchar', exclude=none, remove=none, field_name='field_name', value_name='value', table=none) -%}\n\n {% if table %}\n {%- set error_message = '\n Warning: the `unpivot` macro no longer accepts a `table` parameter. \\\n This parameter will be deprecated in a future release of dbt-utils. Use the `relation` parameter instead. \\\n The {}.{} model triggered this warning. \\\n '.format(model.package_name, model.name) -%}\n {%- do exceptions.warn(error_message) -%}\n {% endif %}\n\n {% if relation and table %}\n {{ exceptions.raise_compiler_error(\"Error: both the `relation` and `table` parameters were provided to `unpivot` macro. Choose one only (we recommend `relation`).\") }}\n {% elif not relation and table %}\n {% set relation=table %}\n {% elif not relation and not table %}\n {{ exceptions.raise_compiler_error(\"Error: argument `relation` is required for `unpivot` macro.\") }}\n {% endif %}\n\n {%- set exclude = exclude if exclude is not none else [] %}\n {%- set remove = remove if remove is not none else [] %}\n\n {%- set include_cols = [] %}\n\n {%- set table_columns = {} %}\n\n {%- do table_columns.update({relation: []}) %}\n\n {%- do dbt_utils._is_relation(relation, 'unpivot') -%}\n {%- do dbt_utils._is_ephemeral(relation, 'unpivot') -%}\n {%- set cols = adapter.get_columns_in_relation(relation) %}\n\n {%- for col in cols -%}\n {%- if col.column.lower() not in remove|map('lower') and col.column.lower() not in exclude|map('lower') -%}\n {% do include_cols.append(col) %}\n {%- endif %}\n {%- endfor %}\n\n\n {%- for col in include_cols -%}\n select\n {%- for exclude_col in exclude %}\n {{ exclude_col }},\n {%- endfor %}\n\n cast('{{ col.column }}' as {{ dbt_utils.type_string() }}) as {{ field_name }},\n cast( {% if col.data_type == 'boolean' %}\n {{ dbt_utils.cast_bool_to_text(col.column) }}\n {% else %}\n {{ col.column }}\n {% endif %}\n as {{ cast_to }}) as {{ value_name }}\n\n from {{ relation }}\n\n {% if not loop.last -%}\n union all\n {% endif -%}\n {%- endfor -%}\n\n{%- endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.dbt_utils._is_relation", "macro.dbt_utils._is_ephemeral", "macro.dbt_utils.type_string", "macro.dbt_utils.cast_bool_to_text"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1661544121.508286}, "macro.dbt_utils.union_relations": {"unique_id": "macro.dbt_utils.union_relations", "package_name": "dbt_utils", "root_path": "/Users/joseph.markiewicz/Documents/dbt_packages/ad_reporting/tiktok/dbt_tiktok_ads_source/integration_tests/dbt_packages/dbt_utils", "path": "macros/sql/union.sql", "original_file_path": "macros/sql/union.sql", "name": "union_relations", "macro_sql": "{%- macro union_relations(relations, column_override=none, include=[], exclude=[], source_column_name='_dbt_source_relation', where=none) -%}\n {{ return(adapter.dispatch('union_relations', 'dbt_utils')(relations, column_override, include, exclude, source_column_name, where)) }}\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.dbt_utils.default__union_relations"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1661544121.510962}, "macro.dbt_utils.default__union_relations": {"unique_id": "macro.dbt_utils.default__union_relations", "package_name": "dbt_utils", "root_path": "/Users/joseph.markiewicz/Documents/dbt_packages/ad_reporting/tiktok/dbt_tiktok_ads_source/integration_tests/dbt_packages/dbt_utils", "path": "macros/sql/union.sql", "original_file_path": "macros/sql/union.sql", "name": "default__union_relations", "macro_sql": "\n\n{%- macro default__union_relations(relations, column_override=none, include=[], exclude=[], source_column_name='_dbt_source_relation', where=none) -%}\n\n {%- if exclude and include -%}\n {{ exceptions.raise_compiler_error(\"Both an exclude and include list were provided to the `union` macro. Only one is allowed\") }}\n {%- endif -%}\n\n {#-- Prevent querying of db in parsing mode. This works because this macro does not create any new refs. -#}\n {%- if not execute %}\n {{ return('') }}\n {% endif -%}\n\n {%- set column_override = column_override if column_override is not none else {} -%}\n\n {%- set relation_columns = {} -%}\n {%- set column_superset = {} -%}\n\n {%- for relation in relations -%}\n\n {%- do relation_columns.update({relation: []}) -%}\n\n {%- do dbt_utils._is_relation(relation, 'union_relations') -%}\n {%- do dbt_utils._is_ephemeral(relation, 'union_relations') -%}\n {%- set cols = adapter.get_columns_in_relation(relation) -%}\n {%- for col in cols -%}\n\n {#- If an exclude list was provided and the column is in the list, do nothing -#}\n {%- if exclude and col.column in exclude -%}\n\n {#- If an include list was provided and the column is not in the list, do nothing -#}\n {%- elif include and col.column not in include -%}\n\n {#- Otherwise add the column to the column superset -#}\n {%- else -%}\n\n {#- update the list of columns in this relation -#}\n {%- do relation_columns[relation].append(col.column) -%}\n\n {%- if col.column in column_superset -%}\n\n {%- set stored = column_superset[col.column] -%}\n {%- if col.is_string() and stored.is_string() and col.string_size() > stored.string_size() -%}\n\n {%- do column_superset.update({col.column: col}) -%}\n\n {%- endif %}\n\n {%- else -%}\n\n {%- do column_superset.update({col.column: col}) -%}\n\n {%- endif -%}\n\n {%- endif -%}\n\n {%- endfor -%}\n {%- endfor -%}\n\n {%- set ordered_column_names = column_superset.keys() -%}\n {%- set dbt_command = flags.WHICH -%}\n\n\n {% if dbt_command in ['run', 'build'] %}\n {% if (include | length > 0 or exclude | length > 0) and not column_superset.keys() %}\n {%- set relations_string -%}\n {%- for relation in relations -%}\n {{ relation.name }}\n {%- if not loop.last %}, {% endif -%}\n {%- endfor -%}\n {%- endset -%}\n\n {%- set error_message -%}\n There were no columns found to union for relations {{ relations_string }}\n {%- endset -%}\n\n {{ exceptions.raise_compiler_error(error_message) }}\n {%- endif -%}\n {%- endif -%}\n\n {%- for relation in relations %}\n\n (\n select\n\n cast({{ dbt_utils.string_literal(relation) }} as {{ dbt_utils.type_string() }}) as {{ source_column_name }},\n {% for col_name in ordered_column_names -%}\n\n {%- set col = column_superset[col_name] %}\n {%- set col_type = column_override.get(col.column, col.data_type) %}\n {%- set col_name = adapter.quote(col_name) if col_name in relation_columns[relation] else 'null' %}\n cast({{ col_name }} as {{ col_type }}) as {{ col.quoted }} {% if not loop.last %},{% endif -%}\n\n {%- endfor %}\n\n from {{ relation }}\n\n {% if where -%}\n where {{ where }}\n {%- endif %}\n )\n\n {% if not loop.last -%}\n union all\n {% endif -%}\n\n {%- endfor -%}\n\n{%- endmacro -%}", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.dbt_utils._is_relation", "macro.dbt_utils._is_ephemeral", "macro.dbt_utils.string_literal", "macro.dbt_utils.type_string"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1661544121.514318}, "macro.dbt_utils.group_by": {"unique_id": "macro.dbt_utils.group_by", "package_name": "dbt_utils", "root_path": "/Users/joseph.markiewicz/Documents/dbt_packages/ad_reporting/tiktok/dbt_tiktok_ads_source/integration_tests/dbt_packages/dbt_utils", "path": "macros/sql/groupby.sql", "original_file_path": "macros/sql/groupby.sql", "name": "group_by", "macro_sql": "{%- macro group_by(n) -%}\n {{ return(adapter.dispatch('group_by', 'dbt_utils')(n)) }}\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.dbt_utils.default__group_by"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1661544121.514859}, "macro.dbt_utils.default__group_by": {"unique_id": "macro.dbt_utils.default__group_by", "package_name": "dbt_utils", "root_path": "/Users/joseph.markiewicz/Documents/dbt_packages/ad_reporting/tiktok/dbt_tiktok_ads_source/integration_tests/dbt_packages/dbt_utils", "path": "macros/sql/groupby.sql", "original_file_path": "macros/sql/groupby.sql", "name": "default__group_by", "macro_sql": "\n\n{%- macro default__group_by(n) -%}\n\n group by {% for i in range(1, n + 1) -%}\n {{ i }}{{ ',' if not loop.last }} \n {%- endfor -%}\n\n{%- endmacro -%}", "resource_type": "macro", "tags": [], "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1661544121.515133}, "macro.dbt_utils.deduplicate": {"unique_id": "macro.dbt_utils.deduplicate", "package_name": "dbt_utils", "root_path": "/Users/joseph.markiewicz/Documents/dbt_packages/ad_reporting/tiktok/dbt_tiktok_ads_source/integration_tests/dbt_packages/dbt_utils", "path": "macros/sql/deduplicate.sql", "original_file_path": "macros/sql/deduplicate.sql", "name": "deduplicate", "macro_sql": "{%- macro deduplicate(relation, partition_by, order_by=none, relation_alias=none) -%}\n\n {%- set error_message_group_by -%}\nWarning: the `group_by` parameter of the `deduplicate` macro is no longer supported and will be deprecated in a future release of dbt-utils.\nUse `partition_by` instead.\nThe {{ model.package_name }}.{{ model.name }} model triggered this warning.\n {%- endset -%}\n\n {% if kwargs.get('group_by') %}\n {%- do exceptions.warn(error_message_group_by) -%}\n {%- endif -%}\n\n {%- set error_message_order_by -%}\nWarning: `order_by` as an optional parameter of the `deduplicate` macro is no longer supported and will be deprecated in a future release of dbt-utils.\nSupply a non-null value for `order_by` instead.\nThe {{ model.package_name }}.{{ model.name }} model triggered this warning.\n {%- endset -%}\n\n {% if not order_by %}\n {%- do exceptions.warn(error_message_order_by) -%}\n {%- endif -%}\n\n {%- set error_message_alias -%}\nWarning: the `relation_alias` parameter of the `deduplicate` macro is no longer supported and will be deprecated in a future release of dbt-utils.\nIf you were using `relation_alias` to point to a CTE previously then you can now pass the alias directly to `relation` instead.\nThe {{ model.package_name }}.{{ model.name }} model triggered this warning.\n {%- endset -%}\n\n {% if relation_alias %}\n {%- do exceptions.warn(error_message_alias) -%}\n {%- endif -%}\n\n {% set partition_by = partition_by or kwargs.get('group_by') %}\n {% set relation = relation_alias or relation %}\n {% set order_by = order_by or \"'1'\" %}\n\n {{ return(adapter.dispatch('deduplicate', 'dbt_utils')(relation, partition_by, order_by)) }}\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.dbt_utils.postgres__deduplicate"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1661544121.517783}, "macro.dbt_utils.default__deduplicate": {"unique_id": "macro.dbt_utils.default__deduplicate", "package_name": "dbt_utils", "root_path": "/Users/joseph.markiewicz/Documents/dbt_packages/ad_reporting/tiktok/dbt_tiktok_ads_source/integration_tests/dbt_packages/dbt_utils", "path": "macros/sql/deduplicate.sql", "original_file_path": "macros/sql/deduplicate.sql", "name": "default__deduplicate", "macro_sql": "\n\n{%- macro default__deduplicate(relation, partition_by, order_by) -%}\n\n with row_numbered as (\n select\n _inner.*,\n row_number() over (\n partition by {{ partition_by }}\n order by {{ order_by }}\n ) as rn\n from {{ relation }} as _inner\n )\n\n select\n distinct data.*\n from {{ relation }} as data\n {#\n -- Not all DBs will support natural joins but the ones that do include:\n -- Oracle, MySQL, SQLite, Redshift, Teradata, Materialize, Databricks\n -- Apache Spark, SingleStore, Vertica\n -- Those that do not appear to support natural joins include:\n -- SQLServer, Trino, Presto, Rockset, Athena\n #}\n natural join row_numbered\n where row_numbered.rn = 1\n\n{%- endmacro -%}\n\n", "resource_type": "macro", "tags": [], "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1661544121.5180402}, "macro.dbt_utils.redshift__deduplicate": {"unique_id": "macro.dbt_utils.redshift__deduplicate", "package_name": "dbt_utils", "root_path": "/Users/joseph.markiewicz/Documents/dbt_packages/ad_reporting/tiktok/dbt_tiktok_ads_source/integration_tests/dbt_packages/dbt_utils", "path": "macros/sql/deduplicate.sql", "original_file_path": "macros/sql/deduplicate.sql", "name": "redshift__deduplicate", "macro_sql": "{% macro redshift__deduplicate(relation, partition_by, order_by) -%}\n\n {{ return(dbt_utils.default__deduplicate(relation, partition_by, order_by=order_by)) }}\n\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.dbt_utils.default__deduplicate"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1661544121.518243}, "macro.dbt_utils.postgres__deduplicate": {"unique_id": "macro.dbt_utils.postgres__deduplicate", "package_name": "dbt_utils", "root_path": "/Users/joseph.markiewicz/Documents/dbt_packages/ad_reporting/tiktok/dbt_tiktok_ads_source/integration_tests/dbt_packages/dbt_utils", "path": "macros/sql/deduplicate.sql", "original_file_path": "macros/sql/deduplicate.sql", "name": "postgres__deduplicate", "macro_sql": "\n{%- macro postgres__deduplicate(relation, partition_by, order_by) -%}\n\n select\n distinct on ({{ partition_by }}) *\n from {{ relation }}\n order by {{ partition_by }}{{ ',' ~ order_by }}\n\n{%- endmacro -%}\n\n", "resource_type": "macro", "tags": [], "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1661544121.5184388}, "macro.dbt_utils.snowflake__deduplicate": {"unique_id": "macro.dbt_utils.snowflake__deduplicate", "package_name": "dbt_utils", "root_path": "/Users/joseph.markiewicz/Documents/dbt_packages/ad_reporting/tiktok/dbt_tiktok_ads_source/integration_tests/dbt_packages/dbt_utils", "path": "macros/sql/deduplicate.sql", "original_file_path": "macros/sql/deduplicate.sql", "name": "snowflake__deduplicate", "macro_sql": "\n{%- macro snowflake__deduplicate(relation, partition_by, order_by) -%}\n\n select *\n from {{ relation }}\n qualify\n row_number() over (\n partition by {{ partition_by }}\n order by {{ order_by }}\n ) = 1\n\n{%- endmacro -%}\n\n", "resource_type": "macro", "tags": [], "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1661544121.518605}, "macro.dbt_utils.bigquery__deduplicate": {"unique_id": "macro.dbt_utils.bigquery__deduplicate", "package_name": "dbt_utils", "root_path": "/Users/joseph.markiewicz/Documents/dbt_packages/ad_reporting/tiktok/dbt_tiktok_ads_source/integration_tests/dbt_packages/dbt_utils", "path": "macros/sql/deduplicate.sql", "original_file_path": "macros/sql/deduplicate.sql", "name": "bigquery__deduplicate", "macro_sql": "\n{%- macro bigquery__deduplicate(relation, partition_by, order_by) -%}\n\n select unique.*\n from (\n select\n array_agg (\n original\n order by {{ order_by }}\n limit 1\n )[offset(0)] unique\n from {{ relation }} original\n group by {{ partition_by }}\n )\n\n{%- endmacro -%}", "resource_type": "macro", "tags": [], "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1661544121.518775}, "macro.dbt_utils.surrogate_key": {"unique_id": "macro.dbt_utils.surrogate_key", "package_name": "dbt_utils", "root_path": "/Users/joseph.markiewicz/Documents/dbt_packages/ad_reporting/tiktok/dbt_tiktok_ads_source/integration_tests/dbt_packages/dbt_utils", "path": "macros/sql/surrogate_key.sql", "original_file_path": "macros/sql/surrogate_key.sql", "name": "surrogate_key", "macro_sql": "{%- macro surrogate_key(field_list) -%}\n {# needed for safe_add to allow for non-keyword arguments see SO post #}\n {# https://stackoverflow.com/questions/13944751/args-kwargs-in-jinja2-macros #}\n {% set frustrating_jinja_feature = varargs %}\n {{ return(adapter.dispatch('surrogate_key', 'dbt_utils')(field_list, *varargs)) }}\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.dbt_utils.default__surrogate_key"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1661544121.519476}, "macro.dbt_utils.default__surrogate_key": {"unique_id": "macro.dbt_utils.default__surrogate_key", "package_name": "dbt_utils", "root_path": "/Users/joseph.markiewicz/Documents/dbt_packages/ad_reporting/tiktok/dbt_tiktok_ads_source/integration_tests/dbt_packages/dbt_utils", "path": "macros/sql/surrogate_key.sql", "original_file_path": "macros/sql/surrogate_key.sql", "name": "default__surrogate_key", "macro_sql": "\n\n{%- macro default__surrogate_key(field_list) -%}\n\n{%- if varargs|length >= 1 or field_list is string %}\n\n{%- set error_message = '\nWarning: the `surrogate_key` macro now takes a single list argument instead of \\\nmultiple string arguments. Support for multiple string arguments will be \\\ndeprecated in a future release of dbt-utils. The {}.{} model triggered this warning. \\\n'.format(model.package_name, model.name) -%}\n\n{%- do exceptions.warn(error_message) -%}\n\n{# first argument is not included in varargs, so add first element to field_list_xf #}\n{%- set field_list_xf = [field_list] -%}\n\n{%- for field in varargs %}\n{%- set _ = field_list_xf.append(field) -%}\n{%- endfor -%}\n\n{%- else -%}\n\n{# if using list, just set field_list_xf as field_list #}\n{%- set field_list_xf = field_list -%}\n\n{%- endif -%}\n\n\n{%- set fields = [] -%}\n\n{%- for field in field_list_xf -%}\n\n {%- set _ = fields.append(\n \"coalesce(cast(\" ~ field ~ \" as \" ~ dbt_utils.type_string() ~ \"), '')\"\n ) -%}\n\n {%- if not loop.last %}\n {%- set _ = fields.append(\"'-'\") -%}\n {%- endif -%}\n\n{%- endfor -%}\n\n{{dbt_utils.hash(dbt_utils.concat(fields))}}\n\n{%- endmacro -%}", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.dbt_utils.type_string", "macro.dbt_utils.hash", "macro.dbt_utils.concat"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1661544121.520427}, "macro.dbt_utils.safe_add": {"unique_id": "macro.dbt_utils.safe_add", "package_name": "dbt_utils", "root_path": "/Users/joseph.markiewicz/Documents/dbt_packages/ad_reporting/tiktok/dbt_tiktok_ads_source/integration_tests/dbt_packages/dbt_utils", "path": "macros/sql/safe_add.sql", "original_file_path": "macros/sql/safe_add.sql", "name": "safe_add", "macro_sql": "{%- macro safe_add() -%}\n {# needed for safe_add to allow for non-keyword arguments see SO post #}\n {# https://stackoverflow.com/questions/13944751/args-kwargs-in-jinja2-macros #}\n {% set frustrating_jinja_feature = varargs %}\n {{ return(adapter.dispatch('safe_add', 'dbt_utils')(*varargs)) }}\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.dbt_utils.default__safe_add"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1661544121.5209112}, "macro.dbt_utils.default__safe_add": {"unique_id": "macro.dbt_utils.default__safe_add", "package_name": "dbt_utils", "root_path": "/Users/joseph.markiewicz/Documents/dbt_packages/ad_reporting/tiktok/dbt_tiktok_ads_source/integration_tests/dbt_packages/dbt_utils", "path": "macros/sql/safe_add.sql", "original_file_path": "macros/sql/safe_add.sql", "name": "default__safe_add", "macro_sql": "\n\n{%- macro default__safe_add() -%}\n\n{% set fields = [] %}\n\n{%- for field in varargs -%}\n\n {% do fields.append(\"coalesce(\" ~ field ~ \", 0)\") %}\n\n{%- endfor -%}\n\n{{ fields|join(' +\\n ') }}\n\n{%- endmacro -%}", "resource_type": "macro", "tags": [], "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1661544121.5212202}, "macro.dbt_utils.nullcheck": {"unique_id": "macro.dbt_utils.nullcheck", "package_name": "dbt_utils", "root_path": "/Users/joseph.markiewicz/Documents/dbt_packages/ad_reporting/tiktok/dbt_tiktok_ads_source/integration_tests/dbt_packages/dbt_utils", "path": "macros/sql/nullcheck.sql", "original_file_path": "macros/sql/nullcheck.sql", "name": "nullcheck", "macro_sql": "{% macro nullcheck(cols) %}\n {{ return(adapter.dispatch('nullcheck', 'dbt_utils')(cols)) }}\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.dbt_utils.default__nullcheck"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1661544121.521626}, "macro.dbt_utils.default__nullcheck": {"unique_id": "macro.dbt_utils.default__nullcheck", "package_name": "dbt_utils", "root_path": "/Users/joseph.markiewicz/Documents/dbt_packages/ad_reporting/tiktok/dbt_tiktok_ads_source/integration_tests/dbt_packages/dbt_utils", "path": "macros/sql/nullcheck.sql", "original_file_path": "macros/sql/nullcheck.sql", "name": "default__nullcheck", "macro_sql": "{% macro default__nullcheck(cols) %}\n{%- for col in cols %}\n\n {% if col.is_string() -%}\n\n nullif({{col.name}},'') as {{col.name}}\n\n {%- else -%}\n\n {{col.name}}\n\n {%- endif -%}\n\n{%- if not loop.last -%} , {%- endif -%}\n\n{%- endfor -%}\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1661544121.521955}, "macro.dbt_utils.get_tables_by_pattern_sql": {"unique_id": "macro.dbt_utils.get_tables_by_pattern_sql", "package_name": "dbt_utils", "root_path": "/Users/joseph.markiewicz/Documents/dbt_packages/ad_reporting/tiktok/dbt_tiktok_ads_source/integration_tests/dbt_packages/dbt_utils", "path": "macros/sql/get_tables_by_pattern_sql.sql", "original_file_path": "macros/sql/get_tables_by_pattern_sql.sql", "name": "get_tables_by_pattern_sql", "macro_sql": "{% macro get_tables_by_pattern_sql(schema_pattern, table_pattern, exclude='', database=target.database) %}\n {{ return(adapter.dispatch('get_tables_by_pattern_sql', 'dbt_utils')\n (schema_pattern, table_pattern, exclude, database)) }}\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.dbt_utils.default__get_tables_by_pattern_sql"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1661544121.523455}, "macro.dbt_utils.default__get_tables_by_pattern_sql": {"unique_id": "macro.dbt_utils.default__get_tables_by_pattern_sql", "package_name": "dbt_utils", "root_path": "/Users/joseph.markiewicz/Documents/dbt_packages/ad_reporting/tiktok/dbt_tiktok_ads_source/integration_tests/dbt_packages/dbt_utils", "path": "macros/sql/get_tables_by_pattern_sql.sql", "original_file_path": "macros/sql/get_tables_by_pattern_sql.sql", "name": "default__get_tables_by_pattern_sql", "macro_sql": "{% macro default__get_tables_by_pattern_sql(schema_pattern, table_pattern, exclude='', database=target.database) %}\n\n select distinct\n table_schema as \"table_schema\",\n table_name as \"table_name\",\n {{ dbt_utils.get_table_types_sql() }}\n from {{ database }}.information_schema.tables\n where table_schema ilike '{{ schema_pattern }}'\n and table_name ilike '{{ table_pattern }}'\n and table_name not ilike '{{ exclude }}'\n\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.dbt_utils.get_table_types_sql"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1661544121.523732}, "macro.dbt_utils.bigquery__get_tables_by_pattern_sql": {"unique_id": "macro.dbt_utils.bigquery__get_tables_by_pattern_sql", "package_name": "dbt_utils", "root_path": "/Users/joseph.markiewicz/Documents/dbt_packages/ad_reporting/tiktok/dbt_tiktok_ads_source/integration_tests/dbt_packages/dbt_utils", "path": "macros/sql/get_tables_by_pattern_sql.sql", "original_file_path": "macros/sql/get_tables_by_pattern_sql.sql", "name": "bigquery__get_tables_by_pattern_sql", "macro_sql": "{% macro bigquery__get_tables_by_pattern_sql(schema_pattern, table_pattern, exclude='', database=target.database) %}\n\n {% if '%' in schema_pattern %}\n {% set schemata=dbt_utils._bigquery__get_matching_schemata(schema_pattern, database) %}\n {% else %}\n {% set schemata=[schema_pattern] %}\n {% endif %}\n\n {% set sql %}\n {% for schema in schemata %}\n select distinct\n table_schema,\n table_name,\n {{ dbt_utils.get_table_types_sql() }}\n\n from {{ adapter.quote(database) }}.{{ schema }}.INFORMATION_SCHEMA.TABLES\n where lower(table_name) like lower ('{{ table_pattern }}')\n and lower(table_name) not like lower ('{{ exclude }}')\n\n {% if not loop.last %} union all {% endif %}\n\n {% endfor %}\n {% endset %}\n\n {{ return(sql) }}\n\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.dbt_utils._bigquery__get_matching_schemata", "macro.dbt_utils.get_table_types_sql"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1661544121.524747}, "macro.dbt_utils._bigquery__get_matching_schemata": {"unique_id": "macro.dbt_utils._bigquery__get_matching_schemata", "package_name": "dbt_utils", "root_path": "/Users/joseph.markiewicz/Documents/dbt_packages/ad_reporting/tiktok/dbt_tiktok_ads_source/integration_tests/dbt_packages/dbt_utils", "path": "macros/sql/get_tables_by_pattern_sql.sql", "original_file_path": "macros/sql/get_tables_by_pattern_sql.sql", "name": "_bigquery__get_matching_schemata", "macro_sql": "{% macro _bigquery__get_matching_schemata(schema_pattern, database) %}\n {% if execute %}\n\n {% set sql %}\n select schema_name from {{ adapter.quote(database) }}.INFORMATION_SCHEMA.SCHEMATA\n where lower(schema_name) like lower('{{ schema_pattern }}')\n {% endset %}\n\n {% set results=run_query(sql) %}\n\n {% set schemata=results.columns['schema_name'].values() %}\n\n {{ return(schemata) }}\n\n {% else %}\n\n {{ return([]) }}\n\n {% endif %}\n\n\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.dbt.run_query"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1661544121.5252638}, "macro.dbt_utils.get_column_values": {"unique_id": "macro.dbt_utils.get_column_values", "package_name": "dbt_utils", "root_path": "/Users/joseph.markiewicz/Documents/dbt_packages/ad_reporting/tiktok/dbt_tiktok_ads_source/integration_tests/dbt_packages/dbt_utils", "path": "macros/sql/get_column_values.sql", "original_file_path": "macros/sql/get_column_values.sql", "name": "get_column_values", "macro_sql": "{% macro get_column_values(table, column, order_by='count(*) desc', max_records=none, default=none, where=none) -%}\n {{ return(adapter.dispatch('get_column_values', 'dbt_utils')(table, column, order_by, max_records, default, where)) }}\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.dbt_utils.default__get_column_values"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1661544121.526409}, "macro.dbt_utils.default__get_column_values": {"unique_id": "macro.dbt_utils.default__get_column_values", "package_name": "dbt_utils", "root_path": "/Users/joseph.markiewicz/Documents/dbt_packages/ad_reporting/tiktok/dbt_tiktok_ads_source/integration_tests/dbt_packages/dbt_utils", "path": "macros/sql/get_column_values.sql", "original_file_path": "macros/sql/get_column_values.sql", "name": "default__get_column_values", "macro_sql": "{% macro default__get_column_values(table, column, order_by='count(*) desc', max_records=none, default=none, where=none) -%}\n {#-- Prevent querying of db in parsing mode. This works because this macro does not create any new refs. #}\n {%- if not execute -%}\n {% set default = [] if not default %}\n {{ return(default) }}\n {% endif %}\n\n {%- do dbt_utils._is_ephemeral(table, 'get_column_values') -%}\n\n {# Not all relations are tables. Renaming for internal clarity without breaking functionality for anyone using named arguments #}\n {# TODO: Change the method signature in a future 0.x.0 release #}\n {%- set target_relation = table -%}\n\n {# adapter.load_relation is a convenience wrapper to avoid building a Relation when we already have one #}\n {% set relation_exists = (load_relation(target_relation)) is not none %}\n\n {%- call statement('get_column_values', fetch_result=true) %}\n\n {%- if not relation_exists and default is none -%}\n\n {{ exceptions.raise_compiler_error(\"In get_column_values(): relation \" ~ target_relation ~ \" does not exist and no default value was provided.\") }}\n\n {%- elif not relation_exists and default is not none -%}\n\n {{ log(\"Relation \" ~ target_relation ~ \" does not exist. Returning the default value: \" ~ default) }}\n\n {{ return(default) }}\n\n {%- else -%}\n\n\n select\n {{ column }} as value\n\n from {{ target_relation }}\n\n {% if where is not none %}\n where {{ where }}\n {% endif %}\n\n group by {{ column }}\n order by {{ order_by }}\n\n {% if max_records is not none %}\n limit {{ max_records }}\n {% endif %}\n\n {% endif %}\n\n {%- endcall -%}\n\n {%- set value_list = load_result('get_column_values') -%}\n\n {%- if value_list and value_list['data'] -%}\n {%- set values = value_list['data'] | map(attribute=0) | list %}\n {{ return(values) }}\n {%- else -%}\n {{ return(default) }}\n {%- endif -%}\n\n{%- endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.dbt_utils._is_ephemeral", "macro.dbt.load_relation", "macro.dbt.statement"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1661544121.527914}, "macro.dbt_utils.pivot": {"unique_id": "macro.dbt_utils.pivot", "package_name": "dbt_utils", "root_path": "/Users/joseph.markiewicz/Documents/dbt_packages/ad_reporting/tiktok/dbt_tiktok_ads_source/integration_tests/dbt_packages/dbt_utils", "path": "macros/sql/pivot.sql", "original_file_path": "macros/sql/pivot.sql", "name": "pivot", "macro_sql": "{% macro pivot(column,\n values,\n alias=True,\n agg='sum',\n cmp='=',\n prefix='',\n suffix='',\n then_value=1,\n else_value=0,\n quote_identifiers=True,\n distinct=False) %}\n {{ return(adapter.dispatch('pivot', 'dbt_utils')(column, values, alias, agg, cmp, prefix, suffix, then_value, else_value, quote_identifiers, distinct)) }}\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.dbt_utils.default__pivot"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1661544121.5289972}, "macro.dbt_utils.default__pivot": {"unique_id": "macro.dbt_utils.default__pivot", "package_name": "dbt_utils", "root_path": "/Users/joseph.markiewicz/Documents/dbt_packages/ad_reporting/tiktok/dbt_tiktok_ads_source/integration_tests/dbt_packages/dbt_utils", "path": "macros/sql/pivot.sql", "original_file_path": "macros/sql/pivot.sql", "name": "default__pivot", "macro_sql": "{% macro default__pivot(column,\n values,\n alias=True,\n agg='sum',\n cmp='=',\n prefix='',\n suffix='',\n then_value=1,\n else_value=0,\n quote_identifiers=True,\n distinct=False) %}\n {% for value in values %}\n {{ agg }}(\n {% if distinct %} distinct {% endif %}\n case\n when {{ column }} {{ cmp }} '{{ dbt_utils.escape_single_quotes(value) }}'\n then {{ then_value }}\n else {{ else_value }}\n end\n )\n {% if alias %}\n {% if quote_identifiers %}\n as {{ adapter.quote(prefix ~ value ~ suffix) }}\n {% else %}\n as {{ dbt_utils.slugify(prefix ~ value ~ suffix) }}\n {% endif %}\n {% endif %}\n {% if not loop.last %},{% endif %}\n {% endfor %}\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.dbt_utils.escape_single_quotes", "macro.dbt_utils.slugify"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1661544121.52982}, "macro.dbt_utils.get_filtered_columns_in_relation": {"unique_id": "macro.dbt_utils.get_filtered_columns_in_relation", "package_name": "dbt_utils", "root_path": "/Users/joseph.markiewicz/Documents/dbt_packages/ad_reporting/tiktok/dbt_tiktok_ads_source/integration_tests/dbt_packages/dbt_utils", "path": "macros/sql/get_filtered_columns_in_relation.sql", "original_file_path": "macros/sql/get_filtered_columns_in_relation.sql", "name": "get_filtered_columns_in_relation", "macro_sql": "{% macro get_filtered_columns_in_relation(from, except=[]) -%}\n {{ return(adapter.dispatch('get_filtered_columns_in_relation', 'dbt_utils')(from, except)) }}\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.dbt_utils.default__get_filtered_columns_in_relation"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1661544121.530345}, "macro.dbt_utils.default__get_filtered_columns_in_relation": {"unique_id": "macro.dbt_utils.default__get_filtered_columns_in_relation", "package_name": "dbt_utils", "root_path": "/Users/joseph.markiewicz/Documents/dbt_packages/ad_reporting/tiktok/dbt_tiktok_ads_source/integration_tests/dbt_packages/dbt_utils", "path": "macros/sql/get_filtered_columns_in_relation.sql", "original_file_path": "macros/sql/get_filtered_columns_in_relation.sql", "name": "default__get_filtered_columns_in_relation", "macro_sql": "{% macro default__get_filtered_columns_in_relation(from, except=[]) -%}\n {%- do dbt_utils._is_relation(from, 'get_filtered_columns_in_relation') -%}\n {%- do dbt_utils._is_ephemeral(from, 'get_filtered_columns_in_relation') -%}\n\n {# -- Prevent querying of db in parsing mode. This works because this macro does not create any new refs. #}\n {%- if not execute -%}\n {{ return('') }}\n {% endif %}\n\n {%- set include_cols = [] %}\n {%- set cols = adapter.get_columns_in_relation(from) -%}\n {%- set except = except | map(\"lower\") | list %}\n {%- for col in cols -%}\n {%- if col.column|lower not in except -%}\n {% do include_cols.append(col.column) %}\n {%- endif %}\n {%- endfor %}\n\n {{ return(include_cols) }}\n\n{%- endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.dbt_utils._is_relation", "macro.dbt_utils._is_ephemeral"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1661544121.531126}, "macro.dbt_utils.get_query_results_as_dict": {"unique_id": "macro.dbt_utils.get_query_results_as_dict", "package_name": "dbt_utils", "root_path": "/Users/joseph.markiewicz/Documents/dbt_packages/ad_reporting/tiktok/dbt_tiktok_ads_source/integration_tests/dbt_packages/dbt_utils", "path": "macros/sql/get_query_results_as_dict.sql", "original_file_path": "macros/sql/get_query_results_as_dict.sql", "name": "get_query_results_as_dict", "macro_sql": "{% macro get_query_results_as_dict(query) %}\n {{ return(adapter.dispatch('get_query_results_as_dict', 'dbt_utils')(query)) }}\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.dbt_utils.default__get_query_results_as_dict"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1661544121.531602}, "macro.dbt_utils.default__get_query_results_as_dict": {"unique_id": "macro.dbt_utils.default__get_query_results_as_dict", "package_name": "dbt_utils", "root_path": "/Users/joseph.markiewicz/Documents/dbt_packages/ad_reporting/tiktok/dbt_tiktok_ads_source/integration_tests/dbt_packages/dbt_utils", "path": "macros/sql/get_query_results_as_dict.sql", "original_file_path": "macros/sql/get_query_results_as_dict.sql", "name": "default__get_query_results_as_dict", "macro_sql": "{% macro default__get_query_results_as_dict(query) %}\n\n{# This macro returns a dictionary of the form {column_name: (tuple_of_results)} #}\n\n {%- call statement('get_query_results', fetch_result=True,auto_begin=false) -%}\n\n {{ query }}\n\n {%- endcall -%}\n\n {% set sql_results={} %}\n\n {%- if execute -%}\n {% set sql_results_table = load_result('get_query_results').table.columns %}\n {% for column_name, column in sql_results_table.items() %}\n {% do sql_results.update({column_name: column.values()}) %}\n {% endfor %}\n {%- endif -%}\n\n {{ return(sql_results) }}\n\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.dbt.statement"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1661544121.532198}, "macro.dbt_utils.get_table_types_sql": {"unique_id": "macro.dbt_utils.get_table_types_sql", "package_name": "dbt_utils", "root_path": "/Users/joseph.markiewicz/Documents/dbt_packages/ad_reporting/tiktok/dbt_tiktok_ads_source/integration_tests/dbt_packages/dbt_utils", "path": "macros/sql/get_table_types_sql.sql", "original_file_path": "macros/sql/get_table_types_sql.sql", "name": "get_table_types_sql", "macro_sql": "{%- macro get_table_types_sql() -%}\n {{ return(adapter.dispatch('get_table_types_sql', 'dbt_utils')()) }}\n{%- endmacro -%}\n\n", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.dbt_utils.postgres__get_table_types_sql"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1661544121.5327208}, "macro.dbt_utils.default__get_table_types_sql": {"unique_id": "macro.dbt_utils.default__get_table_types_sql", "package_name": "dbt_utils", "root_path": "/Users/joseph.markiewicz/Documents/dbt_packages/ad_reporting/tiktok/dbt_tiktok_ads_source/integration_tests/dbt_packages/dbt_utils", "path": "macros/sql/get_table_types_sql.sql", "original_file_path": "macros/sql/get_table_types_sql.sql", "name": "default__get_table_types_sql", "macro_sql": "{% macro default__get_table_types_sql() %}\n case table_type\n when 'BASE TABLE' then 'table'\n when 'EXTERNAL TABLE' then 'external'\n when 'MATERIALIZED VIEW' then 'materializedview'\n else lower(table_type)\n end as \"table_type\"\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1661544121.5328078}, "macro.dbt_utils.postgres__get_table_types_sql": {"unique_id": "macro.dbt_utils.postgres__get_table_types_sql", "package_name": "dbt_utils", "root_path": "/Users/joseph.markiewicz/Documents/dbt_packages/ad_reporting/tiktok/dbt_tiktok_ads_source/integration_tests/dbt_packages/dbt_utils", "path": "macros/sql/get_table_types_sql.sql", "original_file_path": "macros/sql/get_table_types_sql.sql", "name": "postgres__get_table_types_sql", "macro_sql": "{% macro postgres__get_table_types_sql() %}\n case table_type\n when 'BASE TABLE' then 'table'\n when 'FOREIGN' then 'external'\n when 'MATERIALIZED VIEW' then 'materializedview'\n else lower(table_type)\n end as \"table_type\"\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1661544121.53289}, "macro.dbt_utils.bigquery__get_table_types_sql": {"unique_id": "macro.dbt_utils.bigquery__get_table_types_sql", "package_name": "dbt_utils", "root_path": "/Users/joseph.markiewicz/Documents/dbt_packages/ad_reporting/tiktok/dbt_tiktok_ads_source/integration_tests/dbt_packages/dbt_utils", "path": "macros/sql/get_table_types_sql.sql", "original_file_path": "macros/sql/get_table_types_sql.sql", "name": "bigquery__get_table_types_sql", "macro_sql": "{% macro bigquery__get_table_types_sql() %}\n case table_type\n when 'BASE TABLE' then 'table'\n when 'EXTERNAL TABLE' then 'external'\n when 'MATERIALIZED VIEW' then 'materializedview'\n else lower(table_type)\n end as `table_type`\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1661544121.532969}, "macro.dbt_utils.degrees_to_radians": {"unique_id": "macro.dbt_utils.degrees_to_radians", "package_name": "dbt_utils", "root_path": "/Users/joseph.markiewicz/Documents/dbt_packages/ad_reporting/tiktok/dbt_tiktok_ads_source/integration_tests/dbt_packages/dbt_utils", "path": "macros/sql/haversine_distance.sql", "original_file_path": "macros/sql/haversine_distance.sql", "name": "degrees_to_radians", "macro_sql": "{% macro degrees_to_radians(degrees) -%}\n acos(-1) * {{degrees}} / 180\n{%- endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1661544121.534027}, "macro.dbt_utils.haversine_distance": {"unique_id": "macro.dbt_utils.haversine_distance", "package_name": "dbt_utils", "root_path": "/Users/joseph.markiewicz/Documents/dbt_packages/ad_reporting/tiktok/dbt_tiktok_ads_source/integration_tests/dbt_packages/dbt_utils", "path": "macros/sql/haversine_distance.sql", "original_file_path": "macros/sql/haversine_distance.sql", "name": "haversine_distance", "macro_sql": "{% macro haversine_distance(lat1, lon1, lat2, lon2, unit='mi') -%}\n {{ return(adapter.dispatch('haversine_distance', 'dbt_utils')(lat1,lon1,lat2,lon2,unit)) }}\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.dbt_utils.default__haversine_distance"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1661544121.5343099}, "macro.dbt_utils.default__haversine_distance": {"unique_id": "macro.dbt_utils.default__haversine_distance", "package_name": "dbt_utils", "root_path": "/Users/joseph.markiewicz/Documents/dbt_packages/ad_reporting/tiktok/dbt_tiktok_ads_source/integration_tests/dbt_packages/dbt_utils", "path": "macros/sql/haversine_distance.sql", "original_file_path": "macros/sql/haversine_distance.sql", "name": "default__haversine_distance", "macro_sql": "{% macro default__haversine_distance(lat1, lon1, lat2, lon2, unit='mi') -%}\n{%- if unit == 'mi' %}\n {% set conversion_rate = 1 %}\n{% elif unit == 'km' %}\n {% set conversion_rate = 1.60934 %}\n{% else %}\n {{ exceptions.raise_compiler_error(\"unit input must be one of 'mi' or 'km'. Got \" ~ unit) }}\n{% endif %}\n\n 2 * 3961 * asin(sqrt(power((sin(radians(({{ lat2 }} - {{ lat1 }}) / 2))), 2) +\n cos(radians({{lat1}})) * cos(radians({{lat2}})) *\n power((sin(radians(({{ lon2 }} - {{ lon1 }}) / 2))), 2))) * {{ conversion_rate }}\n\n{%- endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1661544121.535114}, "macro.dbt_utils.bigquery__haversine_distance": {"unique_id": "macro.dbt_utils.bigquery__haversine_distance", "package_name": "dbt_utils", "root_path": "/Users/joseph.markiewicz/Documents/dbt_packages/ad_reporting/tiktok/dbt_tiktok_ads_source/integration_tests/dbt_packages/dbt_utils", "path": "macros/sql/haversine_distance.sql", "original_file_path": "macros/sql/haversine_distance.sql", "name": "bigquery__haversine_distance", "macro_sql": "{% macro bigquery__haversine_distance(lat1, lon1, lat2, lon2, unit='mi') -%}\n{% set radians_lat1 = dbt_utils.degrees_to_radians(lat1) %}\n{% set radians_lat2 = dbt_utils.degrees_to_radians(lat2) %}\n{% set radians_lon1 = dbt_utils.degrees_to_radians(lon1) %}\n{% set radians_lon2 = dbt_utils.degrees_to_radians(lon2) %}\n{%- if unit == 'mi' %}\n {% set conversion_rate = 1 %}\n{% elif unit == 'km' %}\n {% set conversion_rate = 1.60934 %}\n{% else %}\n {{ exceptions.raise_compiler_error(\"unit input must be one of 'mi' or 'km'. Got \" ~ unit) }}\n{% endif %}\n 2 * 3961 * asin(sqrt(power(sin(({{ radians_lat2 }} - {{ radians_lat1 }}) / 2), 2) +\n cos({{ radians_lat1 }}) * cos({{ radians_lat2 }}) *\n power(sin(({{ radians_lon2 }} - {{ radians_lon1 }}) / 2), 2))) * {{ conversion_rate }}\n\n{%- endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.dbt_utils.degrees_to_radians"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1661544121.535991}, "macro.spark_utils.get_tables": {"unique_id": "macro.spark_utils.get_tables", "package_name": "spark_utils", "root_path": "/Users/joseph.markiewicz/Documents/dbt_packages/ad_reporting/tiktok/dbt_tiktok_ads_source/integration_tests/dbt_packages/spark_utils", "path": "macros/maintenance_operation.sql", "original_file_path": "macros/maintenance_operation.sql", "name": "get_tables", "macro_sql": "{% macro get_tables(table_regex_pattern='.*') %}\n\n {% set tables = [] %}\n {% for database in spark__list_schemas('not_used') %}\n {% for table in spark__list_relations_without_caching(database[0]) %}\n {% set db_tablename = database[0] ~ \".\" ~ table[1] %}\n {% set is_match = modules.re.match(table_regex_pattern, db_tablename) %}\n {% if is_match %}\n {% call statement('table_detail', fetch_result=True) -%}\n describe extended {{ db_tablename }}\n {% endcall %}\n\n {% set table_type = load_result('table_detail').table|reverse|selectattr(0, 'in', ('type', 'TYPE', 'Type'))|first %}\n {% if table_type[1]|lower != 'view' %}\n {{ tables.append(db_tablename) }}\n {% endif %}\n {% endif %}\n {% endfor %}\n {% endfor %}\n {{ return(tables) }}\n\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.dbt.statement"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1661544121.540967}, "macro.spark_utils.get_delta_tables": {"unique_id": "macro.spark_utils.get_delta_tables", "package_name": "spark_utils", "root_path": "/Users/joseph.markiewicz/Documents/dbt_packages/ad_reporting/tiktok/dbt_tiktok_ads_source/integration_tests/dbt_packages/spark_utils", "path": "macros/maintenance_operation.sql", "original_file_path": "macros/maintenance_operation.sql", "name": "get_delta_tables", "macro_sql": "{% macro get_delta_tables(table_regex_pattern='.*') %}\n\n {% set delta_tables = [] %}\n {% for db_tablename in get_tables(table_regex_pattern) %}\n {% call statement('table_detail', fetch_result=True) -%}\n describe extended {{ db_tablename }}\n {% endcall %}\n\n {% set table_type = load_result('table_detail').table|reverse|selectattr(0, 'in', ('provider', 'PROVIDER', 'Provider'))|first %}\n {% if table_type[1]|lower == 'delta' %}\n {{ delta_tables.append(db_tablename) }}\n {% endif %}\n {% endfor %}\n {{ return(delta_tables) }}\n\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.spark_utils.get_tables", "macro.dbt.statement"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1661544121.541676}, "macro.spark_utils.get_statistic_columns": {"unique_id": "macro.spark_utils.get_statistic_columns", "package_name": "spark_utils", "root_path": "/Users/joseph.markiewicz/Documents/dbt_packages/ad_reporting/tiktok/dbt_tiktok_ads_source/integration_tests/dbt_packages/spark_utils", "path": "macros/maintenance_operation.sql", "original_file_path": "macros/maintenance_operation.sql", "name": "get_statistic_columns", "macro_sql": "{% macro get_statistic_columns(table) %}\n\n {% call statement('input_columns', fetch_result=True) %}\n SHOW COLUMNS IN {{ table }}\n {% endcall %}\n {% set input_columns = load_result('input_columns').table %}\n\n {% set output_columns = [] %}\n {% for column in input_columns %}\n {% call statement('column_information', fetch_result=True) %}\n DESCRIBE TABLE {{ table }} `{{ column[0] }}`\n {% endcall %}\n {% if not load_result('column_information').table[1][1].startswith('struct') and not load_result('column_information').table[1][1].startswith('array') %}\n {{ output_columns.append('`' ~ column[0] ~ '`') }}\n {% endif %}\n {% endfor %}\n {{ return(output_columns) }}\n\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.dbt.statement"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1661544121.542588}, "macro.spark_utils.spark_optimize_delta_tables": {"unique_id": "macro.spark_utils.spark_optimize_delta_tables", "package_name": "spark_utils", "root_path": "/Users/joseph.markiewicz/Documents/dbt_packages/ad_reporting/tiktok/dbt_tiktok_ads_source/integration_tests/dbt_packages/spark_utils", "path": "macros/maintenance_operation.sql", "original_file_path": "macros/maintenance_operation.sql", "name": "spark_optimize_delta_tables", "macro_sql": "{% macro spark_optimize_delta_tables(table_regex_pattern='.*') %}\n\n {% for table in get_delta_tables(table_regex_pattern) %}\n {% set start=modules.datetime.datetime.now() %}\n {% set message_prefix=loop.index ~ \" of \" ~ loop.length %}\n {{ dbt_utils.log_info(message_prefix ~ \" Optimizing \" ~ table) }}\n {% do run_query(\"optimize \" ~ table) %}\n {% set end=modules.datetime.datetime.now() %}\n {% set total_seconds = (end - start).total_seconds() | round(2) %}\n {{ dbt_utils.log_info(message_prefix ~ \" Finished \" ~ table ~ \" in \" ~ total_seconds ~ \"s\") }}\n {% endfor %}\n\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.spark_utils.get_delta_tables", "macro.dbt_utils.log_info", "macro.dbt.run_query"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1661544121.54335}, "macro.spark_utils.spark_vacuum_delta_tables": {"unique_id": "macro.spark_utils.spark_vacuum_delta_tables", "package_name": "spark_utils", "root_path": "/Users/joseph.markiewicz/Documents/dbt_packages/ad_reporting/tiktok/dbt_tiktok_ads_source/integration_tests/dbt_packages/spark_utils", "path": "macros/maintenance_operation.sql", "original_file_path": "macros/maintenance_operation.sql", "name": "spark_vacuum_delta_tables", "macro_sql": "{% macro spark_vacuum_delta_tables(table_regex_pattern='.*') %}\n\n {% for table in get_delta_tables(table_regex_pattern) %}\n {% set start=modules.datetime.datetime.now() %}\n {% set message_prefix=loop.index ~ \" of \" ~ loop.length %}\n {{ dbt_utils.log_info(message_prefix ~ \" Vacuuming \" ~ table) }}\n {% do run_query(\"vacuum \" ~ table) %}\n {% set end=modules.datetime.datetime.now() %}\n {% set total_seconds = (end - start).total_seconds() | round(2) %}\n {{ dbt_utils.log_info(message_prefix ~ \" Finished \" ~ table ~ \" in \" ~ total_seconds ~ \"s\") }}\n {% endfor %}\n\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.spark_utils.get_delta_tables", "macro.dbt_utils.log_info", "macro.dbt.run_query"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1661544121.544107}, "macro.spark_utils.spark_analyze_tables": {"unique_id": "macro.spark_utils.spark_analyze_tables", "package_name": "spark_utils", "root_path": "/Users/joseph.markiewicz/Documents/dbt_packages/ad_reporting/tiktok/dbt_tiktok_ads_source/integration_tests/dbt_packages/spark_utils", "path": "macros/maintenance_operation.sql", "original_file_path": "macros/maintenance_operation.sql", "name": "spark_analyze_tables", "macro_sql": "{% macro spark_analyze_tables(table_regex_pattern='.*') %}\n\n {% for table in get_tables(table_regex_pattern) %}\n {% set start=modules.datetime.datetime.now() %}\n {% set columns = get_statistic_columns(table) | join(',') %}\n {% set message_prefix=loop.index ~ \" of \" ~ loop.length %}\n {{ dbt_utils.log_info(message_prefix ~ \" Analyzing \" ~ table) }}\n {% if columns != '' %}\n {% do run_query(\"analyze table \" ~ table ~ \" compute statistics for columns \" ~ columns) %}\n {% endif %}\n {% set end=modules.datetime.datetime.now() %}\n {% set total_seconds = (end - start).total_seconds() | round(2) %}\n {{ dbt_utils.log_info(message_prefix ~ \" Finished \" ~ table ~ \" in \" ~ total_seconds ~ \"s\") }}\n {% endfor %}\n\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.spark_utils.get_tables", "macro.spark_utils.get_statistic_columns", "macro.dbt_utils.log_info", "macro.dbt.run_query"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1661544121.5450282}, "macro.spark_utils.spark__concat": {"unique_id": "macro.spark_utils.spark__concat", "package_name": "spark_utils", "root_path": "/Users/joseph.markiewicz/Documents/dbt_packages/ad_reporting/tiktok/dbt_tiktok_ads_source/integration_tests/dbt_packages/spark_utils", "path": "macros/dbt_utils/cross_db_utils/concat.sql", "original_file_path": "macros/dbt_utils/cross_db_utils/concat.sql", "name": "spark__concat", "macro_sql": "{% macro spark__concat(fields) -%}\n concat({{ fields|join(', ') }})\n{%- endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1661544121.545331}, "macro.spark_utils.spark__type_numeric": {"unique_id": "macro.spark_utils.spark__type_numeric", "package_name": "spark_utils", "root_path": "/Users/joseph.markiewicz/Documents/dbt_packages/ad_reporting/tiktok/dbt_tiktok_ads_source/integration_tests/dbt_packages/spark_utils", "path": "macros/dbt_utils/cross_db_utils/datatypes.sql", "original_file_path": "macros/dbt_utils/cross_db_utils/datatypes.sql", "name": "spark__type_numeric", "macro_sql": "{% macro spark__type_numeric() %}\n decimal(28, 6)\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1661544121.545515}, "macro.spark_utils.spark__dateadd": {"unique_id": "macro.spark_utils.spark__dateadd", "package_name": "spark_utils", "root_path": "/Users/joseph.markiewicz/Documents/dbt_packages/ad_reporting/tiktok/dbt_tiktok_ads_source/integration_tests/dbt_packages/spark_utils", "path": "macros/dbt_utils/cross_db_utils/dateadd.sql", "original_file_path": "macros/dbt_utils/cross_db_utils/dateadd.sql", "name": "spark__dateadd", "macro_sql": "{% macro spark__dateadd(datepart, interval, from_date_or_timestamp) %}\n\n {%- set clock_component -%}\n {# make sure the dates + timestamps are real, otherwise raise an error asap #}\n to_unix_timestamp({{ spark_utils.assert_not_null('to_timestamp', from_date_or_timestamp) }})\n - to_unix_timestamp({{ spark_utils.assert_not_null('date', from_date_or_timestamp) }})\n {%- endset -%}\n\n {%- if datepart in ['day', 'week'] -%}\n \n {%- set multiplier = 7 if datepart == 'week' else 1 -%}\n\n to_timestamp(\n to_unix_timestamp(\n date_add(\n {{ spark_utils.assert_not_null('date', from_date_or_timestamp) }},\n cast({{interval}} * {{multiplier}} as int)\n )\n ) + {{clock_component}}\n )\n\n {%- elif datepart in ['month', 'quarter', 'year'] -%}\n \n {%- set multiplier -%} \n {%- if datepart == 'month' -%} 1\n {%- elif datepart == 'quarter' -%} 3\n {%- elif datepart == 'year' -%} 12\n {%- endif -%}\n {%- endset -%}\n\n to_timestamp(\n to_unix_timestamp(\n add_months(\n {{ spark_utils.assert_not_null('date', from_date_or_timestamp) }},\n cast({{interval}} * {{multiplier}} as int)\n )\n ) + {{clock_component}}\n )\n\n {%- elif datepart in ('hour', 'minute', 'second', 'millisecond', 'microsecond') -%}\n \n {%- set multiplier -%} \n {%- if datepart == 'hour' -%} 3600\n {%- elif datepart == 'minute' -%} 60\n {%- elif datepart == 'second' -%} 1\n {%- elif datepart == 'millisecond' -%} (1/1000000)\n {%- elif datepart == 'microsecond' -%} (1/1000000)\n {%- endif -%}\n {%- endset -%}\n\n to_timestamp(\n {{ spark_utils.assert_not_null('to_unix_timestamp', from_date_or_timestamp) }}\n + cast({{interval}} * {{multiplier}} as int)\n )\n\n {%- else -%}\n\n {{ exceptions.raise_compiler_error(\"macro dateadd not implemented for datepart ~ '\" ~ datepart ~ \"' ~ on Spark\") }}\n\n {%- endif -%}\n\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.spark_utils.assert_not_null"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1661544121.548506}, "macro.spark_utils.spark__datediff": {"unique_id": "macro.spark_utils.spark__datediff", "package_name": "spark_utils", "root_path": "/Users/joseph.markiewicz/Documents/dbt_packages/ad_reporting/tiktok/dbt_tiktok_ads_source/integration_tests/dbt_packages/spark_utils", "path": "macros/dbt_utils/cross_db_utils/datediff.sql", "original_file_path": "macros/dbt_utils/cross_db_utils/datediff.sql", "name": "spark__datediff", "macro_sql": "{% macro spark__datediff(first_date, second_date, datepart) %}\n\n {%- if datepart in ['day', 'week', 'month', 'quarter', 'year'] -%}\n \n {# make sure the dates are real, otherwise raise an error asap #}\n {% set first_date = spark_utils.assert_not_null('date', first_date) %}\n {% set second_date = spark_utils.assert_not_null('date', second_date) %}\n \n {%- endif -%}\n \n {%- if datepart == 'day' -%}\n \n datediff({{second_date}}, {{first_date}})\n \n {%- elif datepart == 'week' -%}\n \n case when {{first_date}} < {{second_date}}\n then floor(datediff({{second_date}}, {{first_date}})/7)\n else ceil(datediff({{second_date}}, {{first_date}})/7)\n end\n \n -- did we cross a week boundary (Sunday)?\n + case\n when {{first_date}} < {{second_date}} and dayofweek({{second_date}}) < dayofweek({{first_date}}) then 1\n when {{first_date}} > {{second_date}} and dayofweek({{second_date}}) > dayofweek({{first_date}}) then -1\n else 0 end\n\n {%- elif datepart == 'month' -%}\n\n case when {{first_date}} < {{second_date}}\n then floor(months_between(date({{second_date}}), date({{first_date}})))\n else ceil(months_between(date({{second_date}}), date({{first_date}})))\n end\n \n -- did we cross a month boundary?\n + case\n when {{first_date}} < {{second_date}} and dayofmonth({{second_date}}) < dayofmonth({{first_date}}) then 1\n when {{first_date}} > {{second_date}} and dayofmonth({{second_date}}) > dayofmonth({{first_date}}) then -1\n else 0 end\n \n {%- elif datepart == 'quarter' -%}\n \n case when {{first_date}} < {{second_date}}\n then floor(months_between(date({{second_date}}), date({{first_date}}))/3)\n else ceil(months_between(date({{second_date}}), date({{first_date}}))/3)\n end\n \n -- did we cross a quarter boundary?\n + case\n when {{first_date}} < {{second_date}} and (\n (dayofyear({{second_date}}) - (quarter({{second_date}}) * 365/4))\n < (dayofyear({{first_date}}) - (quarter({{first_date}}) * 365/4))\n ) then 1\n when {{first_date}} > {{second_date}} and (\n (dayofyear({{second_date}}) - (quarter({{second_date}}) * 365/4))\n > (dayofyear({{first_date}}) - (quarter({{first_date}}) * 365/4))\n ) then -1\n else 0 end\n\n {%- elif datepart == 'year' -%}\n \n year({{second_date}}) - year({{first_date}})\n\n {%- elif datepart in ('hour', 'minute', 'second', 'millisecond', 'microsecond') -%}\n \n {%- set divisor -%} \n {%- if datepart == 'hour' -%} 3600\n {%- elif datepart == 'minute' -%} 60\n {%- elif datepart == 'second' -%} 1\n {%- elif datepart == 'millisecond' -%} (1/1000)\n {%- elif datepart == 'microsecond' -%} (1/1000000)\n {%- endif -%}\n {%- endset -%}\n\n case when {{first_date}} < {{second_date}}\n then ceil((\n {# make sure the timestamps are real, otherwise raise an error asap #}\n {{ spark_utils.assert_not_null('to_unix_timestamp', spark_utils.assert_not_null('to_timestamp', second_date)) }}\n - {{ spark_utils.assert_not_null('to_unix_timestamp', spark_utils.assert_not_null('to_timestamp', first_date)) }}\n ) / {{divisor}})\n else floor((\n {{ spark_utils.assert_not_null('to_unix_timestamp', spark_utils.assert_not_null('to_timestamp', second_date)) }}\n - {{ spark_utils.assert_not_null('to_unix_timestamp', spark_utils.assert_not_null('to_timestamp', first_date)) }}\n ) / {{divisor}})\n end\n \n {% if datepart == 'millisecond' %}\n + cast(date_format({{second_date}}, 'SSS') as int)\n - cast(date_format({{first_date}}, 'SSS') as int)\n {% endif %}\n \n {% if datepart == 'microsecond' %} \n {% set capture_str = '[0-9]{4}-[0-9]{2}-[0-9]{2}.[0-9]{2}:[0-9]{2}:[0-9]{2}.([0-9]{6})' %}\n -- Spark doesn't really support microseconds, so this is a massive hack!\n -- It will only work if the timestamp-string is of the format\n -- 'yyyy-MM-dd-HH mm.ss.SSSSSS'\n + cast(regexp_extract({{second_date}}, '{{capture_str}}', 1) as int)\n - cast(regexp_extract({{first_date}}, '{{capture_str}}', 1) as int) \n {% endif %}\n\n {%- else -%}\n\n {{ exceptions.raise_compiler_error(\"macro datediff not implemented for datepart ~ '\" ~ datepart ~ \"' ~ on Spark\") }}\n\n {%- endif -%}\n\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.spark_utils.assert_not_null"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1661544121.5564768}, "macro.spark_utils.spark__current_timestamp": {"unique_id": "macro.spark_utils.spark__current_timestamp", "package_name": "spark_utils", "root_path": "/Users/joseph.markiewicz/Documents/dbt_packages/ad_reporting/tiktok/dbt_tiktok_ads_source/integration_tests/dbt_packages/spark_utils", "path": "macros/dbt_utils/cross_db_utils/current_timestamp.sql", "original_file_path": "macros/dbt_utils/cross_db_utils/current_timestamp.sql", "name": "spark__current_timestamp", "macro_sql": "{% macro spark__current_timestamp() %}\n current_timestamp()\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1661544121.5568378}, "macro.spark_utils.spark__current_timestamp_in_utc": {"unique_id": "macro.spark_utils.spark__current_timestamp_in_utc", "package_name": "spark_utils", "root_path": "/Users/joseph.markiewicz/Documents/dbt_packages/ad_reporting/tiktok/dbt_tiktok_ads_source/integration_tests/dbt_packages/spark_utils", "path": "macros/dbt_utils/cross_db_utils/current_timestamp.sql", "original_file_path": "macros/dbt_utils/cross_db_utils/current_timestamp.sql", "name": "spark__current_timestamp_in_utc", "macro_sql": "{% macro spark__current_timestamp_in_utc() %}\n unix_timestamp()\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1661544121.556917}, "macro.spark_utils.spark__split_part": {"unique_id": "macro.spark_utils.spark__split_part", "package_name": "spark_utils", "root_path": "/Users/joseph.markiewicz/Documents/dbt_packages/ad_reporting/tiktok/dbt_tiktok_ads_source/integration_tests/dbt_packages/spark_utils", "path": "macros/dbt_utils/cross_db_utils/split_part.sql", "original_file_path": "macros/dbt_utils/cross_db_utils/split_part.sql", "name": "spark__split_part", "macro_sql": "{% macro spark__split_part(string_text, delimiter_text, part_number) %}\n\n {% set delimiter_expr %}\n \n -- escape if starts with a special character\n case when regexp_extract({{ delimiter_text }}, '([^A-Za-z0-9])(.*)', 1) != '_'\n then concat('\\\\', {{ delimiter_text }})\n else {{ delimiter_text }} end\n \n {% endset %}\n\n {% set split_part_expr %}\n \n split(\n {{ string_text }},\n {{ delimiter_expr }}\n )[({{ part_number - 1 }})]\n \n {% endset %}\n \n {{ return(split_part_expr) }}\n\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1661544121.557791}, "macro.spark_utils.spark__get_relations_by_pattern": {"unique_id": "macro.spark_utils.spark__get_relations_by_pattern", "package_name": "spark_utils", "root_path": "/Users/joseph.markiewicz/Documents/dbt_packages/ad_reporting/tiktok/dbt_tiktok_ads_source/integration_tests/dbt_packages/spark_utils", "path": "macros/dbt_utils/sql/get_relations_by_prefix.sql", "original_file_path": "macros/dbt_utils/sql/get_relations_by_prefix.sql", "name": "spark__get_relations_by_pattern", "macro_sql": "{% macro spark__get_relations_by_pattern(schema_pattern, table_pattern, exclude='', database=target.database) %}\n\n {%- call statement('get_tables', fetch_result=True) %}\n\n show table extended in {{ schema_pattern }} like '{{ table_pattern }}'\n\n {%- endcall -%}\n\n {%- set table_list = load_result('get_tables') -%}\n\n {%- if table_list and table_list['table'] -%}\n {%- set tbl_relations = [] -%}\n {%- for row in table_list['table'] -%}\n {%- set tbl_relation = api.Relation.create(\n database=None,\n schema=row[0],\n identifier=row[1],\n type=('view' if 'Type: VIEW' in row[3] else 'table')\n ) -%}\n {%- do tbl_relations.append(tbl_relation) -%}\n {%- endfor -%}\n\n {{ return(tbl_relations) }}\n {%- else -%}\n {{ return([]) }}\n {%- endif -%}\n\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.dbt.statement"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1661544121.559694}, "macro.spark_utils.spark__get_relations_by_prefix": {"unique_id": "macro.spark_utils.spark__get_relations_by_prefix", "package_name": "spark_utils", "root_path": "/Users/joseph.markiewicz/Documents/dbt_packages/ad_reporting/tiktok/dbt_tiktok_ads_source/integration_tests/dbt_packages/spark_utils", "path": "macros/dbt_utils/sql/get_relations_by_prefix.sql", "original_file_path": "macros/dbt_utils/sql/get_relations_by_prefix.sql", "name": "spark__get_relations_by_prefix", "macro_sql": "{% macro spark__get_relations_by_prefix(schema_pattern, table_pattern, exclude='', database=target.database) %}\n {% set table_pattern = table_pattern ~ '*' %}\n {{ return(spark_utils.spark__get_relations_by_pattern(schema_pattern, table_pattern, exclude='', database=target.database)) }}\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.spark_utils.spark__get_relations_by_pattern"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1661544121.560065}, "macro.spark_utils.spark__get_tables_by_pattern": {"unique_id": "macro.spark_utils.spark__get_tables_by_pattern", "package_name": "spark_utils", "root_path": "/Users/joseph.markiewicz/Documents/dbt_packages/ad_reporting/tiktok/dbt_tiktok_ads_source/integration_tests/dbt_packages/spark_utils", "path": "macros/dbt_utils/sql/get_relations_by_prefix.sql", "original_file_path": "macros/dbt_utils/sql/get_relations_by_prefix.sql", "name": "spark__get_tables_by_pattern", "macro_sql": "{% macro spark__get_tables_by_pattern(schema_pattern, table_pattern, exclude='', database=target.database) %}\n {{ return(spark_utils.spark__get_relations_by_pattern(schema_pattern, table_pattern, exclude='', database=target.database)) }}\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.spark_utils.spark__get_relations_by_pattern"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1661544121.560361}, "macro.spark_utils.spark__get_tables_by_prefix": {"unique_id": "macro.spark_utils.spark__get_tables_by_prefix", "package_name": "spark_utils", "root_path": "/Users/joseph.markiewicz/Documents/dbt_packages/ad_reporting/tiktok/dbt_tiktok_ads_source/integration_tests/dbt_packages/spark_utils", "path": "macros/dbt_utils/sql/get_relations_by_prefix.sql", "original_file_path": "macros/dbt_utils/sql/get_relations_by_prefix.sql", "name": "spark__get_tables_by_prefix", "macro_sql": "{% macro spark__get_tables_by_prefix(schema_pattern, table_pattern, exclude='', database=target.database) %}\n {{ return(spark_utils.spark__get_relations_by_prefix(schema_pattern, table_pattern, exclude='', database=target.database)) }}\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.spark_utils.spark__get_relations_by_prefix"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1661544121.5606441}, "macro.spark_utils.assert_not_null": {"unique_id": "macro.spark_utils.assert_not_null", "package_name": "spark_utils", "root_path": "/Users/joseph.markiewicz/Documents/dbt_packages/ad_reporting/tiktok/dbt_tiktok_ads_source/integration_tests/dbt_packages/spark_utils", "path": "macros/etc/assert_not_null.sql", "original_file_path": "macros/etc/assert_not_null.sql", "name": "assert_not_null", "macro_sql": "{% macro assert_not_null(function, arg) -%}\n {{ return(adapter.dispatch('assert_not_null', 'spark_utils')(function, arg)) }}\n{%- endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.spark_utils.default__assert_not_null"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1661544121.561132}, "macro.spark_utils.default__assert_not_null": {"unique_id": "macro.spark_utils.default__assert_not_null", "package_name": "spark_utils", "root_path": "/Users/joseph.markiewicz/Documents/dbt_packages/ad_reporting/tiktok/dbt_tiktok_ads_source/integration_tests/dbt_packages/spark_utils", "path": "macros/etc/assert_not_null.sql", "original_file_path": "macros/etc/assert_not_null.sql", "name": "default__assert_not_null", "macro_sql": "{% macro default__assert_not_null(function, arg) %}\n\n coalesce({{function}}({{arg}}), nvl2({{function}}({{arg}}), assert_true({{function}}({{arg}}) is not null), null))\n\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1661544121.561345}, "macro.spark_utils.spark__convert_timezone": {"unique_id": "macro.spark_utils.spark__convert_timezone", "package_name": "spark_utils", "root_path": "/Users/joseph.markiewicz/Documents/dbt_packages/ad_reporting/tiktok/dbt_tiktok_ads_source/integration_tests/dbt_packages/spark_utils", "path": "macros/snowplow/convert_timezone.sql", "original_file_path": "macros/snowplow/convert_timezone.sql", "name": "spark__convert_timezone", "macro_sql": "{% macro spark__convert_timezone(in_tz, out_tz, in_timestamp) %}\n from_utc_timestamp(to_utc_timestamp({{in_timestamp}}, {{in_tz}}), {{out_tz}})\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1661544121.5616488}, "macro.fivetran_utils.enabled_vars": {"unique_id": "macro.fivetran_utils.enabled_vars", "package_name": "fivetran_utils", "root_path": "/Users/joseph.markiewicz/Documents/dbt_packages/ad_reporting/tiktok/dbt_tiktok_ads_source/integration_tests/dbt_packages/fivetran_utils", "path": "macros/enabled_vars.sql", "original_file_path": "macros/enabled_vars.sql", "name": "enabled_vars", "macro_sql": "{% macro enabled_vars(vars) %}\n\n{% for v in vars %}\n \n {% if var(v, True) == False %}\n {{ return(False) }}\n {% endif %}\n\n{% endfor %}\n\n{{ return(True) }}\n\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1661544121.562134}, "macro.fivetran_utils.percentile": {"unique_id": "macro.fivetran_utils.percentile", "package_name": "fivetran_utils", "root_path": "/Users/joseph.markiewicz/Documents/dbt_packages/ad_reporting/tiktok/dbt_tiktok_ads_source/integration_tests/dbt_packages/fivetran_utils", "path": "macros/percentile.sql", "original_file_path": "macros/percentile.sql", "name": "percentile", "macro_sql": "{% macro percentile(percentile_field, partition_field, percent) -%}\n\n{{ adapter.dispatch('percentile', 'fivetran_utils') (percentile_field, partition_field, percent) }}\n\n{%- endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.fivetran_utils.postgres__percentile"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1661544121.563126}, "macro.fivetran_utils.default__percentile": {"unique_id": "macro.fivetran_utils.default__percentile", "package_name": "fivetran_utils", "root_path": "/Users/joseph.markiewicz/Documents/dbt_packages/ad_reporting/tiktok/dbt_tiktok_ads_source/integration_tests/dbt_packages/fivetran_utils", "path": "macros/percentile.sql", "original_file_path": "macros/percentile.sql", "name": "default__percentile", "macro_sql": "{% macro default__percentile(percentile_field, partition_field, percent) %}\n\n percentile_cont( \n {{ percent }} )\n within group ( order by {{ percentile_field }} )\n over ( partition by {{ partition_field }} )\n\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1661544121.563307}, "macro.fivetran_utils.redshift__percentile": {"unique_id": "macro.fivetran_utils.redshift__percentile", "package_name": "fivetran_utils", "root_path": "/Users/joseph.markiewicz/Documents/dbt_packages/ad_reporting/tiktok/dbt_tiktok_ads_source/integration_tests/dbt_packages/fivetran_utils", "path": "macros/percentile.sql", "original_file_path": "macros/percentile.sql", "name": "redshift__percentile", "macro_sql": "{% macro redshift__percentile(percentile_field, partition_field, percent) %}\n\n percentile_cont( \n {{ percent }} )\n within group ( order by {{ percentile_field }} )\n over ( partition by {{ partition_field }} )\n\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1661544121.563484}, "macro.fivetran_utils.bigquery__percentile": {"unique_id": "macro.fivetran_utils.bigquery__percentile", "package_name": "fivetran_utils", "root_path": "/Users/joseph.markiewicz/Documents/dbt_packages/ad_reporting/tiktok/dbt_tiktok_ads_source/integration_tests/dbt_packages/fivetran_utils", "path": "macros/percentile.sql", "original_file_path": "macros/percentile.sql", "name": "bigquery__percentile", "macro_sql": "{% macro bigquery__percentile(percentile_field, partition_field, percent) %}\n\n percentile_cont( \n {{ percentile_field }}, \n {{ percent }}) \n over (partition by {{ partition_field }} \n )\n\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1661544121.563655}, "macro.fivetran_utils.postgres__percentile": {"unique_id": "macro.fivetran_utils.postgres__percentile", "package_name": "fivetran_utils", "root_path": "/Users/joseph.markiewicz/Documents/dbt_packages/ad_reporting/tiktok/dbt_tiktok_ads_source/integration_tests/dbt_packages/fivetran_utils", "path": "macros/percentile.sql", "original_file_path": "macros/percentile.sql", "name": "postgres__percentile", "macro_sql": "{% macro postgres__percentile(percentile_field, partition_field, percent) %}\n\n percentile_cont( \n {{ percent }} )\n within group ( order by {{ percentile_field }} )\n /* have to group by partition field */\n\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1661544121.563817}, "macro.fivetran_utils.spark__percentile": {"unique_id": "macro.fivetran_utils.spark__percentile", "package_name": "fivetran_utils", "root_path": "/Users/joseph.markiewicz/Documents/dbt_packages/ad_reporting/tiktok/dbt_tiktok_ads_source/integration_tests/dbt_packages/fivetran_utils", "path": "macros/percentile.sql", "original_file_path": "macros/percentile.sql", "name": "spark__percentile", "macro_sql": "{% macro spark__percentile(percentile_field, partition_field, percent) %}\n\n percentile( \n {{ percentile_field }}, \n {{ percent }}) \n over (partition by {{ partition_field }} \n )\n\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1661544121.563991}, "macro.fivetran_utils.pivot_json_extract": {"unique_id": "macro.fivetran_utils.pivot_json_extract", "package_name": "fivetran_utils", "root_path": "/Users/joseph.markiewicz/Documents/dbt_packages/ad_reporting/tiktok/dbt_tiktok_ads_source/integration_tests/dbt_packages/fivetran_utils", "path": "macros/pivot_json_extract.sql", "original_file_path": "macros/pivot_json_extract.sql", "name": "pivot_json_extract", "macro_sql": "{% macro pivot_json_extract(string, list_of_properties) %}\n\n{%- for property in list_of_properties -%}\n\nreplace( {{ fivetran_utils.json_extract(string, property) }}, '\"', '') as {{ property | replace(' ', '_') | lower }}\n\n{%- if not loop.last -%},{%- endif %}\n{% endfor -%}\n\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.fivetran_utils.json_extract"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1661544121.5645041}, "macro.fivetran_utils.persist_pass_through_columns": {"unique_id": "macro.fivetran_utils.persist_pass_through_columns", "package_name": "fivetran_utils", "root_path": "/Users/joseph.markiewicz/Documents/dbt_packages/ad_reporting/tiktok/dbt_tiktok_ads_source/integration_tests/dbt_packages/fivetran_utils", "path": "macros/persist_pass_through_columns.sql", "original_file_path": "macros/persist_pass_through_columns.sql", "name": "persist_pass_through_columns", "macro_sql": "{% macro persist_pass_through_columns(pass_through_variable, identifier=none, transform='') %}\n\n{% if var(pass_through_variable, none) %}\n {% for field in var(pass_through_variable) %}\n , {{ transform ~ '(' ~ (identifier ~ '.' if identifier else '') ~ (field.alias if field.alias else field.name) ~ ')' }} as {{ field.alias if field.alias else field.name }}\n {% endfor %}\n{% endif %}\n\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1661544121.5653179}, "macro.fivetran_utils.json_parse": {"unique_id": "macro.fivetran_utils.json_parse", "package_name": "fivetran_utils", "root_path": "/Users/joseph.markiewicz/Documents/dbt_packages/ad_reporting/tiktok/dbt_tiktok_ads_source/integration_tests/dbt_packages/fivetran_utils", "path": "macros/json_parse.sql", "original_file_path": "macros/json_parse.sql", "name": "json_parse", "macro_sql": "{% macro json_parse(string, string_path) -%}\n\n{{ adapter.dispatch('json_parse', 'fivetran_utils') (string, string_path) }}\n\n{%- endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.fivetran_utils.postgres__json_parse"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1661544121.5664058}, "macro.fivetran_utils.default__json_parse": {"unique_id": "macro.fivetran_utils.default__json_parse", "package_name": "fivetran_utils", "root_path": "/Users/joseph.markiewicz/Documents/dbt_packages/ad_reporting/tiktok/dbt_tiktok_ads_source/integration_tests/dbt_packages/fivetran_utils", "path": "macros/json_parse.sql", "original_file_path": "macros/json_parse.sql", "name": "default__json_parse", "macro_sql": "{% macro default__json_parse(string, string_path) %}\n\n json_extract_path_text({{string}}, {%- for s in string_path -%}'{{ s }}'{%- if not loop.last -%},{%- endif -%}{%- endfor -%} )\n\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1661544121.566648}, "macro.fivetran_utils.redshift__json_parse": {"unique_id": "macro.fivetran_utils.redshift__json_parse", "package_name": "fivetran_utils", "root_path": "/Users/joseph.markiewicz/Documents/dbt_packages/ad_reporting/tiktok/dbt_tiktok_ads_source/integration_tests/dbt_packages/fivetran_utils", "path": "macros/json_parse.sql", "original_file_path": "macros/json_parse.sql", "name": "redshift__json_parse", "macro_sql": "{% macro redshift__json_parse(string, string_path) %}\n\n json_extract_path_text({{string}}, {%- for s in string_path -%}'{{ s }}'{%- if not loop.last -%},{%- endif -%}{%- endfor -%} )\n\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1661544121.5668879}, "macro.fivetran_utils.bigquery__json_parse": {"unique_id": "macro.fivetran_utils.bigquery__json_parse", "package_name": "fivetran_utils", "root_path": "/Users/joseph.markiewicz/Documents/dbt_packages/ad_reporting/tiktok/dbt_tiktok_ads_source/integration_tests/dbt_packages/fivetran_utils", "path": "macros/json_parse.sql", "original_file_path": "macros/json_parse.sql", "name": "bigquery__json_parse", "macro_sql": "{% macro bigquery__json_parse(string, string_path) %}\n\n \n json_extract_scalar({{string}}, '$.{%- for s in string_path -%}{{ s }}{%- if not loop.last -%}.{%- endif -%}{%- endfor -%} ')\n\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1661544121.567124}, "macro.fivetran_utils.postgres__json_parse": {"unique_id": "macro.fivetran_utils.postgres__json_parse", "package_name": "fivetran_utils", "root_path": "/Users/joseph.markiewicz/Documents/dbt_packages/ad_reporting/tiktok/dbt_tiktok_ads_source/integration_tests/dbt_packages/fivetran_utils", "path": "macros/json_parse.sql", "original_file_path": "macros/json_parse.sql", "name": "postgres__json_parse", "macro_sql": "{% macro postgres__json_parse(string, string_path) %}\n\n {{string}}::json #>> '{ {%- for s in string_path -%}{{ s }}{%- if not loop.last -%},{%- endif -%}{%- endfor -%} }'\n\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1661544121.567459}, "macro.fivetran_utils.snowflake__json_parse": {"unique_id": "macro.fivetran_utils.snowflake__json_parse", "package_name": "fivetran_utils", "root_path": "/Users/joseph.markiewicz/Documents/dbt_packages/ad_reporting/tiktok/dbt_tiktok_ads_source/integration_tests/dbt_packages/fivetran_utils", "path": "macros/json_parse.sql", "original_file_path": "macros/json_parse.sql", "name": "snowflake__json_parse", "macro_sql": "{% macro snowflake__json_parse(string, string_path) %}\n\n parse_json( {{string}} ) {%- for s in string_path -%}{% if s is number %}[{{ s }}]{% else %}['{{ s }}']{% endif %}{%- endfor -%}\n\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1661544121.5678332}, "macro.fivetran_utils.spark__json_parse": {"unique_id": "macro.fivetran_utils.spark__json_parse", "package_name": "fivetran_utils", "root_path": "/Users/joseph.markiewicz/Documents/dbt_packages/ad_reporting/tiktok/dbt_tiktok_ads_source/integration_tests/dbt_packages/fivetran_utils", "path": "macros/json_parse.sql", "original_file_path": "macros/json_parse.sql", "name": "spark__json_parse", "macro_sql": "{% macro spark__json_parse(string, string_path) %}\n\n {{string}} : {%- for s in string_path -%}{% if s is number %}[{{ s }}]{% else %}['{{ s }}']{% endif %}{%- endfor -%}\n\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1661544121.5681221}, "macro.fivetran_utils.max_bool": {"unique_id": "macro.fivetran_utils.max_bool", "package_name": "fivetran_utils", "root_path": "/Users/joseph.markiewicz/Documents/dbt_packages/ad_reporting/tiktok/dbt_tiktok_ads_source/integration_tests/dbt_packages/fivetran_utils", "path": "macros/max_bool.sql", "original_file_path": "macros/max_bool.sql", "name": "max_bool", "macro_sql": "{% macro max_bool(boolean_field) -%}\n\n{{ adapter.dispatch('max_bool', 'fivetran_utils') (boolean_field) }}\n\n{%- endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.fivetran_utils.default__max_bool"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1661544121.5686772}, "macro.fivetran_utils.default__max_bool": {"unique_id": "macro.fivetran_utils.default__max_bool", "package_name": "fivetran_utils", "root_path": "/Users/joseph.markiewicz/Documents/dbt_packages/ad_reporting/tiktok/dbt_tiktok_ads_source/integration_tests/dbt_packages/fivetran_utils", "path": "macros/max_bool.sql", "original_file_path": "macros/max_bool.sql", "name": "default__max_bool", "macro_sql": "{% macro default__max_bool(boolean_field) %}\n\n bool_or( {{ boolean_field }} )\n\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1661544121.568786}, "macro.fivetran_utils.snowflake__max_bool": {"unique_id": "macro.fivetran_utils.snowflake__max_bool", "package_name": "fivetran_utils", "root_path": "/Users/joseph.markiewicz/Documents/dbt_packages/ad_reporting/tiktok/dbt_tiktok_ads_source/integration_tests/dbt_packages/fivetran_utils", "path": "macros/max_bool.sql", "original_file_path": "macros/max_bool.sql", "name": "snowflake__max_bool", "macro_sql": "{% macro snowflake__max_bool(boolean_field) %}\n\n max( {{ boolean_field }} )\n\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1661544121.5688891}, "macro.fivetran_utils.bigquery__max_bool": {"unique_id": "macro.fivetran_utils.bigquery__max_bool", "package_name": "fivetran_utils", "root_path": "/Users/joseph.markiewicz/Documents/dbt_packages/ad_reporting/tiktok/dbt_tiktok_ads_source/integration_tests/dbt_packages/fivetran_utils", "path": "macros/max_bool.sql", "original_file_path": "macros/max_bool.sql", "name": "bigquery__max_bool", "macro_sql": "{% macro bigquery__max_bool(boolean_field) %}\n\n max( {{ boolean_field }} )\n\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1661544121.569001}, "macro.fivetran_utils.calculated_fields": {"unique_id": "macro.fivetran_utils.calculated_fields", "package_name": "fivetran_utils", "root_path": "/Users/joseph.markiewicz/Documents/dbt_packages/ad_reporting/tiktok/dbt_tiktok_ads_source/integration_tests/dbt_packages/fivetran_utils", "path": "macros/calculated_fields.sql", "original_file_path": "macros/calculated_fields.sql", "name": "calculated_fields", "macro_sql": "{% macro calculated_fields(variable) -%}\n\n{% if var(variable, none) %}\n {% for field in var(variable) %}\n , {{ field.transform_sql }} as {{ field.name }} \n {% endfor %}\n{% endif %}\n\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1661544121.569493}, "macro.fivetran_utils.seed_data_helper": {"unique_id": "macro.fivetran_utils.seed_data_helper", "package_name": "fivetran_utils", "root_path": "/Users/joseph.markiewicz/Documents/dbt_packages/ad_reporting/tiktok/dbt_tiktok_ads_source/integration_tests/dbt_packages/fivetran_utils", "path": "macros/seed_data_helper.sql", "original_file_path": "macros/seed_data_helper.sql", "name": "seed_data_helper", "macro_sql": "{% macro seed_data_helper(seed_name, warehouses) %}\n\n{% if target.type in warehouses %}\n {% for w in warehouses %}\n {% if target.type == w %}\n {{ return(ref(seed_name ~ \"_\" ~ w ~ \"\")) }}\n {% endif %}\n {% endfor %}\n{% else %}\n{{ return(ref(seed_name)) }}\n{% endif %}\n\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1661544121.570184}, "macro.fivetran_utils.fill_pass_through_columns": {"unique_id": "macro.fivetran_utils.fill_pass_through_columns", "package_name": "fivetran_utils", "root_path": "/Users/joseph.markiewicz/Documents/dbt_packages/ad_reporting/tiktok/dbt_tiktok_ads_source/integration_tests/dbt_packages/fivetran_utils", "path": "macros/fill_pass_through_columns.sql", "original_file_path": "macros/fill_pass_through_columns.sql", "name": "fill_pass_through_columns", "macro_sql": "{% macro fill_pass_through_columns(pass_through_variable) %}\n\n{% if var(pass_through_variable) %}\n {% for field in var(pass_through_variable) %}\n {% if field.transform_sql %}\n , {{ field.transform_sql }} as {{ field.alias if field.alias else field.name }}\n {% else %}\n , {{ field.alias if field.alias else field.name }}\n {% endif %}\n {% endfor %}\n{% endif %}\n\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1661544121.570893}, "macro.fivetran_utils.string_agg": {"unique_id": "macro.fivetran_utils.string_agg", "package_name": "fivetran_utils", "root_path": "/Users/joseph.markiewicz/Documents/dbt_packages/ad_reporting/tiktok/dbt_tiktok_ads_source/integration_tests/dbt_packages/fivetran_utils", "path": "macros/string_agg.sql", "original_file_path": "macros/string_agg.sql", "name": "string_agg", "macro_sql": "{% macro string_agg(field_to_agg, delimiter) -%}\n\n{{ adapter.dispatch('string_agg', 'fivetran_utils') (field_to_agg, delimiter) }}\n\n{%- endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.fivetran_utils.default__string_agg"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1661544121.571442}, "macro.fivetran_utils.default__string_agg": {"unique_id": "macro.fivetran_utils.default__string_agg", "package_name": "fivetran_utils", "root_path": "/Users/joseph.markiewicz/Documents/dbt_packages/ad_reporting/tiktok/dbt_tiktok_ads_source/integration_tests/dbt_packages/fivetran_utils", "path": "macros/string_agg.sql", "original_file_path": "macros/string_agg.sql", "name": "default__string_agg", "macro_sql": "{% macro default__string_agg(field_to_agg, delimiter) %}\n string_agg({{ field_to_agg }}, {{ delimiter }})\n\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1661544121.571583}, "macro.fivetran_utils.snowflake__string_agg": {"unique_id": "macro.fivetran_utils.snowflake__string_agg", "package_name": "fivetran_utils", "root_path": "/Users/joseph.markiewicz/Documents/dbt_packages/ad_reporting/tiktok/dbt_tiktok_ads_source/integration_tests/dbt_packages/fivetran_utils", "path": "macros/string_agg.sql", "original_file_path": "macros/string_agg.sql", "name": "snowflake__string_agg", "macro_sql": "{% macro snowflake__string_agg(field_to_agg, delimiter) %}\n listagg({{ field_to_agg }}, {{ delimiter }})\n\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1661544121.57172}, "macro.fivetran_utils.redshift__string_agg": {"unique_id": "macro.fivetran_utils.redshift__string_agg", "package_name": "fivetran_utils", "root_path": "/Users/joseph.markiewicz/Documents/dbt_packages/ad_reporting/tiktok/dbt_tiktok_ads_source/integration_tests/dbt_packages/fivetran_utils", "path": "macros/string_agg.sql", "original_file_path": "macros/string_agg.sql", "name": "redshift__string_agg", "macro_sql": "{% macro redshift__string_agg(field_to_agg, delimiter) %}\n listagg({{ field_to_agg }}, {{ delimiter }})\n\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1661544121.5718558}, "macro.fivetran_utils.spark__string_agg": {"unique_id": "macro.fivetran_utils.spark__string_agg", "package_name": "fivetran_utils", "root_path": "/Users/joseph.markiewicz/Documents/dbt_packages/ad_reporting/tiktok/dbt_tiktok_ads_source/integration_tests/dbt_packages/fivetran_utils", "path": "macros/string_agg.sql", "original_file_path": "macros/string_agg.sql", "name": "spark__string_agg", "macro_sql": "{% macro spark__string_agg(field_to_agg, delimiter) %}\n -- collect set will remove duplicates\n replace(replace(replace(cast( collect_set({{ field_to_agg }}) as string), '[', ''), ']', ''), ', ', {{ delimiter }} )\n\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1661544121.571997}, "macro.fivetran_utils.timestamp_diff": {"unique_id": "macro.fivetran_utils.timestamp_diff", "package_name": "fivetran_utils", "root_path": "/Users/joseph.markiewicz/Documents/dbt_packages/ad_reporting/tiktok/dbt_tiktok_ads_source/integration_tests/dbt_packages/fivetran_utils", "path": "macros/timestamp_diff.sql", "original_file_path": "macros/timestamp_diff.sql", "name": "timestamp_diff", "macro_sql": "{% macro timestamp_diff(first_date, second_date, datepart) %}\n {{ adapter.dispatch('timestamp_diff', 'fivetran_utils')(first_date, second_date, datepart) }}\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.fivetran_utils.postgres__timestamp_diff"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1661544121.574978}, "macro.fivetran_utils.default__timestamp_diff": {"unique_id": "macro.fivetran_utils.default__timestamp_diff", "package_name": "fivetran_utils", "root_path": "/Users/joseph.markiewicz/Documents/dbt_packages/ad_reporting/tiktok/dbt_tiktok_ads_source/integration_tests/dbt_packages/fivetran_utils", "path": "macros/timestamp_diff.sql", "original_file_path": "macros/timestamp_diff.sql", "name": "default__timestamp_diff", "macro_sql": "{% macro default__timestamp_diff(first_date, second_date, datepart) %}\n\n datediff(\n {{ datepart }},\n {{ first_date }},\n {{ second_date }}\n )\n\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1661544121.57515}, "macro.fivetran_utils.redshift__timestamp_diff": {"unique_id": "macro.fivetran_utils.redshift__timestamp_diff", "package_name": "fivetran_utils", "root_path": "/Users/joseph.markiewicz/Documents/dbt_packages/ad_reporting/tiktok/dbt_tiktok_ads_source/integration_tests/dbt_packages/fivetran_utils", "path": "macros/timestamp_diff.sql", "original_file_path": "macros/timestamp_diff.sql", "name": "redshift__timestamp_diff", "macro_sql": "{% macro redshift__timestamp_diff(first_date, second_date, datepart) %}\n\n datediff(\n {{ datepart }},\n {{ first_date }},\n {{ second_date }}\n )\n\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1661544121.575319}, "macro.fivetran_utils.bigquery__timestamp_diff": {"unique_id": "macro.fivetran_utils.bigquery__timestamp_diff", "package_name": "fivetran_utils", "root_path": "/Users/joseph.markiewicz/Documents/dbt_packages/ad_reporting/tiktok/dbt_tiktok_ads_source/integration_tests/dbt_packages/fivetran_utils", "path": "macros/timestamp_diff.sql", "original_file_path": "macros/timestamp_diff.sql", "name": "bigquery__timestamp_diff", "macro_sql": "{% macro bigquery__timestamp_diff(first_date, second_date, datepart) %}\n\n timestamp_diff(\n {{second_date}},\n {{first_date}},\n {{datepart}}\n )\n\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1661544121.5754821}, "macro.fivetran_utils.postgres__timestamp_diff": {"unique_id": "macro.fivetran_utils.postgres__timestamp_diff", "package_name": "fivetran_utils", "root_path": "/Users/joseph.markiewicz/Documents/dbt_packages/ad_reporting/tiktok/dbt_tiktok_ads_source/integration_tests/dbt_packages/fivetran_utils", "path": "macros/timestamp_diff.sql", "original_file_path": "macros/timestamp_diff.sql", "name": "postgres__timestamp_diff", "macro_sql": "{% macro postgres__timestamp_diff(first_date, second_date, datepart) %}\n\n {% if datepart == 'year' %}\n (date_part('year', ({{second_date}})::date) - date_part('year', ({{first_date}})::date))\n {% elif datepart == 'quarter' %}\n ({{ dbt_utils.datediff(first_date, second_date, 'year') }} * 4 + date_part('quarter', ({{second_date}})::date) - date_part('quarter', ({{first_date}})::date))\n {% elif datepart == 'month' %}\n ({{ dbt_utils.datediff(first_date, second_date, 'year') }} * 12 + date_part('month', ({{second_date}})::date) - date_part('month', ({{first_date}})::date))\n {% elif datepart == 'day' %}\n (({{second_date}})::date - ({{first_date}})::date)\n {% elif datepart == 'week' %}\n ({{ dbt_utils.datediff(first_date, second_date, 'day') }} / 7 + case\n when date_part('dow', ({{first_date}})::timestamp) <= date_part('dow', ({{second_date}})::timestamp) then\n case when {{first_date}} <= {{second_date}} then 0 else -1 end\n else\n case when {{first_date}} <= {{second_date}} then 1 else 0 end\n end)\n {% elif datepart == 'hour' %}\n ({{ dbt_utils.datediff(first_date, second_date, 'day') }} * 24 + date_part('hour', ({{second_date}})::timestamp) - date_part('hour', ({{first_date}})::timestamp))\n {% elif datepart == 'minute' %}\n ({{ dbt_utils.datediff(first_date, second_date, 'hour') }} * 60 + date_part('minute', ({{second_date}})::timestamp) - date_part('minute', ({{first_date}})::timestamp))\n {% elif datepart == 'second' %}\n ({{ dbt_utils.datediff(first_date, second_date, 'minute') }} * 60 + floor(date_part('second', ({{second_date}})::timestamp)) - floor(date_part('second', ({{first_date}})::timestamp)))\n {% elif datepart == 'millisecond' %}\n ({{ dbt_utils.datediff(first_date, second_date, 'minute') }} * 60000 + floor(date_part('millisecond', ({{second_date}})::timestamp)) - floor(date_part('millisecond', ({{first_date}})::timestamp)))\n {% elif datepart == 'microsecond' %}\n ({{ dbt_utils.datediff(first_date, second_date, 'minute') }} * 60000000 + floor(date_part('microsecond', ({{second_date}})::timestamp)) - floor(date_part('microsecond', ({{first_date}})::timestamp)))\n {% else %}\n {{ exceptions.raise_compiler_error(\"Unsupported datepart for macro datediff in postgres: {!r}\".format(datepart)) }}\n {% endif %}\n\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.dbt_utils.datediff"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1661544121.577264}, "macro.fivetran_utils.try_cast": {"unique_id": "macro.fivetran_utils.try_cast", "package_name": "fivetran_utils", "root_path": "/Users/joseph.markiewicz/Documents/dbt_packages/ad_reporting/tiktok/dbt_tiktok_ads_source/integration_tests/dbt_packages/fivetran_utils", "path": "macros/try_cast.sql", "original_file_path": "macros/try_cast.sql", "name": "try_cast", "macro_sql": "{% macro try_cast(field, type) %}\n {{ adapter.dispatch('try_cast', 'fivetran_utils') (field, type) }}\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.fivetran_utils.postgres__try_cast"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1661544121.5782652}, "macro.fivetran_utils.default__safe_cast": {"unique_id": "macro.fivetran_utils.default__safe_cast", "package_name": "fivetran_utils", "root_path": "/Users/joseph.markiewicz/Documents/dbt_packages/ad_reporting/tiktok/dbt_tiktok_ads_source/integration_tests/dbt_packages/fivetran_utils", "path": "macros/try_cast.sql", "original_file_path": "macros/try_cast.sql", "name": "default__safe_cast", "macro_sql": "{% macro default__safe_cast(field, type) %}\n {# most databases don't support this function yet\n so we just need to use cast #}\n cast({{field}} as {{type}})\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1661544121.578413}, "macro.fivetran_utils.redshift__try_cast": {"unique_id": "macro.fivetran_utils.redshift__try_cast", "package_name": "fivetran_utils", "root_path": "/Users/joseph.markiewicz/Documents/dbt_packages/ad_reporting/tiktok/dbt_tiktok_ads_source/integration_tests/dbt_packages/fivetran_utils", "path": "macros/try_cast.sql", "original_file_path": "macros/try_cast.sql", "name": "redshift__try_cast", "macro_sql": "{% macro redshift__try_cast(field, type) %}\n{%- if type == 'numeric' -%}\n\n case\n when trim({{field}}) ~ '^(0|[1-9][0-9]*)$' then trim({{field}})\n else null\n end::{{type}}\n\n{% else %}\n {{ exceptions.raise_compiler_error(\n \"non-numeric datatypes are not currently supported\") }}\n\n{% endif %}\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1661544121.578698}, "macro.fivetran_utils.postgres__try_cast": {"unique_id": "macro.fivetran_utils.postgres__try_cast", "package_name": "fivetran_utils", "root_path": "/Users/joseph.markiewicz/Documents/dbt_packages/ad_reporting/tiktok/dbt_tiktok_ads_source/integration_tests/dbt_packages/fivetran_utils", "path": "macros/try_cast.sql", "original_file_path": "macros/try_cast.sql", "name": "postgres__try_cast", "macro_sql": "{% macro postgres__try_cast(field, type) %}\n{%- if type == 'numeric' -%}\n\n case\n when replace(cast({{field}} as varchar),cast(' ' as varchar),cast('' as varchar)) ~ '^(0|[1-9][0-9]*)$' \n then replace(cast({{field}} as varchar),cast(' ' as varchar),cast('' as varchar))\n else null\n end::{{type}}\n\n{% else %}\n {{ exceptions.raise_compiler_error(\n \"non-numeric datatypes are not currently supported\") }}\n\n{% endif %}\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1661544121.578999}, "macro.fivetran_utils.snowflake__try_cast": {"unique_id": "macro.fivetran_utils.snowflake__try_cast", "package_name": "fivetran_utils", "root_path": "/Users/joseph.markiewicz/Documents/dbt_packages/ad_reporting/tiktok/dbt_tiktok_ads_source/integration_tests/dbt_packages/fivetran_utils", "path": "macros/try_cast.sql", "original_file_path": "macros/try_cast.sql", "name": "snowflake__try_cast", "macro_sql": "{% macro snowflake__try_cast(field, type) %}\n try_cast(cast({{field}} as varchar) as {{type}})\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1661544121.579134}, "macro.fivetran_utils.bigquery__try_cast": {"unique_id": "macro.fivetran_utils.bigquery__try_cast", "package_name": "fivetran_utils", "root_path": "/Users/joseph.markiewicz/Documents/dbt_packages/ad_reporting/tiktok/dbt_tiktok_ads_source/integration_tests/dbt_packages/fivetran_utils", "path": "macros/try_cast.sql", "original_file_path": "macros/try_cast.sql", "name": "bigquery__try_cast", "macro_sql": "{% macro bigquery__try_cast(field, type) %}\n safe_cast({{field}} as {{type}})\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1661544121.579266}, "macro.fivetran_utils.spark__try_cast": {"unique_id": "macro.fivetran_utils.spark__try_cast", "package_name": "fivetran_utils", "root_path": "/Users/joseph.markiewicz/Documents/dbt_packages/ad_reporting/tiktok/dbt_tiktok_ads_source/integration_tests/dbt_packages/fivetran_utils", "path": "macros/try_cast.sql", "original_file_path": "macros/try_cast.sql", "name": "spark__try_cast", "macro_sql": "{% macro spark__try_cast(field, type) %}\n try_cast({{field}} as {{type}})\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1661544121.579394}, "macro.fivetran_utils.source_relation": {"unique_id": "macro.fivetran_utils.source_relation", "package_name": "fivetran_utils", "root_path": "/Users/joseph.markiewicz/Documents/dbt_packages/ad_reporting/tiktok/dbt_tiktok_ads_source/integration_tests/dbt_packages/fivetran_utils", "path": "macros/source_relation.sql", "original_file_path": "macros/source_relation.sql", "name": "source_relation", "macro_sql": "{% macro source_relation(union_schema_variable='union_schemas', union_database_variable='union_databases') -%}\n\n{{ adapter.dispatch('source_relation', 'fivetran_utils') (union_schema_variable, union_database_variable) }}\n\n{%- endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.fivetran_utils.default__source_relation"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1661544121.58}, "macro.fivetran_utils.default__source_relation": {"unique_id": "macro.fivetran_utils.default__source_relation", "package_name": "fivetran_utils", "root_path": "/Users/joseph.markiewicz/Documents/dbt_packages/ad_reporting/tiktok/dbt_tiktok_ads_source/integration_tests/dbt_packages/fivetran_utils", "path": "macros/source_relation.sql", "original_file_path": "macros/source_relation.sql", "name": "default__source_relation", "macro_sql": "{% macro default__source_relation(union_schema_variable, union_database_variable) %}\n\n{% if var(union_schema_variable, none) %}\n, case\n {% for schema in var(union_schema_variable) %}\n when lower(replace(replace(_dbt_source_relation,'\"',''),'`','')) like '%.{{ schema|lower }}.%' then '{{ schema|lower }}'\n {% endfor %}\n end as source_relation\n{% elif var(union_database_variable, none) %}\n, case\n {% for database in var(union_database_variable) %}\n when lower(replace(replace(_dbt_source_relation,'\"',''),'`','')) like '%{{ database|lower }}.%' then '{{ database|lower }}'\n {% endfor %}\n end as source_relation\n{% else %}\n, cast('' as {{ dbt_utils.type_string() }}) as source_relation\n{% endif %}\n\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.dbt_utils.type_string"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1661544121.5806022}, "macro.fivetran_utils.first_value": {"unique_id": "macro.fivetran_utils.first_value", "package_name": "fivetran_utils", "root_path": "/Users/joseph.markiewicz/Documents/dbt_packages/ad_reporting/tiktok/dbt_tiktok_ads_source/integration_tests/dbt_packages/fivetran_utils", "path": "macros/first_value.sql", "original_file_path": "macros/first_value.sql", "name": "first_value", "macro_sql": "{% macro first_value(first_value_field, partition_field, order_by_field, order=\"asc\") -%}\n\n{{ adapter.dispatch('first_value', 'fivetran_utils') (first_value_field, partition_field, order_by_field, order) }}\n\n{%- endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.fivetran_utils.default__first_value"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1661544121.581176}, "macro.fivetran_utils.default__first_value": {"unique_id": "macro.fivetran_utils.default__first_value", "package_name": "fivetran_utils", "root_path": "/Users/joseph.markiewicz/Documents/dbt_packages/ad_reporting/tiktok/dbt_tiktok_ads_source/integration_tests/dbt_packages/fivetran_utils", "path": "macros/first_value.sql", "original_file_path": "macros/first_value.sql", "name": "default__first_value", "macro_sql": "{% macro default__first_value(first_value_field, partition_field, order_by_field, order=\"asc\") %}\n\n first_value( {{ first_value_field }} ignore nulls ) over (partition by {{ partition_field }} order by {{ order_by_field }} {{ order }} )\n\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1661544121.581388}, "macro.fivetran_utils.redshift__first_value": {"unique_id": "macro.fivetran_utils.redshift__first_value", "package_name": "fivetran_utils", "root_path": "/Users/joseph.markiewicz/Documents/dbt_packages/ad_reporting/tiktok/dbt_tiktok_ads_source/integration_tests/dbt_packages/fivetran_utils", "path": "macros/first_value.sql", "original_file_path": "macros/first_value.sql", "name": "redshift__first_value", "macro_sql": "{% macro redshift__first_value(first_value_field, partition_field, order_by_field, order=\"asc\") %}\n\n first_value( {{ first_value_field }} ignore nulls ) over (partition by {{ partition_field }} order by {{ order_by_field }} {{ order }} , {{ partition_field }} rows unbounded preceding )\n\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1661544121.5816278}, "macro.fivetran_utils.add_dbt_source_relation": {"unique_id": "macro.fivetran_utils.add_dbt_source_relation", "package_name": "fivetran_utils", "root_path": "/Users/joseph.markiewicz/Documents/dbt_packages/ad_reporting/tiktok/dbt_tiktok_ads_source/integration_tests/dbt_packages/fivetran_utils", "path": "macros/add_dbt_source_relation.sql", "original_file_path": "macros/add_dbt_source_relation.sql", "name": "add_dbt_source_relation", "macro_sql": "{% macro add_dbt_source_relation() %}\n\n{% if var('union_schemas', none) or var('union_databases', none) %}\n, _dbt_source_relation\n{% endif %}\n\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1661544121.582022}, "macro.fivetran_utils.add_pass_through_columns": {"unique_id": "macro.fivetran_utils.add_pass_through_columns", "package_name": "fivetran_utils", "root_path": "/Users/joseph.markiewicz/Documents/dbt_packages/ad_reporting/tiktok/dbt_tiktok_ads_source/integration_tests/dbt_packages/fivetran_utils", "path": "macros/add_pass_through_columns.sql", "original_file_path": "macros/add_pass_through_columns.sql", "name": "add_pass_through_columns", "macro_sql": "{% macro add_pass_through_columns(base_columns, pass_through_var) %}\n\n {% if pass_through_var %}\n\n {% for column in pass_through_var %}\n\n {% if column.alias %}\n\n {% do base_columns.append({ \"name\": column.name, \"alias\": column.alias, \"datatype\": column.datatype if column.datatype else dbt_utils.type_string()}) %}\n\n {% else %}\n\n {% do base_columns.append({ \"name\": column.name, \"datatype\": column.datatype if column.datatype else dbt_utils.type_string()}) %}\n \n {% endif %}\n\n {% endfor %}\n\n {% endif %}\n\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.dbt_utils.type_string"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1661544121.583114}, "macro.fivetran_utils.union_relations": {"unique_id": "macro.fivetran_utils.union_relations", "package_name": "fivetran_utils", "root_path": "/Users/joseph.markiewicz/Documents/dbt_packages/ad_reporting/tiktok/dbt_tiktok_ads_source/integration_tests/dbt_packages/fivetran_utils", "path": "macros/union_relations.sql", "original_file_path": "macros/union_relations.sql", "name": "union_relations", "macro_sql": "{%- macro union_relations(relations, aliases=none, column_override=none, include=[], exclude=[], source_column_name=none) -%}\n\n {%- if exclude and include -%}\n {{ exceptions.raise_compiler_error(\"Both an exclude and include list were provided to the `union` macro. Only one is allowed\") }}\n {%- endif -%}\n\n {#-- Prevent querying of db in parsing mode. This works because this macro does not create any new refs. -#}\n {%- if not execute %}\n {{ return('') }}\n {% endif -%}\n\n {%- set column_override = column_override if column_override is not none else {} -%}\n {%- set source_column_name = source_column_name if source_column_name is not none else '_dbt_source_relation' -%}\n\n {%- set relation_columns = {} -%}\n {%- set column_superset = {} -%}\n\n {%- for relation in relations -%}\n\n {%- do relation_columns.update({relation: []}) -%}\n\n {%- do dbt_utils._is_relation(relation, 'union_relations') -%}\n {%- set cols = adapter.get_columns_in_relation(relation) -%}\n {%- for col in cols -%}\n\n {#- If an exclude list was provided and the column is in the list, do nothing -#}\n {%- if exclude and col.column in exclude -%}\n\n {#- If an include list was provided and the column is not in the list, do nothing -#}\n {%- elif include and col.column not in include -%}\n\n {#- Otherwise add the column to the column superset -#}\n {%- else -%}\n\n {#- update the list of columns in this relation -#}\n {%- do relation_columns[relation].append(col.column) -%}\n\n {%- if col.column in column_superset -%}\n\n {%- set stored = column_superset[col.column] -%}\n {%- if col.is_string() and stored.is_string() and col.string_size() > stored.string_size() -%}\n\n {%- do column_superset.update({col.column: col}) -%}\n\n {%- endif %}\n\n {%- else -%}\n\n {%- do column_superset.update({col.column: col}) -%}\n\n {%- endif -%}\n\n {%- endif -%}\n\n {%- endfor -%}\n {%- endfor -%}\n\n {%- set ordered_column_names = column_superset.keys() -%}\n\n {%- for relation in relations %}\n\n (\n select\n\n cast({{ dbt_utils.string_literal(relation) }} as {{ dbt_utils.type_string() }}) as {{ source_column_name }},\n {% for col_name in ordered_column_names -%}\n\n {%- set col = column_superset[col_name] %}\n {%- set col_type = column_override.get(col.column, col.data_type) %}\n {%- set col_name = adapter.quote(col_name) if col_name in relation_columns[relation] else 'null' %}\n cast({{ col_name }} as {{ col_type }}) as {{ col.quoted }} {% if not loop.last %},{% endif -%}\n\n {%- endfor %}\n\n from {{ aliases[loop.index0] if aliases else relation }}\n )\n\n {% if not loop.last -%}\n union all\n {% endif -%}\n\n {%- endfor -%}\n\n{%- endmacro -%}\n\n", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.dbt_utils._is_relation", "macro.dbt_utils.string_literal", "macro.dbt_utils.type_string"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1661544121.5870998}, "macro.fivetran_utils.union_tables": {"unique_id": "macro.fivetran_utils.union_tables", "package_name": "fivetran_utils", "root_path": "/Users/joseph.markiewicz/Documents/dbt_packages/ad_reporting/tiktok/dbt_tiktok_ads_source/integration_tests/dbt_packages/fivetran_utils", "path": "macros/union_relations.sql", "original_file_path": "macros/union_relations.sql", "name": "union_tables", "macro_sql": "{%- macro union_tables(tables, column_override=none, include=[], exclude=[], source_column_name='_dbt_source_table') -%}\n\n {%- do exceptions.warn(\"Warning: the `union_tables` macro is no longer supported and will be deprecated in a future release of dbt-utils. Use the `union_relations` macro instead\") -%}\n\n {{ return(dbt_utils.union_relations(tables, column_override, include, exclude, source_column_name)) }}\n\n{%- endmacro -%}", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.dbt_utils.union_relations"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1661544121.5874822}, "macro.fivetran_utils.snowflake_seed_data": {"unique_id": "macro.fivetran_utils.snowflake_seed_data", "package_name": "fivetran_utils", "root_path": "/Users/joseph.markiewicz/Documents/dbt_packages/ad_reporting/tiktok/dbt_tiktok_ads_source/integration_tests/dbt_packages/fivetran_utils", "path": "macros/snowflake_seed_data.sql", "original_file_path": "macros/snowflake_seed_data.sql", "name": "snowflake_seed_data", "macro_sql": "{% macro snowflake_seed_data(seed_name) %}\n\n{% if target.type == 'snowflake' %}\n{{ return(ref(seed_name ~ '_snowflake')) }}\n{% else %}\n{{ return(ref(seed_name)) }}\n{% endif %}\n\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1661544121.588002}, "macro.fivetran_utils.fill_staging_columns": {"unique_id": "macro.fivetran_utils.fill_staging_columns", "package_name": "fivetran_utils", "root_path": "/Users/joseph.markiewicz/Documents/dbt_packages/ad_reporting/tiktok/dbt_tiktok_ads_source/integration_tests/dbt_packages/fivetran_utils", "path": "macros/fill_staging_columns.sql", "original_file_path": "macros/fill_staging_columns.sql", "name": "fill_staging_columns", "macro_sql": "{% macro fill_staging_columns(source_columns, staging_columns) -%}\n\n{%- set source_column_names = source_columns|map(attribute='name')|map('lower')|list -%}\n\n{%- for column in staging_columns %}\n {% if column.name|lower in source_column_names -%}\n {{ fivetran_utils.quote_column(column) }} as \n {%- if 'alias' in column %} {{ column.alias }} {% else %} {{ fivetran_utils.quote_column(column) }} {%- endif -%}\n {%- else -%}\n cast(null as {{ column.datatype }})\n {%- if 'alias' in column %} as {{ column.alias }} {% else %} as {{ fivetran_utils.quote_column(column) }} {% endif -%}\n {%- endif -%}\n {%- if not loop.last -%} , {% endif -%}\n{% endfor %}\n\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.fivetran_utils.quote_column"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1661544121.589586}, "macro.fivetran_utils.quote_column": {"unique_id": "macro.fivetran_utils.quote_column", "package_name": "fivetran_utils", "root_path": "/Users/joseph.markiewicz/Documents/dbt_packages/ad_reporting/tiktok/dbt_tiktok_ads_source/integration_tests/dbt_packages/fivetran_utils", "path": "macros/fill_staging_columns.sql", "original_file_path": "macros/fill_staging_columns.sql", "name": "quote_column", "macro_sql": "{% macro quote_column(column) %}\n {% if 'quote' in column %}\n {% if column.quote %}\n {% if target.type in ('bigquery', 'spark') %}\n `{{ column.name }}`\n {% elif target.type == 'snowflake' %}\n \"{{ column.name | upper }}\"\n {% else %}\n \"{{ column.name }}\"\n {% endif %}\n {% else %}\n {{ column.name }}\n {% endif %}\n {% else %}\n {{ column.name }}\n {% endif %}\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1661544121.590165}, "macro.fivetran_utils.json_extract": {"unique_id": "macro.fivetran_utils.json_extract", "package_name": "fivetran_utils", "root_path": "/Users/joseph.markiewicz/Documents/dbt_packages/ad_reporting/tiktok/dbt_tiktok_ads_source/integration_tests/dbt_packages/fivetran_utils", "path": "macros/json_extract.sql", "original_file_path": "macros/json_extract.sql", "name": "json_extract", "macro_sql": "{% macro json_extract(string, string_path) -%}\n\n{{ adapter.dispatch('json_extract', 'fivetran_utils') (string, string_path) }}\n\n{%- endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.fivetran_utils.postgres__json_extract"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1661544121.590838}, "macro.fivetran_utils.default__json_extract": {"unique_id": "macro.fivetran_utils.default__json_extract", "package_name": "fivetran_utils", "root_path": "/Users/joseph.markiewicz/Documents/dbt_packages/ad_reporting/tiktok/dbt_tiktok_ads_source/integration_tests/dbt_packages/fivetran_utils", "path": "macros/json_extract.sql", "original_file_path": "macros/json_extract.sql", "name": "default__json_extract", "macro_sql": "{% macro default__json_extract(string, string_path) %}\n\n json_extract_path_text({{string}}, {{ \"'\" ~ string_path ~ \"'\" }} )\n \n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1661544121.5909991}, "macro.fivetran_utils.snowflake__json_extract": {"unique_id": "macro.fivetran_utils.snowflake__json_extract", "package_name": "fivetran_utils", "root_path": "/Users/joseph.markiewicz/Documents/dbt_packages/ad_reporting/tiktok/dbt_tiktok_ads_source/integration_tests/dbt_packages/fivetran_utils", "path": "macros/json_extract.sql", "original_file_path": "macros/json_extract.sql", "name": "snowflake__json_extract", "macro_sql": "{% macro snowflake__json_extract(string, string_path) %}\n\n json_extract_path_text(try_parse_json( {{string}} ), {{ \"'\" ~ string_path ~ \"'\" }} )\n\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1661544121.5911522}, "macro.fivetran_utils.redshift__json_extract": {"unique_id": "macro.fivetran_utils.redshift__json_extract", "package_name": "fivetran_utils", "root_path": "/Users/joseph.markiewicz/Documents/dbt_packages/ad_reporting/tiktok/dbt_tiktok_ads_source/integration_tests/dbt_packages/fivetran_utils", "path": "macros/json_extract.sql", "original_file_path": "macros/json_extract.sql", "name": "redshift__json_extract", "macro_sql": "{% macro redshift__json_extract(string, string_path) %}\n\n case when is_valid_json( {{string}} ) then json_extract_path_text({{string}}, {{ \"'\" ~ string_path ~ \"'\" }} ) else null end\n \n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1661544121.591325}, "macro.fivetran_utils.bigquery__json_extract": {"unique_id": "macro.fivetran_utils.bigquery__json_extract", "package_name": "fivetran_utils", "root_path": "/Users/joseph.markiewicz/Documents/dbt_packages/ad_reporting/tiktok/dbt_tiktok_ads_source/integration_tests/dbt_packages/fivetran_utils", "path": "macros/json_extract.sql", "original_file_path": "macros/json_extract.sql", "name": "bigquery__json_extract", "macro_sql": "{% macro bigquery__json_extract(string, string_path) %}\n\n json_extract_scalar({{string}}, {{ \"'$.\" ~ string_path ~ \"'\" }} )\n\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1661544121.591481}, "macro.fivetran_utils.postgres__json_extract": {"unique_id": "macro.fivetran_utils.postgres__json_extract", "package_name": "fivetran_utils", "root_path": "/Users/joseph.markiewicz/Documents/dbt_packages/ad_reporting/tiktok/dbt_tiktok_ads_source/integration_tests/dbt_packages/fivetran_utils", "path": "macros/json_extract.sql", "original_file_path": "macros/json_extract.sql", "name": "postgres__json_extract", "macro_sql": "{% macro postgres__json_extract(string, string_path) %}\n\n {{string}}::json->>{{\"'\" ~ string_path ~ \"'\" }}\n\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1661544121.591634}, "macro.fivetran_utils.collect_freshness": {"unique_id": "macro.fivetran_utils.collect_freshness", "package_name": "fivetran_utils", "root_path": "/Users/joseph.markiewicz/Documents/dbt_packages/ad_reporting/tiktok/dbt_tiktok_ads_source/integration_tests/dbt_packages/fivetran_utils", "path": "macros/collect_freshness.sql", "original_file_path": "macros/collect_freshness.sql", "name": "collect_freshness", "macro_sql": "{% macro collect_freshness(source, loaded_at_field, filter) %}\n {{ return(adapter.dispatch('collect_freshness')(source, loaded_at_field, filter))}}\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.fivetran_utils.default__collect_freshness"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1661544121.592555}, "macro.fivetran_utils.default__collect_freshness": {"unique_id": "macro.fivetran_utils.default__collect_freshness", "package_name": "fivetran_utils", "root_path": "/Users/joseph.markiewicz/Documents/dbt_packages/ad_reporting/tiktok/dbt_tiktok_ads_source/integration_tests/dbt_packages/fivetran_utils", "path": "macros/collect_freshness.sql", "original_file_path": "macros/collect_freshness.sql", "name": "default__collect_freshness", "macro_sql": "{% macro default__collect_freshness(source, loaded_at_field, filter) %}\n {% call statement('collect_freshness', fetch_result=True, auto_begin=False) -%}\n\n {%- set enabled_array = [] -%}\n {% for node in graph.sources.values() %}\n {% if node.identifier == source.identifier %}\n {% if (node.meta['is_enabled'] | default(true)) %}\n {%- do enabled_array.append(1) -%}\n {% endif %}\n {% endif %}\n {% endfor %}\n {% set is_enabled = (enabled_array != []) %}\n\n select\n {% if is_enabled %}\n max({{ loaded_at_field }})\n {% else %} \n {{ current_timestamp() }} {% endif %} as max_loaded_at,\n {{ current_timestamp() }} as snapshotted_at\n\n {% if is_enabled %}\n from {{ source }}\n {% if filter %}\n where {{ filter }}\n {% endif %}\n {% endif %}\n\n {% endcall %}\n {{ return(load_result('collect_freshness').table) }}\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.dbt.statement", "macro.dbt_utils.current_timestamp"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1661544121.5935528}, "macro.fivetran_utils.timestamp_add": {"unique_id": "macro.fivetran_utils.timestamp_add", "package_name": "fivetran_utils", "root_path": "/Users/joseph.markiewicz/Documents/dbt_packages/ad_reporting/tiktok/dbt_tiktok_ads_source/integration_tests/dbt_packages/fivetran_utils", "path": "macros/timestamp_add.sql", "original_file_path": "macros/timestamp_add.sql", "name": "timestamp_add", "macro_sql": "{% macro timestamp_add(datepart, interval, from_timestamp) -%}\n\n{{ adapter.dispatch('timestamp_add', 'fivetran_utils') (datepart, interval, from_timestamp) }}\n\n{%- endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.fivetran_utils.postgres__timestamp_add"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1661544121.594413}, "macro.fivetran_utils.default__timestamp_add": {"unique_id": "macro.fivetran_utils.default__timestamp_add", "package_name": "fivetran_utils", "root_path": "/Users/joseph.markiewicz/Documents/dbt_packages/ad_reporting/tiktok/dbt_tiktok_ads_source/integration_tests/dbt_packages/fivetran_utils", "path": "macros/timestamp_add.sql", "original_file_path": "macros/timestamp_add.sql", "name": "default__timestamp_add", "macro_sql": "{% macro default__timestamp_add(datepart, interval, from_timestamp) %}\n\n timestampadd(\n {{ datepart }},\n {{ interval }},\n {{ from_timestamp }}\n )\n\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1661544121.594578}, "macro.fivetran_utils.bigquery__timestamp_add": {"unique_id": "macro.fivetran_utils.bigquery__timestamp_add", "package_name": "fivetran_utils", "root_path": "/Users/joseph.markiewicz/Documents/dbt_packages/ad_reporting/tiktok/dbt_tiktok_ads_source/integration_tests/dbt_packages/fivetran_utils", "path": "macros/timestamp_add.sql", "original_file_path": "macros/timestamp_add.sql", "name": "bigquery__timestamp_add", "macro_sql": "{% macro bigquery__timestamp_add(datepart, interval, from_timestamp) %}\n\n timestamp_add({{ from_timestamp }}, interval {{ interval }} {{ datepart }})\n\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1661544121.5947342}, "macro.fivetran_utils.redshift__timestamp_add": {"unique_id": "macro.fivetran_utils.redshift__timestamp_add", "package_name": "fivetran_utils", "root_path": "/Users/joseph.markiewicz/Documents/dbt_packages/ad_reporting/tiktok/dbt_tiktok_ads_source/integration_tests/dbt_packages/fivetran_utils", "path": "macros/timestamp_add.sql", "original_file_path": "macros/timestamp_add.sql", "name": "redshift__timestamp_add", "macro_sql": "{% macro redshift__timestamp_add(datepart, interval, from_timestamp) %}\n\n dateadd(\n {{ datepart }},\n {{ interval }},\n {{ from_timestamp }}\n )\n\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1661544121.5948951}, "macro.fivetran_utils.postgres__timestamp_add": {"unique_id": "macro.fivetran_utils.postgres__timestamp_add", "package_name": "fivetran_utils", "root_path": "/Users/joseph.markiewicz/Documents/dbt_packages/ad_reporting/tiktok/dbt_tiktok_ads_source/integration_tests/dbt_packages/fivetran_utils", "path": "macros/timestamp_add.sql", "original_file_path": "macros/timestamp_add.sql", "name": "postgres__timestamp_add", "macro_sql": "{% macro postgres__timestamp_add(datepart, interval, from_timestamp) %}\n\n {{ from_timestamp }} + ((interval '1 {{ datepart }}') * ({{ interval }}))\n\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1661544121.595048}, "macro.fivetran_utils.spark__timestamp_add": {"unique_id": "macro.fivetran_utils.spark__timestamp_add", "package_name": "fivetran_utils", "root_path": "/Users/joseph.markiewicz/Documents/dbt_packages/ad_reporting/tiktok/dbt_tiktok_ads_source/integration_tests/dbt_packages/fivetran_utils", "path": "macros/timestamp_add.sql", "original_file_path": "macros/timestamp_add.sql", "name": "spark__timestamp_add", "macro_sql": "{% macro spark__timestamp_add(datepart, interval, from_timestamp) %}\n\n {{ dbt_utils.dateadd(datepart, interval, from_timestamp) }}\n \n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.dbt_utils.dateadd"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1661544121.595222}, "macro.fivetran_utils.ceiling": {"unique_id": "macro.fivetran_utils.ceiling", "package_name": "fivetran_utils", "root_path": "/Users/joseph.markiewicz/Documents/dbt_packages/ad_reporting/tiktok/dbt_tiktok_ads_source/integration_tests/dbt_packages/fivetran_utils", "path": "macros/ceiling.sql", "original_file_path": "macros/ceiling.sql", "name": "ceiling", "macro_sql": "{% macro ceiling(num) -%}\n\n{{ adapter.dispatch('ceiling', 'fivetran_utils') (num) }}\n\n{%- endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.fivetran_utils.default__ceiling"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1661544121.595555}, "macro.fivetran_utils.default__ceiling": {"unique_id": "macro.fivetran_utils.default__ceiling", "package_name": "fivetran_utils", "root_path": "/Users/joseph.markiewicz/Documents/dbt_packages/ad_reporting/tiktok/dbt_tiktok_ads_source/integration_tests/dbt_packages/fivetran_utils", "path": "macros/ceiling.sql", "original_file_path": "macros/ceiling.sql", "name": "default__ceiling", "macro_sql": "{% macro default__ceiling(num) %}\n ceiling({{ num }})\n\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1661544121.5957508}, "macro.fivetran_utils.snowflake__ceiling": {"unique_id": "macro.fivetran_utils.snowflake__ceiling", "package_name": "fivetran_utils", "root_path": "/Users/joseph.markiewicz/Documents/dbt_packages/ad_reporting/tiktok/dbt_tiktok_ads_source/integration_tests/dbt_packages/fivetran_utils", "path": "macros/ceiling.sql", "original_file_path": "macros/ceiling.sql", "name": "snowflake__ceiling", "macro_sql": "{% macro snowflake__ceiling(num) %}\n ceil({{ num }})\n\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1661544121.595855}, "macro.fivetran_utils.remove_prefix_from_columns": {"unique_id": "macro.fivetran_utils.remove_prefix_from_columns", "package_name": "fivetran_utils", "root_path": "/Users/joseph.markiewicz/Documents/dbt_packages/ad_reporting/tiktok/dbt_tiktok_ads_source/integration_tests/dbt_packages/fivetran_utils", "path": "macros/remove_prefix_from_columns.sql", "original_file_path": "macros/remove_prefix_from_columns.sql", "name": "remove_prefix_from_columns", "macro_sql": "{% macro remove_prefix_from_columns(columns, prefix='', exclude=[]) %}\n\n {%- for col in columns if col.name not in exclude -%}\n {%- if col.name[:prefix|length]|lower == prefix -%}\n {{ col.name }} as {{ col.name[prefix|length:] }}\n {%- else -%}\n {{ col.name }}\n {%- endif -%}\n {%- if not loop.last -%},{%- endif %}\n {% endfor -%}\n\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1661544121.596564}, "macro.fivetran_utils.union_data": {"unique_id": "macro.fivetran_utils.union_data", "package_name": "fivetran_utils", "root_path": "/Users/joseph.markiewicz/Documents/dbt_packages/ad_reporting/tiktok/dbt_tiktok_ads_source/integration_tests/dbt_packages/fivetran_utils", "path": "macros/union_data.sql", "original_file_path": "macros/union_data.sql", "name": "union_data", "macro_sql": "{% macro union_data(table_identifier, database_variable, schema_variable, default_database, default_schema, default_variable, union_schema_variable='union_schemas', union_database_variable='union_databases') -%}\n\n{{ adapter.dispatch('union_data', 'fivetran_utils') (\n table_identifier, \n database_variable, \n schema_variable, \n default_database, \n default_schema, \n default_variable,\n union_schema_variable,\n union_database_variable\n ) }}\n\n{%- endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.fivetran_utils.default__union_data"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1661544121.5977888}, "macro.fivetran_utils.default__union_data": {"unique_id": "macro.fivetran_utils.default__union_data", "package_name": "fivetran_utils", "root_path": "/Users/joseph.markiewicz/Documents/dbt_packages/ad_reporting/tiktok/dbt_tiktok_ads_source/integration_tests/dbt_packages/fivetran_utils", "path": "macros/union_data.sql", "original_file_path": "macros/union_data.sql", "name": "default__union_data", "macro_sql": "{% macro default__union_data(\n table_identifier, \n database_variable, \n schema_variable, \n default_database, \n default_schema, \n default_variable,\n union_schema_variable,\n union_database_variable\n ) %}\n\n{% if var(union_schema_variable, none) %}\n\n {% set relations = [] %}\n \n {% if var(union_schema_variable) is string %}\n {% set trimmed = var(union_schema_variable)|trim('[')|trim(']') %}\n {% set schemas = trimmed.split(',')|map('trim',\" \")|map('trim','\"')|map('trim',\"'\") %}\n {% else %}\n {% set schemas = var(union_schema_variable) %}\n {% endif %}\n\n {% for schema in var(union_schema_variable) %}\n\n {% set relation=adapter.get_relation(\n database=var(database_variable, default_database),\n schema=schema,\n identifier=table_identifier\n ) -%}\n \n {% set relation_exists=relation is not none %}\n\n {% if relation_exists %}\n\n {% do relations.append(relation) %}\n \n {% endif %}\n\n {% endfor %}\n\n {{ dbt_utils.union_relations(relations) }}\n\n{% elif var(union_database_variable, none) %}\n\n {% set relations = [] %}\n\n {% for database in var(union_database_variable) %}\n\n {% set relation=adapter.get_relation(\n database=database,\n schema=var(schema_variable, default_schema),\n identifier=table_identifier\n ) -%}\n\n {% set relation_exists=relation is not none %}\n\n {% if relation_exists %}\n\n {% do relations.append(relation) %}\n \n {% endif %}\n\n {% endfor %}\n\n {{ dbt_utils.union_relations(relations) }}\n\n{% else %}\n\n select * \n from {{ var(default_variable) }}\n\n{% endif %}\n\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.dbt_utils.union_relations"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1661544121.5995378}, "macro.fivetran_utils.dummy_coalesce_value": {"unique_id": "macro.fivetran_utils.dummy_coalesce_value", "package_name": "fivetran_utils", "root_path": "/Users/joseph.markiewicz/Documents/dbt_packages/ad_reporting/tiktok/dbt_tiktok_ads_source/integration_tests/dbt_packages/fivetran_utils", "path": "macros/dummy_coalesce_value.sql", "original_file_path": "macros/dummy_coalesce_value.sql", "name": "dummy_coalesce_value", "macro_sql": "{% macro dummy_coalesce_value(column) %}\n\n{% set coalesce_value = {\n 'STRING': \"'DUMMY_STRING'\",\n 'BOOLEAN': 'null',\n 'INT': 999999999,\n 'FLOAT': 999999999.99,\n 'TIMESTAMP': 'cast(\"2099-12-31\" as timestamp)',\n 'DATE': 'cast(\"2099-12-31\" as date)',\n} %}\n\n{% if column.is_float() %}\n{{ return(coalesce_value['FLOAT']) }}\n\n{% elif column.is_numeric() %}\n{{ return(coalesce_value['INT']) }}\n\n{% elif column.is_string() %}\n{{ return(coalesce_value['STRING']) }}\n\n{% elif column.data_type|lower == 'boolean' %}\n{{ return(coalesce_value['BOOLEAN']) }}\n\n{% elif 'timestamp' in column.data_type|lower %}\n{{ return(coalesce_value['TIMESTAMP']) }}\n\n{% elif 'date' in column.data_type|lower %}\n{{ return(coalesce_value['DATE']) }}\n\n{% elif 'int' in column.data_type|lower %}\n{{ return(coalesce_value['INT']) }}\n\n{% endif %}\n\n\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1661544121.601061}, "macro.fivetran_utils.array_agg": {"unique_id": "macro.fivetran_utils.array_agg", "package_name": "fivetran_utils", "root_path": "/Users/joseph.markiewicz/Documents/dbt_packages/ad_reporting/tiktok/dbt_tiktok_ads_source/integration_tests/dbt_packages/fivetran_utils", "path": "macros/array_agg.sql", "original_file_path": "macros/array_agg.sql", "name": "array_agg", "macro_sql": "{% macro array_agg(field_to_agg) -%}\n\n{{ adapter.dispatch('array_agg', 'fivetran_utils') (field_to_agg) }}\n\n{%- endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.fivetran_utils.default__array_agg"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1661544121.601428}, "macro.fivetran_utils.default__array_agg": {"unique_id": "macro.fivetran_utils.default__array_agg", "package_name": "fivetran_utils", "root_path": "/Users/joseph.markiewicz/Documents/dbt_packages/ad_reporting/tiktok/dbt_tiktok_ads_source/integration_tests/dbt_packages/fivetran_utils", "path": "macros/array_agg.sql", "original_file_path": "macros/array_agg.sql", "name": "default__array_agg", "macro_sql": "{% macro default__array_agg(field_to_agg) %}\n array_agg({{ field_to_agg }})\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1661544121.601532}, "macro.fivetran_utils.redshift__array_agg": {"unique_id": "macro.fivetran_utils.redshift__array_agg", "package_name": "fivetran_utils", "root_path": "/Users/joseph.markiewicz/Documents/dbt_packages/ad_reporting/tiktok/dbt_tiktok_ads_source/integration_tests/dbt_packages/fivetran_utils", "path": "macros/array_agg.sql", "original_file_path": "macros/array_agg.sql", "name": "redshift__array_agg", "macro_sql": "{% macro redshift__array_agg(field_to_agg) %}\n listagg({{ field_to_agg }}, ',')\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1661544121.6016362}, "macro.fivetran_utils.empty_variable_warning": {"unique_id": "macro.fivetran_utils.empty_variable_warning", "package_name": "fivetran_utils", "root_path": "/Users/joseph.markiewicz/Documents/dbt_packages/ad_reporting/tiktok/dbt_tiktok_ads_source/integration_tests/dbt_packages/fivetran_utils", "path": "macros/empty_variable_warning.sql", "original_file_path": "macros/empty_variable_warning.sql", "name": "empty_variable_warning", "macro_sql": "{% macro empty_variable_warning(variable, downstream_model) %}\n\n{% if not var(variable) %}\n{{ log(\n \"\"\"\n Warning: You have passed an empty list to the \"\"\" ~ variable ~ \"\"\".\n As a result, you won't see the history of any columns in the \"\"\" ~ downstream_model ~ \"\"\" model.\n \"\"\",\n info=True\n) }}\n{% endif %}\n\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1661544121.602132}, "macro.fivetran_utils.enabled_vars_one_true": {"unique_id": "macro.fivetran_utils.enabled_vars_one_true", "package_name": "fivetran_utils", "root_path": "/Users/joseph.markiewicz/Documents/dbt_packages/ad_reporting/tiktok/dbt_tiktok_ads_source/integration_tests/dbt_packages/fivetran_utils", "path": "macros/enabled_vars_one_true.sql", "original_file_path": "macros/enabled_vars_one_true.sql", "name": "enabled_vars_one_true", "macro_sql": "{% macro enabled_vars_one_true(vars) %}\n\n{% for v in vars %}\n \n {% if var(v, False) == True %}\n {{ return(True) }}\n {% endif %}\n\n{% endfor %}\n\n{{ return(False) }}\n\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1661544121.602612}, "macro.tiktok_ads_source.get_ad_group_history_columns": {"unique_id": "macro.tiktok_ads_source.get_ad_group_history_columns", "package_name": "tiktok_ads_source", "root_path": "/Users/joseph.markiewicz/Documents/dbt_packages/ad_reporting/tiktok/dbt_tiktok_ads_source/integration_tests/dbt_packages/tiktok_ads_source", "path": "macros/get_ad_group_history_columns.sql", "original_file_path": "macros/get_ad_group_history_columns.sql", "name": "get_ad_group_history_columns", "macro_sql": "{% macro get_ad_group_history_columns() %}\n\n{% set columns = [\n {\"name\": \"action_days\", \"datatype\": dbt_utils.type_numeric()},\n {\"name\": \"adgroup_id\", \"datatype\": dbt_utils.type_numeric()},\n {\"name\": \"adgroup_name\", \"datatype\": dbt_utils.type_string()},\n {\"name\": \"advertiser_id\", \"datatype\": dbt_utils.type_numeric()},\n {\"name\": \"audience_type\", \"datatype\": dbt_utils.type_string()},\n {\"name\": \"budget\", \"datatype\": dbt_utils.type_float()},\n {\"name\": \"campaign_id\", \"datatype\": dbt_utils.type_numeric()},\n {\"name\": \"category\", \"datatype\": dbt_utils.type_numeric()},\n {\"name\": \"display_name\", \"datatype\": dbt_utils.type_string()},\n {\"name\": \"frequency\", \"datatype\": dbt_utils.type_numeric()},\n {\"name\": \"frequency_schedule\", \"datatype\": dbt_utils.type_numeric()},\n {\"name\": \"gender\", \"datatype\": dbt_utils.type_string()},\n {\"name\": \"landing_page_url\", \"datatype\": dbt_utils.type_string()},\n {\"name\": \"updated_at\", \"datatype\": dbt_utils.type_timestamp()},\n {\"name\": \"interest_category_v_2\", \"datatype\": dbt_utils.type_string()},\n {\"name\": \"action_categories\", \"datatype\": dbt_utils.type_string()},\n {\"name\": \"age\", \"datatype\": dbt_utils.type_string()},\n {\"name\": \"languages\", \"datatype\": dbt_utils.type_string()}\n\n] %}\n\n{{ return(columns) }}\n\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.dbt_utils.type_numeric", "macro.dbt_utils.type_string", "macro.dbt_utils.type_float", "macro.dbt_utils.type_timestamp"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1661544121.6048992}, "macro.tiktok_ads_source.get_ad_group_report_hourly_columns": {"unique_id": "macro.tiktok_ads_source.get_ad_group_report_hourly_columns", "package_name": "tiktok_ads_source", "root_path": "/Users/joseph.markiewicz/Documents/dbt_packages/ad_reporting/tiktok/dbt_tiktok_ads_source/integration_tests/dbt_packages/tiktok_ads_source", "path": "macros/get_ad_group_report_hourly_columns.sql", "original_file_path": "macros/get_ad_group_report_hourly_columns.sql", "name": "get_ad_group_report_hourly_columns", "macro_sql": "{% macro get_ad_group_report_hourly_columns() %}\n\n{% set columns = [\n {\"name\": \"adgroup_id\", \"datatype\": dbt_utils.type_numeric()},\n {\"name\": \"average_video_play\", \"datatype\": dbt_utils.type_float()},\n {\"name\": \"average_video_play_per_user\", \"datatype\": dbt_utils.type_float()},\n {\"name\": \"clicks\", \"datatype\": dbt_utils.type_numeric()},\n {\"name\": \"comments\", \"datatype\": dbt_utils.type_numeric()},\n {\"name\": \"conversion\", \"datatype\": dbt_utils.type_numeric()},\n {\"name\": \"conversion_rate\", \"datatype\": dbt_utils.type_float()},\n {\"name\": \"cost_per_conversion\", \"datatype\": dbt_utils.type_float()},\n {\"name\": \"cpc\", \"datatype\": dbt_utils.type_float()},\n {\"name\": \"cpm\", \"datatype\": dbt_utils.type_float()},\n {\"name\": \"ctr\", \"datatype\": dbt_utils.type_float()},\n {\"name\": \"follows\", \"datatype\": dbt_utils.type_numeric()},\n {\"name\": \"impressions\", \"datatype\": dbt_utils.type_numeric()},\n {\"name\": \"likes\", \"datatype\": dbt_utils.type_numeric()},\n {\"name\": \"profile_visits\", \"datatype\": dbt_utils.type_numeric()},\n {\"name\": \"reach\", \"datatype\": dbt_utils.type_numeric()},\n {\"name\": \"shares\", \"datatype\": dbt_utils.type_numeric()},\n {\"name\": \"spend\", \"datatype\": dbt_utils.type_numeric()},\n {\"name\": \"stat_time_hour\", \"datatype\": dbt_utils.type_timestamp()},\n {\"name\": \"video_play_actions\", \"datatype\": dbt_utils.type_numeric()},\n {\"name\": \"video_views_p_25\", \"datatype\": dbt_utils.type_numeric()},\n {\"name\": \"video_views_p_50\", \"datatype\": dbt_utils.type_numeric()},\n {\"name\": \"video_views_p_75\", \"datatype\": dbt_utils.type_numeric()},\n {\"name\": \"video_watched_2_s\", \"datatype\": dbt_utils.type_numeric()},\n {\"name\": \"video_watched_6_s\", \"datatype\": dbt_utils.type_numeric()}\n] %}\n\n{{ return(columns) }}\n\n{{ fivetran_utils.add_pass_through_columns(columns, var('tiktok_ads__ad_group_hourly_passthrough_metrics')) }}\n\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.dbt_utils.type_numeric", "macro.dbt_utils.type_float", "macro.dbt_utils.type_timestamp", "macro.fivetran_utils.add_pass_through_columns"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1661544121.608063}, "macro.tiktok_ads_source.get_advertiser_columns": {"unique_id": "macro.tiktok_ads_source.get_advertiser_columns", "package_name": "tiktok_ads_source", "root_path": "/Users/joseph.markiewicz/Documents/dbt_packages/ad_reporting/tiktok/dbt_tiktok_ads_source/integration_tests/dbt_packages/tiktok_ads_source", "path": "macros/get_advertiser_columns.sql", "original_file_path": "macros/get_advertiser_columns.sql", "name": "get_advertiser_columns", "macro_sql": "{% macro get_advertiser_columns() %}\n\n{% set columns = [\n {\"name\": \"address\", \"datatype\": dbt_utils.type_string()},\n {\"name\": \"balance\", \"datatype\": dbt_utils.type_float()},\n {\"name\": \"company\", \"datatype\": dbt_utils.type_string()},\n {\"name\": \"contacter\", \"datatype\": dbt_utils.type_string()},\n {\"name\": \"country\", \"datatype\": dbt_utils.type_string()},\n {\"name\": \"currency\", \"datatype\": dbt_utils.type_string()},\n {\"name\": \"description\", \"datatype\": dbt_utils.type_string()},\n {\"name\": \"email\", \"datatype\": dbt_utils.type_string()},\n {\"name\": \"id\", \"datatype\": dbt_utils.type_numeric()},\n {\"name\": \"industry\", \"datatype\": dbt_utils.type_string()},\n {\"name\": \"language\", \"datatype\": dbt_utils.type_string()},\n {\"name\": \"name\", \"datatype\": dbt_utils.type_string()},\n {\"name\": \"phone_number\", \"datatype\": dbt_utils.type_string()},\n {\"name\": \"telephone\", \"datatype\": dbt_utils.type_string()},\n {\"name\": \"timezone\", \"datatype\": dbt_utils.type_string()}\n] %}\n\n{{ return(columns) }}\n\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.dbt_utils.type_string", "macro.dbt_utils.type_float", "macro.dbt_utils.type_numeric"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1661544121.6099799}, "macro.tiktok_ads_source.get_campaign_history_columns": {"unique_id": "macro.tiktok_ads_source.get_campaign_history_columns", "package_name": "tiktok_ads_source", "root_path": "/Users/joseph.markiewicz/Documents/dbt_packages/ad_reporting/tiktok/dbt_tiktok_ads_source/integration_tests/dbt_packages/tiktok_ads_source", "path": "macros/get_campaign_history_columns.sql", "original_file_path": "macros/get_campaign_history_columns.sql", "name": "get_campaign_history_columns", "macro_sql": "{% macro get_campaign_history_columns() %}\n\n{% set columns = [\n {\"name\": \"advertiser_id\", \"datatype\": dbt_utils.type_numeric()},\n {\"name\": \"campaign_id\", \"datatype\": dbt_utils.type_numeric()},\n {\"name\": \"campaign_name\", \"datatype\": dbt_utils.type_string()},\n {\"name\": \"campaign_type\", \"datatype\": dbt_utils.type_string()},\n {\"name\": \"split_test_variable\", \"datatype\": dbt_utils.type_string()},\n {\"name\": \"updated_at\", \"datatype\": dbt_utils.type_timestamp()}\n] %}\n\n{{ return(columns) }}\n\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.dbt_utils.type_numeric", "macro.dbt_utils.type_string", "macro.dbt_utils.type_timestamp"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1661544121.6109471}, "macro.tiktok_ads_source.get_campaign_report_hourly_columns": {"unique_id": "macro.tiktok_ads_source.get_campaign_report_hourly_columns", "package_name": "tiktok_ads_source", "root_path": "/Users/joseph.markiewicz/Documents/dbt_packages/ad_reporting/tiktok/dbt_tiktok_ads_source/integration_tests/dbt_packages/tiktok_ads_source", "path": "macros/get_campaign_report_hourly_columns.sql", "original_file_path": "macros/get_campaign_report_hourly_columns.sql", "name": "get_campaign_report_hourly_columns", "macro_sql": "{% macro get_campaign_report_hourly_columns() %}\n\n{% set columns = [\n {\"name\": \"campaign_id\", \"datatype\": dbt_utils.type_numeric()},\n {\"name\": \"average_video_play\", \"datatype\": dbt_utils.type_float()},\n {\"name\": \"average_video_play_per_user\", \"datatype\": dbt_utils.type_float()},\n {\"name\": \"clicks\", \"datatype\": dbt_utils.type_numeric()},\n {\"name\": \"comments\", \"datatype\": dbt_utils.type_numeric()},\n {\"name\": \"conversion\", \"datatype\": dbt_utils.type_numeric()},\n {\"name\": \"conversion_rate\", \"datatype\": dbt_utils.type_float()},\n {\"name\": \"cost_per_conversion\", \"datatype\": dbt_utils.type_float()},\n {\"name\": \"cpc\", \"datatype\": dbt_utils.type_float()},\n {\"name\": \"cpm\", \"datatype\": dbt_utils.type_float()},\n {\"name\": \"ctr\", \"datatype\": dbt_utils.type_float()},\n {\"name\": \"follows\", \"datatype\": dbt_utils.type_numeric()},\n {\"name\": \"impressions\", \"datatype\": dbt_utils.type_numeric()},\n {\"name\": \"likes\", \"datatype\": dbt_utils.type_numeric()},\n {\"name\": \"profile_visits\", \"datatype\": dbt_utils.type_numeric()},\n {\"name\": \"reach\", \"datatype\": dbt_utils.type_numeric()},\n {\"name\": \"shares\", \"datatype\": dbt_utils.type_numeric()},\n {\"name\": \"spend\", \"datatype\": dbt_utils.type_numeric()},\n {\"name\": \"stat_time_hour\", \"datatype\": dbt_utils.type_timestamp()},\n {\"name\": \"video_play_actions\", \"datatype\": dbt_utils.type_numeric()},\n {\"name\": \"video_views_p_25\", \"datatype\": dbt_utils.type_numeric()},\n {\"name\": \"video_views_p_50\", \"datatype\": dbt_utils.type_numeric()},\n {\"name\": \"video_views_p_75\", \"datatype\": dbt_utils.type_numeric()},\n {\"name\": \"video_watched_2_s\", \"datatype\": dbt_utils.type_numeric()},\n {\"name\": \"video_watched_6_s\", \"datatype\": dbt_utils.type_numeric()}\n] %}\n\n{{ return(columns) }}\n\n{{ fivetran_utils.add_pass_through_columns(columns, var('tiktok_ads__campaign_hourly_passthrough_metrics')) }}\n\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.dbt_utils.type_numeric", "macro.dbt_utils.type_float", "macro.dbt_utils.type_timestamp", "macro.fivetran_utils.add_pass_through_columns"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1661544121.614196}, "macro.tiktok_ads_source.get_ad_history_columns": {"unique_id": "macro.tiktok_ads_source.get_ad_history_columns", "package_name": "tiktok_ads_source", "root_path": "/Users/joseph.markiewicz/Documents/dbt_packages/ad_reporting/tiktok/dbt_tiktok_ads_source/integration_tests/dbt_packages/tiktok_ads_source", "path": "macros/get_ad_history_columns.sql", "original_file_path": "macros/get_ad_history_columns.sql", "name": "get_ad_history_columns", "macro_sql": "{% macro get_ad_history_columns() %}\n\n{% set columns = [\n {\"name\": \"ad_id\", \"datatype\": dbt_utils.type_numeric()},\n {\"name\": \"ad_name\", \"datatype\": dbt_utils.type_string()},\n {\"name\": \"adgroup_id\", \"datatype\": dbt_utils.type_numeric()},\n {\"name\": \"advertiser_id\", \"datatype\": dbt_utils.type_numeric()},\n {\"name\": \"call_to_action\", \"datatype\": dbt_utils.type_string()},\n {\"name\": \"campaign_id\", \"datatype\": dbt_utils.type_numeric()},\n {\"name\": \"click_tracking_url\", \"datatype\": dbt_utils.type_string()},\n {\"name\": \"impression_tracking_url\", \"datatype\": dbt_utils.type_string()},\n {\"name\": \"landing_page_url\", \"datatype\": dbt_utils.type_string()},\n {\"name\": \"updated_at\", \"datatype\": dbt_utils.type_timestamp()}\n\n] %}\n\n{{ return(columns) }}\n\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.dbt_utils.type_numeric", "macro.dbt_utils.type_string", "macro.dbt_utils.type_timestamp"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1661544121.615783}, "macro.tiktok_ads_source.get_ad_report_hourly_columns": {"unique_id": "macro.tiktok_ads_source.get_ad_report_hourly_columns", "package_name": "tiktok_ads_source", "root_path": "/Users/joseph.markiewicz/Documents/dbt_packages/ad_reporting/tiktok/dbt_tiktok_ads_source/integration_tests/dbt_packages/tiktok_ads_source", "path": "macros/get_ad_report_hourly_columns.sql", "original_file_path": "macros/get_ad_report_hourly_columns.sql", "name": "get_ad_report_hourly_columns", "macro_sql": "{% macro get_ad_report_hourly_columns() %}\n\n{% set columns = [\n {\"name\": \"ad_id\", \"datatype\": dbt_utils.type_numeric()},\n {\"name\": \"average_video_play\", \"datatype\": dbt_utils.type_float()},\n {\"name\": \"average_video_play_per_user\", \"datatype\": dbt_utils.type_float()},\n {\"name\": \"clicks\", \"datatype\": dbt_utils.type_numeric()},\n {\"name\": \"comments\", \"datatype\": dbt_utils.type_numeric()},\n {\"name\": \"conversion\", \"datatype\": dbt_utils.type_numeric()},\n {\"name\": \"conversion_rate\", \"datatype\": dbt_utils.type_float()},\n {\"name\": \"cost_per_conversion\", \"datatype\": dbt_utils.type_float()},\n {\"name\": \"cpc\", \"datatype\": dbt_utils.type_float()},\n {\"name\": \"cpm\", \"datatype\": dbt_utils.type_float()},\n {\"name\": \"ctr\", \"datatype\": dbt_utils.type_float()},\n {\"name\": \"follows\", \"datatype\": dbt_utils.type_numeric()},\n {\"name\": \"impressions\", \"datatype\": dbt_utils.type_numeric()},\n {\"name\": \"likes\", \"datatype\": dbt_utils.type_numeric()},\n {\"name\": \"profile_visits\", \"datatype\": dbt_utils.type_numeric()},\n {\"name\": \"reach\", \"datatype\": dbt_utils.type_numeric()},\n {\"name\": \"shares\", \"datatype\": dbt_utils.type_numeric()},\n {\"name\": \"spend\", \"datatype\": dbt_utils.type_numeric()},\n {\"name\": \"stat_time_hour\", \"datatype\": dbt_utils.type_timestamp()},\n {\"name\": \"video_play_actions\", \"datatype\": dbt_utils.type_numeric()},\n {\"name\": \"video_views_p_25\", \"datatype\": dbt_utils.type_numeric()},\n {\"name\": \"video_views_p_50\", \"datatype\": dbt_utils.type_numeric()},\n {\"name\": \"video_views_p_75\", \"datatype\": dbt_utils.type_numeric()},\n {\"name\": \"video_watched_2_s\", \"datatype\": dbt_utils.type_numeric()},\n {\"name\": \"video_watched_6_s\", \"datatype\": dbt_utils.type_numeric()}\n] %}\n\n{{ return(columns) }}\n\n{{ fivetran_utils.add_pass_through_columns(columns, var('tiktok_ads__ad_hourly_passthrough_metrics')) }}\n\n{% endmacro %}", "resource_type": "macro", "tags": [], "depends_on": {"macros": ["macro.dbt_utils.type_numeric", "macro.dbt_utils.type_float", "macro.dbt_utils.type_timestamp", "macro.fivetran_utils.add_pass_through_columns"]}, "description": "", "meta": {}, "docs": {"show": true}, "patch_path": null, "arguments": [], "created_at": 1661544121.6188931}}, "docs": {"dbt.__overview__": {"unique_id": "dbt.__overview__", "package_name": "dbt", "root_path": "/opt/homebrew/Cellar/dbt-postgres/1.0.4/libexec/lib/python3.9/site-packages/dbt/include/global_project", "path": "overview.md", "original_file_path": "docs/overview.md", "name": "__overview__", "block_contents": "### Welcome!\n\nWelcome to the auto-generated documentation for your dbt project!\n\n### Navigation\n\nYou can use the `Project` and `Database` navigation tabs on the left side of the window to explore the models\nin your project.\n\n#### Project Tab\nThe `Project` tab mirrors the directory structure of your dbt project. In this tab, you can see all of the\nmodels defined in your dbt project, as well as models imported from dbt packages.\n\n#### Database Tab\nThe `Database` tab also exposes your models, but in a format that looks more like a database explorer. This view\nshows relations (tables and views) grouped into database schemas. Note that ephemeral models are _not_ shown\nin this interface, as they do not exist in the database.\n\n### Graph Exploration\nYou can click the blue icon on the bottom-right corner of the page to view the lineage graph of your models.\n\nOn model pages, you'll see the immediate parents and children of the model you're exploring. By clicking the `Expand`\nbutton at the top-right of this lineage pane, you'll be able to see all of the models that are used to build,\nor are built from, the model you're exploring.\n\nOnce expanded, you'll be able to use the `--select` and `--exclude` model selection syntax to filter the\nmodels in the graph. For more information on model selection, check out the [dbt docs](https://docs.getdbt.com/docs/model-selection-syntax).\n\nNote that you can also right-click on models to interactively filter and explore the graph.\n\n---\n\n### More information\n\n- [What is dbt](https://docs.getdbt.com/docs/introduction)?\n- Read the [dbt viewpoint](https://docs.getdbt.com/docs/viewpoint)\n- [Installation](https://docs.getdbt.com/docs/installation)\n- Join the [dbt Community](https://www.getdbt.com/community/) for questions and discussion"}}, "exposures": {}, "metrics": {}, "selectors": {}, "disabled": {}, "parent_map": {"seed.tiktok_ads_source_integration_tests.tiktok_ad_history_data": [], "seed.tiktok_ads_source_integration_tests.tiktok_adgroup_report_hourly_data": [], "seed.tiktok_ads_source_integration_tests.tiktok_campaign_history_data": [], "seed.tiktok_ads_source_integration_tests.tiktok_advertiser_data": [], "seed.tiktok_ads_source_integration_tests.tiktok_ad_report_hourly_data": [], "seed.tiktok_ads_source_integration_tests.tiktok_campaign_report_hourly_data": [], "seed.tiktok_ads_source_integration_tests.tiktok_adgroup_history_data": [], "model.tiktok_ads_source.stg_tiktok_ads__campaign_report_hourly": ["model.tiktok_ads_source.stg_tiktok_ads__campaign_report_hourly_tmp", "model.tiktok_ads_source.stg_tiktok_ads__campaign_report_hourly_tmp"], "model.tiktok_ads_source.stg_tiktok_ads__ad_group_report_hourly": ["model.tiktok_ads_source.stg_tiktok_ads__ad_group_report_hourly_tmp", "model.tiktok_ads_source.stg_tiktok_ads__ad_group_report_hourly_tmp"], "model.tiktok_ads_source.stg_tiktok_ads__ad_group_history": ["model.tiktok_ads_source.stg_tiktok_ads__ad_group_history_tmp", "model.tiktok_ads_source.stg_tiktok_ads__ad_group_history_tmp"], "model.tiktok_ads_source.stg_tiktok_ads__ad_report_hourly": ["model.tiktok_ads_source.stg_tiktok_ads__ad_report_hourly_tmp", "model.tiktok_ads_source.stg_tiktok_ads__ad_report_hourly_tmp"], "model.tiktok_ads_source.stg_tiktok_ads__advertiser": ["model.tiktok_ads_source.stg_tiktok_ads__advertiser_tmp", "model.tiktok_ads_source.stg_tiktok_ads__advertiser_tmp"], "model.tiktok_ads_source.stg_tiktok_ads__ad_history": ["model.tiktok_ads_source.stg_tiktok_ads__ad_history_tmp", "model.tiktok_ads_source.stg_tiktok_ads__ad_history_tmp"], "model.tiktok_ads_source.stg_tiktok_ads__campaign_history": ["model.tiktok_ads_source.stg_tiktok_ads__campaign_history_tmp", "model.tiktok_ads_source.stg_tiktok_ads__campaign_history_tmp"], "model.tiktok_ads_source.stg_tiktok_ads__ad_report_hourly_tmp": ["source.tiktok_ads_source.tiktok_ads.ad_report_hourly"], "model.tiktok_ads_source.stg_tiktok_ads__ad_history_tmp": ["source.tiktok_ads_source.tiktok_ads.ad_history"], "model.tiktok_ads_source.stg_tiktok_ads__ad_group_history_tmp": ["source.tiktok_ads_source.tiktok_ads.adgroup_history"], "model.tiktok_ads_source.stg_tiktok_ads__campaign_report_hourly_tmp": ["source.tiktok_ads_source.tiktok_ads.campaign_report_hourly"], "model.tiktok_ads_source.stg_tiktok_ads__ad_group_report_hourly_tmp": ["source.tiktok_ads_source.tiktok_ads.adgroup_report_hourly"], "model.tiktok_ads_source.stg_tiktok_ads__campaign_history_tmp": ["source.tiktok_ads_source.tiktok_ads.campaign_history"], "model.tiktok_ads_source.stg_tiktok_ads__advertiser_tmp": ["source.tiktok_ads_source.tiktok_ads.advertiser"], "test.tiktok_ads_source.unique_stg_tiktok_ads__advertiser_advertiser_id.078391ba66": ["model.tiktok_ads_source.stg_tiktok_ads__advertiser"], "test.tiktok_ads_source.not_null_stg_tiktok_ads__advertiser_advertiser_id.5deab92def": ["model.tiktok_ads_source.stg_tiktok_ads__advertiser"], "test.tiktok_ads_source.not_null_stg_tiktok_ads__ad_group_history_ad_group_id.04778d7fad": ["model.tiktok_ads_source.stg_tiktok_ads__ad_group_history"], "test.tiktok_ads_source.dbt_utils_unique_combination_of_columns_stg_tiktok_ads__ad_group_history_ad_group_id__updated_at.cec78c01de": ["model.tiktok_ads_source.stg_tiktok_ads__ad_group_history"], "test.tiktok_ads_source.not_null_stg_tiktok_ads__ad_history_ad_id.4ffd05b23a": ["model.tiktok_ads_source.stg_tiktok_ads__ad_history"], "test.tiktok_ads_source.dbt_utils_unique_combination_of_columns_stg_tiktok_ads__ad_history_ad_id__updated_at.66b86b4dd1": ["model.tiktok_ads_source.stg_tiktok_ads__ad_history"], "test.tiktok_ads_source.not_null_stg_tiktok_ads__campaign_history_campaign_id.7f9147d1e1": ["model.tiktok_ads_source.stg_tiktok_ads__campaign_history"], "test.tiktok_ads_source.dbt_utils_unique_combination_of_columns_stg_tiktok_ads__campaign_history_campaign_id__updated_at.72bf07011b": ["model.tiktok_ads_source.stg_tiktok_ads__campaign_history"], "test.tiktok_ads_source.not_null_stg_tiktok_ads__ad_report_hourly_ad_id.ee84d783ed": ["model.tiktok_ads_source.stg_tiktok_ads__ad_report_hourly"], "test.tiktok_ads_source.not_null_stg_tiktok_ads__ad_report_hourly_stat_time_hour.9e2a2dca81": ["model.tiktok_ads_source.stg_tiktok_ads__ad_report_hourly"], "test.tiktok_ads_source.dbt_utils_unique_combination_of_columns_stg_tiktok_ads__ad_report_hourly_ad_id__stat_time_hour.e70f8cef6d": ["model.tiktok_ads_source.stg_tiktok_ads__ad_report_hourly"], "test.tiktok_ads_source.not_null_stg_tiktok_ads__ad_group_report_hourly_ad_group_id.8da17119f1": ["model.tiktok_ads_source.stg_tiktok_ads__ad_group_report_hourly"], "test.tiktok_ads_source.not_null_stg_tiktok_ads__ad_group_report_hourly_stat_time_hour.ca4b495127": ["model.tiktok_ads_source.stg_tiktok_ads__ad_group_report_hourly"], "test.tiktok_ads_source.dbt_utils_unique_combination_of_columns_stg_tiktok_ads__ad_group_report_hourly_ad_group_id__stat_time_hour.1aeaeb71ad": ["model.tiktok_ads_source.stg_tiktok_ads__ad_group_report_hourly"], "test.tiktok_ads_source.not_null_stg_tiktok_ads__campaign_report_hourly_campaign_id.ef898379fb": ["model.tiktok_ads_source.stg_tiktok_ads__campaign_report_hourly"], "test.tiktok_ads_source.not_null_stg_tiktok_ads__campaign_report_hourly_stat_time_hour.e75e13184c": ["model.tiktok_ads_source.stg_tiktok_ads__campaign_report_hourly"], "test.tiktok_ads_source.dbt_utils_unique_combination_of_columns_stg_tiktok_ads__campaign_report_hourly_campaign_id__stat_time_hour.8e4a1e4b34": ["model.tiktok_ads_source.stg_tiktok_ads__campaign_report_hourly"], "source.tiktok_ads_source.tiktok_ads.advertiser": [], "source.tiktok_ads_source.tiktok_ads.campaign_history": [], "source.tiktok_ads_source.tiktok_ads.adgroup_history": [], "source.tiktok_ads_source.tiktok_ads.ad_history": [], "source.tiktok_ads_source.tiktok_ads.ad_report_hourly": [], "source.tiktok_ads_source.tiktok_ads.campaign_report_hourly": [], "source.tiktok_ads_source.tiktok_ads.adgroup_report_hourly": []}, "child_map": {"seed.tiktok_ads_source_integration_tests.tiktok_ad_history_data": [], "seed.tiktok_ads_source_integration_tests.tiktok_adgroup_report_hourly_data": [], "seed.tiktok_ads_source_integration_tests.tiktok_campaign_history_data": [], "seed.tiktok_ads_source_integration_tests.tiktok_advertiser_data": [], "seed.tiktok_ads_source_integration_tests.tiktok_ad_report_hourly_data": [], "seed.tiktok_ads_source_integration_tests.tiktok_campaign_report_hourly_data": [], "seed.tiktok_ads_source_integration_tests.tiktok_adgroup_history_data": [], "model.tiktok_ads_source.stg_tiktok_ads__campaign_report_hourly": ["test.tiktok_ads_source.dbt_utils_unique_combination_of_columns_stg_tiktok_ads__campaign_report_hourly_campaign_id__stat_time_hour.8e4a1e4b34", "test.tiktok_ads_source.not_null_stg_tiktok_ads__campaign_report_hourly_campaign_id.ef898379fb", "test.tiktok_ads_source.not_null_stg_tiktok_ads__campaign_report_hourly_stat_time_hour.e75e13184c"], "model.tiktok_ads_source.stg_tiktok_ads__ad_group_report_hourly": ["test.tiktok_ads_source.dbt_utils_unique_combination_of_columns_stg_tiktok_ads__ad_group_report_hourly_ad_group_id__stat_time_hour.1aeaeb71ad", "test.tiktok_ads_source.not_null_stg_tiktok_ads__ad_group_report_hourly_ad_group_id.8da17119f1", "test.tiktok_ads_source.not_null_stg_tiktok_ads__ad_group_report_hourly_stat_time_hour.ca4b495127"], "model.tiktok_ads_source.stg_tiktok_ads__ad_group_history": ["test.tiktok_ads_source.dbt_utils_unique_combination_of_columns_stg_tiktok_ads__ad_group_history_ad_group_id__updated_at.cec78c01de", "test.tiktok_ads_source.not_null_stg_tiktok_ads__ad_group_history_ad_group_id.04778d7fad"], "model.tiktok_ads_source.stg_tiktok_ads__ad_report_hourly": ["test.tiktok_ads_source.dbt_utils_unique_combination_of_columns_stg_tiktok_ads__ad_report_hourly_ad_id__stat_time_hour.e70f8cef6d", "test.tiktok_ads_source.not_null_stg_tiktok_ads__ad_report_hourly_ad_id.ee84d783ed", "test.tiktok_ads_source.not_null_stg_tiktok_ads__ad_report_hourly_stat_time_hour.9e2a2dca81"], "model.tiktok_ads_source.stg_tiktok_ads__advertiser": ["test.tiktok_ads_source.not_null_stg_tiktok_ads__advertiser_advertiser_id.5deab92def", "test.tiktok_ads_source.unique_stg_tiktok_ads__advertiser_advertiser_id.078391ba66"], "model.tiktok_ads_source.stg_tiktok_ads__ad_history": ["test.tiktok_ads_source.dbt_utils_unique_combination_of_columns_stg_tiktok_ads__ad_history_ad_id__updated_at.66b86b4dd1", "test.tiktok_ads_source.not_null_stg_tiktok_ads__ad_history_ad_id.4ffd05b23a"], "model.tiktok_ads_source.stg_tiktok_ads__campaign_history": ["test.tiktok_ads_source.dbt_utils_unique_combination_of_columns_stg_tiktok_ads__campaign_history_campaign_id__updated_at.72bf07011b", "test.tiktok_ads_source.not_null_stg_tiktok_ads__campaign_history_campaign_id.7f9147d1e1"], "model.tiktok_ads_source.stg_tiktok_ads__ad_report_hourly_tmp": ["model.tiktok_ads_source.stg_tiktok_ads__ad_report_hourly", "model.tiktok_ads_source.stg_tiktok_ads__ad_report_hourly"], "model.tiktok_ads_source.stg_tiktok_ads__ad_history_tmp": ["model.tiktok_ads_source.stg_tiktok_ads__ad_history", "model.tiktok_ads_source.stg_tiktok_ads__ad_history"], "model.tiktok_ads_source.stg_tiktok_ads__ad_group_history_tmp": ["model.tiktok_ads_source.stg_tiktok_ads__ad_group_history", "model.tiktok_ads_source.stg_tiktok_ads__ad_group_history"], "model.tiktok_ads_source.stg_tiktok_ads__campaign_report_hourly_tmp": ["model.tiktok_ads_source.stg_tiktok_ads__campaign_report_hourly", "model.tiktok_ads_source.stg_tiktok_ads__campaign_report_hourly"], "model.tiktok_ads_source.stg_tiktok_ads__ad_group_report_hourly_tmp": ["model.tiktok_ads_source.stg_tiktok_ads__ad_group_report_hourly", "model.tiktok_ads_source.stg_tiktok_ads__ad_group_report_hourly"], "model.tiktok_ads_source.stg_tiktok_ads__campaign_history_tmp": ["model.tiktok_ads_source.stg_tiktok_ads__campaign_history", "model.tiktok_ads_source.stg_tiktok_ads__campaign_history"], "model.tiktok_ads_source.stg_tiktok_ads__advertiser_tmp": ["model.tiktok_ads_source.stg_tiktok_ads__advertiser", "model.tiktok_ads_source.stg_tiktok_ads__advertiser"], "test.tiktok_ads_source.unique_stg_tiktok_ads__advertiser_advertiser_id.078391ba66": [], "test.tiktok_ads_source.not_null_stg_tiktok_ads__advertiser_advertiser_id.5deab92def": [], "test.tiktok_ads_source.not_null_stg_tiktok_ads__ad_group_history_ad_group_id.04778d7fad": [], "test.tiktok_ads_source.dbt_utils_unique_combination_of_columns_stg_tiktok_ads__ad_group_history_ad_group_id__updated_at.cec78c01de": [], "test.tiktok_ads_source.not_null_stg_tiktok_ads__ad_history_ad_id.4ffd05b23a": [], "test.tiktok_ads_source.dbt_utils_unique_combination_of_columns_stg_tiktok_ads__ad_history_ad_id__updated_at.66b86b4dd1": [], "test.tiktok_ads_source.not_null_stg_tiktok_ads__campaign_history_campaign_id.7f9147d1e1": [], "test.tiktok_ads_source.dbt_utils_unique_combination_of_columns_stg_tiktok_ads__campaign_history_campaign_id__updated_at.72bf07011b": [], "test.tiktok_ads_source.not_null_stg_tiktok_ads__ad_report_hourly_ad_id.ee84d783ed": [], "test.tiktok_ads_source.not_null_stg_tiktok_ads__ad_report_hourly_stat_time_hour.9e2a2dca81": [], "test.tiktok_ads_source.dbt_utils_unique_combination_of_columns_stg_tiktok_ads__ad_report_hourly_ad_id__stat_time_hour.e70f8cef6d": [], "test.tiktok_ads_source.not_null_stg_tiktok_ads__ad_group_report_hourly_ad_group_id.8da17119f1": [], "test.tiktok_ads_source.not_null_stg_tiktok_ads__ad_group_report_hourly_stat_time_hour.ca4b495127": [], "test.tiktok_ads_source.dbt_utils_unique_combination_of_columns_stg_tiktok_ads__ad_group_report_hourly_ad_group_id__stat_time_hour.1aeaeb71ad": [], "test.tiktok_ads_source.not_null_stg_tiktok_ads__campaign_report_hourly_campaign_id.ef898379fb": [], "test.tiktok_ads_source.not_null_stg_tiktok_ads__campaign_report_hourly_stat_time_hour.e75e13184c": [], "test.tiktok_ads_source.dbt_utils_unique_combination_of_columns_stg_tiktok_ads__campaign_report_hourly_campaign_id__stat_time_hour.8e4a1e4b34": [], "source.tiktok_ads_source.tiktok_ads.advertiser": ["model.tiktok_ads_source.stg_tiktok_ads__advertiser_tmp"], "source.tiktok_ads_source.tiktok_ads.campaign_history": ["model.tiktok_ads_source.stg_tiktok_ads__campaign_history_tmp"], "source.tiktok_ads_source.tiktok_ads.adgroup_history": ["model.tiktok_ads_source.stg_tiktok_ads__ad_group_history_tmp"], "source.tiktok_ads_source.tiktok_ads.ad_history": ["model.tiktok_ads_source.stg_tiktok_ads__ad_history_tmp"], "source.tiktok_ads_source.tiktok_ads.ad_report_hourly": ["model.tiktok_ads_source.stg_tiktok_ads__ad_report_hourly_tmp"], "source.tiktok_ads_source.tiktok_ads.campaign_report_hourly": ["model.tiktok_ads_source.stg_tiktok_ads__campaign_report_hourly_tmp"], "source.tiktok_ads_source.tiktok_ads.adgroup_report_hourly": ["model.tiktok_ads_source.stg_tiktok_ads__ad_group_report_hourly_tmp"]}} \ No newline at end of file diff --git a/docs/run_results.json b/docs/run_results.json index 95d7bd2..0e6529f 100644 --- a/docs/run_results.json +++ b/docs/run_results.json @@ -1 +1 @@ -{"metadata": {"dbt_schema_version": "https://schemas.getdbt.com/dbt/run-results/v4.json", "dbt_version": "1.0.0", "generated_at": "2022-01-06T18:49:27.854077Z", "invocation_id": "8ad2e9d0-66fc-47f9-abe0-fe38c6948257", "env": {}}, "results": [{"status": "success", "timing": [{"name": "compile", "started_at": "2022-01-06T18:49:25.159286Z", "completed_at": "2022-01-06T18:49:25.178370Z"}, {"name": "execute", "started_at": "2022-01-06T18:49:25.179707Z", "completed_at": "2022-01-06T18:49:25.179730Z"}], "thread_id": "Thread-1", "execution_time": 0.02376699447631836, "adapter_response": {}, "message": null, "failures": null, "unique_id": "model.tiktok_ads_source.stg_tiktok_ads__ad_group_history_tmp"}, {"status": "success", "timing": [{"name": "compile", "started_at": "2022-01-06T18:49:25.160330Z", "completed_at": "2022-01-06T18:49:25.178655Z"}, {"name": "execute", "started_at": "2022-01-06T18:49:25.179914Z", "completed_at": "2022-01-06T18:49:25.179922Z"}], "thread_id": "Thread-2", "execution_time": 0.023427963256835938, "adapter_response": {}, "message": null, "failures": null, "unique_id": "model.tiktok_ads_source.stg_tiktok_ads__ad_group_report_hourly_tmp"}, {"status": "success", "timing": [{"name": "compile", "started_at": "2022-01-06T18:49:25.165672Z", "completed_at": "2022-01-06T18:49:25.179340Z"}, {"name": "execute", "started_at": "2022-01-06T18:49:25.181310Z", "completed_at": "2022-01-06T18:49:25.181321Z"}], "thread_id": "Thread-3", "execution_time": 0.024337053298950195, "adapter_response": {}, "message": null, "failures": null, "unique_id": "model.tiktok_ads_source.stg_tiktok_ads__ad_history_tmp"}, {"status": "success", "timing": [{"name": "compile", "started_at": "2022-01-06T18:49:25.165867Z", "completed_at": "2022-01-06T18:49:25.179533Z"}, {"name": "execute", "started_at": "2022-01-06T18:49:25.181519Z", "completed_at": "2022-01-06T18:49:25.181529Z"}], "thread_id": "Thread-4", "execution_time": 0.024299144744873047, "adapter_response": {}, "message": null, "failures": null, "unique_id": "model.tiktok_ads_source.stg_tiktok_ads__ad_report_hourly_tmp"}, {"status": "success", "timing": [{"name": "compile", "started_at": "2022-01-06T18:49:25.185828Z", "completed_at": "2022-01-06T18:49:25.205346Z"}, {"name": "execute", "started_at": "2022-01-06T18:49:25.214948Z", "completed_at": "2022-01-06T18:49:25.214960Z"}], "thread_id": "Thread-2", "execution_time": 0.03225278854370117, "adapter_response": {}, "message": null, "failures": null, "unique_id": "model.tiktok_ads_source.stg_tiktok_ads__campaign_history_tmp"}, {"status": "success", "timing": [{"name": "compile", "started_at": "2022-01-06T18:49:25.185642Z", "completed_at": "2022-01-06T18:49:25.214077Z"}, {"name": "execute", "started_at": "2022-01-06T18:49:25.215442Z", "completed_at": "2022-01-06T18:49:25.215449Z"}], "thread_id": "Thread-1", "execution_time": 0.033735036849975586, "adapter_response": {}, "message": null, "failures": null, "unique_id": "model.tiktok_ads_source.stg_tiktok_ads__advertiser_tmp"}, {"status": "success", "timing": [{"name": "compile", "started_at": "2022-01-06T18:49:25.195052Z", "completed_at": "2022-01-06T18:49:25.215095Z"}, {"name": "execute", "started_at": "2022-01-06T18:49:25.217926Z", "completed_at": "2022-01-06T18:49:25.217935Z"}], "thread_id": "Thread-3", "execution_time": 0.03473687171936035, "adapter_response": {}, "message": null, "failures": null, "unique_id": "model.tiktok_ads_source.stg_tiktok_ads__campaign_report_hourly_tmp"}, {"status": "success", "timing": [{"name": "compile", "started_at": "2022-01-06T18:49:25.195240Z", "completed_at": "2022-01-06T18:49:26.174665Z"}, {"name": "execute", "started_at": "2022-01-06T18:49:26.174987Z", "completed_at": "2022-01-06T18:49:26.174998Z"}], "thread_id": "Thread-4", "execution_time": 1.1719632148742676, "adapter_response": {}, "message": null, "failures": null, "unique_id": "model.tiktok_ads_source.stg_tiktok_ads__ad_group_history"}, {"status": "success", "timing": [{"name": "compile", "started_at": "2022-01-06T18:49:25.221368Z", "completed_at": "2022-01-06T18:49:26.388980Z"}, {"name": "execute", "started_at": "2022-01-06T18:49:26.390291Z", "completed_at": "2022-01-06T18:49:26.390300Z"}], "thread_id": "Thread-1", "execution_time": 1.3582439422607422, "adapter_response": {}, "message": null, "failures": null, "unique_id": "model.tiktok_ads_source.stg_tiktok_ads__ad_history"}, {"status": "success", "timing": [{"name": "compile", "started_at": "2022-01-06T18:49:25.236168Z", "completed_at": "2022-01-06T18:49:26.388523Z"}, {"name": "execute", "started_at": "2022-01-06T18:49:26.388843Z", "completed_at": "2022-01-06T18:49:26.388854Z"}], "thread_id": "Thread-3", "execution_time": 1.3697190284729004, "adapter_response": {}, "message": null, "failures": null, "unique_id": "model.tiktok_ads_source.stg_tiktok_ads__ad_report_hourly"}, {"status": "success", "timing": [{"name": "compile", "started_at": "2022-01-06T18:49:25.220900Z", "completed_at": "2022-01-06T18:49:26.439192Z"}, {"name": "execute", "started_at": "2022-01-06T18:49:26.439536Z", "completed_at": "2022-01-06T18:49:26.439548Z"}], "thread_id": "Thread-2", "execution_time": 1.4170830249786377, "adapter_response": {}, "message": null, "failures": null, "unique_id": "model.tiktok_ads_source.stg_tiktok_ads__ad_group_report_hourly"}, {"status": "success", "timing": [{"name": "compile", "started_at": "2022-01-06T18:49:26.686056Z", "completed_at": "2022-01-06T18:49:26.692719Z"}, {"name": "execute", "started_at": "2022-01-06T18:49:26.693067Z", "completed_at": "2022-01-06T18:49:26.693076Z"}], "thread_id": "Thread-2", "execution_time": 0.007912874221801758, "adapter_response": {}, "message": null, "failures": null, "unique_id": "test.tiktok_ads_source.dbt_utils_unique_combination_of_columns_stg_tiktok_ads__ad_group_history_ad_group_id__updated_at.cec78c01de"}, {"status": "success", "timing": [{"name": "compile", "started_at": "2022-01-06T18:49:26.694629Z", "completed_at": "2022-01-06T18:49:26.705711Z"}, {"name": "execute", "started_at": "2022-01-06T18:49:26.706128Z", "completed_at": "2022-01-06T18:49:26.706139Z"}], "thread_id": "Thread-2", "execution_time": 0.012740135192871094, "adapter_response": {}, "message": null, "failures": null, "unique_id": "test.tiktok_ads_source.not_null_stg_tiktok_ads__ad_group_history_ad_group_id.04778d7fad"}, {"status": "success", "timing": [{"name": "compile", "started_at": "2022-01-06T18:49:26.715183Z", "completed_at": "2022-01-06T18:49:26.721000Z"}, {"name": "execute", "started_at": "2022-01-06T18:49:26.721410Z", "completed_at": "2022-01-06T18:49:26.721418Z"}], "thread_id": "Thread-2", "execution_time": 0.0070798397064208984, "adapter_response": {}, "message": null, "failures": null, "unique_id": "test.tiktok_ads_source.dbt_utils_unique_combination_of_columns_stg_tiktok_ads__ad_history_ad_id__updated_at.66b86b4dd1"}, {"status": "success", "timing": [{"name": "compile", "started_at": "2022-01-06T18:49:26.722358Z", "completed_at": "2022-01-06T18:49:26.742536Z"}, {"name": "execute", "started_at": "2022-01-06T18:49:26.744300Z", "completed_at": "2022-01-06T18:49:26.744332Z"}], "thread_id": "Thread-2", "execution_time": 0.022963285446166992, "adapter_response": {}, "message": null, "failures": null, "unique_id": "test.tiktok_ads_source.not_null_stg_tiktok_ads__ad_history_ad_id.4ffd05b23a"}, {"status": "success", "timing": [{"name": "compile", "started_at": "2022-01-06T18:49:26.746378Z", "completed_at": "2022-01-06T18:49:26.754179Z"}, {"name": "execute", "started_at": "2022-01-06T18:49:26.755119Z", "completed_at": "2022-01-06T18:49:26.755129Z"}], "thread_id": "Thread-2", "execution_time": 0.009985685348510742, "adapter_response": {}, "message": null, "failures": null, "unique_id": "test.tiktok_ads_source.dbt_utils_unique_combination_of_columns_stg_tiktok_ads__ad_report_hourly_ad_id__stat_time_hour.e70f8cef6d"}, {"status": "success", "timing": [{"name": "compile", "started_at": "2022-01-06T18:49:26.757076Z", "completed_at": "2022-01-06T18:49:26.763863Z"}, {"name": "execute", "started_at": "2022-01-06T18:49:26.764138Z", "completed_at": "2022-01-06T18:49:26.764147Z"}], "thread_id": "Thread-2", "execution_time": 0.008049249649047852, "adapter_response": {}, "message": null, "failures": null, "unique_id": "test.tiktok_ads_source.dbt_utils_unique_combination_of_columns_stg_tiktok_ads__ad_group_report_hourly_ad_group_id__stat_time_hour.1aeaeb71ad"}, {"status": "success", "timing": [{"name": "compile", "started_at": "2022-01-06T18:49:26.765082Z", "completed_at": "2022-01-06T18:49:26.768482Z"}, {"name": "execute", "started_at": "2022-01-06T18:49:26.768740Z", "completed_at": "2022-01-06T18:49:26.768747Z"}], "thread_id": "Thread-2", "execution_time": 0.004220008850097656, "adapter_response": {}, "message": null, "failures": null, "unique_id": "test.tiktok_ads_source.not_null_stg_tiktok_ads__ad_group_report_hourly_ad_group_id.8da17119f1"}, {"status": "success", "timing": [{"name": "compile", "started_at": "2022-01-06T18:49:26.769705Z", "completed_at": "2022-01-06T18:49:26.782075Z"}, {"name": "execute", "started_at": "2022-01-06T18:49:26.782344Z", "completed_at": "2022-01-06T18:49:26.782352Z"}], "thread_id": "Thread-2", "execution_time": 0.01324009895324707, "adapter_response": {}, "message": null, "failures": null, "unique_id": "test.tiktok_ads.dbt_utils_unique_combination_of_columns_int_tiktok_ads__most_recent_ad_group_ad_group_id__updated_at.e2e9914076"}, {"status": "success", "timing": [{"name": "compile", "started_at": "2022-01-06T18:49:26.783317Z", "completed_at": "2022-01-06T18:49:26.788043Z"}, {"name": "execute", "started_at": "2022-01-06T18:49:26.788308Z", "completed_at": "2022-01-06T18:49:26.788315Z"}], "thread_id": "Thread-2", "execution_time": 0.005584239959716797, "adapter_response": {}, "message": null, "failures": null, "unique_id": "test.tiktok_ads.not_null_int_tiktok_ads__most_recent_ad_group_ad_group_id.fcb8c561bc"}, {"status": "success", "timing": [{"name": "compile", "started_at": "2022-01-06T18:49:26.789228Z", "completed_at": "2022-01-06T18:49:26.796323Z"}, {"name": "execute", "started_at": "2022-01-06T18:49:26.796586Z", "completed_at": "2022-01-06T18:49:26.796594Z"}], "thread_id": "Thread-2", "execution_time": 0.00798797607421875, "adapter_response": {}, "message": null, "failures": null, "unique_id": "test.tiktok_ads.dbt_utils_unique_combination_of_columns_int_tiktok_ads__most_recent_ad_ad_id__updated_at.f58d824f65"}, {"status": "success", "timing": [{"name": "compile", "started_at": "2022-01-06T18:49:26.797448Z", "completed_at": "2022-01-06T18:49:26.802094Z"}, {"name": "execute", "started_at": "2022-01-06T18:49:26.802360Z", "completed_at": "2022-01-06T18:49:26.802367Z"}], "thread_id": "Thread-2", "execution_time": 0.005483865737915039, "adapter_response": {}, "message": null, "failures": null, "unique_id": "test.tiktok_ads.not_null_int_tiktok_ads__most_recent_ad_ad_id.14e9c145ca"}, {"status": "success", "timing": [{"name": "compile", "started_at": "2022-01-06T18:49:26.359586Z", "completed_at": "2022-01-06T18:49:27.282034Z"}, {"name": "execute", "started_at": "2022-01-06T18:49:27.282304Z", "completed_at": "2022-01-06T18:49:27.282314Z"}], "thread_id": "Thread-4", "execution_time": 1.1022319793701172, "adapter_response": {}, "message": null, "failures": null, "unique_id": "model.tiktok_ads_source.stg_tiktok_ads__campaign_history"}, {"status": "success", "timing": [{"name": "compile", "started_at": "2022-01-06T18:49:27.462528Z", "completed_at": "2022-01-06T18:49:27.471461Z"}, {"name": "execute", "started_at": "2022-01-06T18:49:27.471810Z", "completed_at": "2022-01-06T18:49:27.471821Z"}], "thread_id": "Thread-4", "execution_time": 0.010293960571289062, "adapter_response": {}, "message": null, "failures": null, "unique_id": "test.tiktok_ads_source.dbt_utils_unique_combination_of_columns_stg_tiktok_ads__campaign_history_campaign_id__updated_at.72bf07011b"}, {"status": "success", "timing": [{"name": "compile", "started_at": "2022-01-06T18:49:27.472898Z", "completed_at": "2022-01-06T18:49:27.477804Z"}, {"name": "execute", "started_at": "2022-01-06T18:49:27.478555Z", "completed_at": "2022-01-06T18:49:27.478564Z"}], "thread_id": "Thread-4", "execution_time": 0.0065097808837890625, "adapter_response": {}, "message": null, "failures": null, "unique_id": "test.tiktok_ads_source.not_null_stg_tiktok_ads__campaign_history_campaign_id.7f9147d1e1"}, {"status": "success", "timing": [{"name": "compile", "started_at": "2022-01-06T18:49:27.478714Z", "completed_at": "2022-01-06T18:49:27.488858Z"}, {"name": "execute", "started_at": "2022-01-06T18:49:27.494521Z", "completed_at": "2022-01-06T18:49:27.494532Z"}], "thread_id": "Thread-2", "execution_time": 0.01700901985168457, "adapter_response": {}, "message": null, "failures": null, "unique_id": "test.tiktok_ads.dbt_utils_unique_combination_of_columns_int_tiktok_ads__most_recent_campaign_campaign_id__updated_at.39077adf71"}, {"status": "success", "timing": [{"name": "compile", "started_at": "2022-01-06T18:49:27.488729Z", "completed_at": "2022-01-06T18:49:27.495368Z"}, {"name": "execute", "started_at": "2022-01-06T18:49:27.495667Z", "completed_at": "2022-01-06T18:49:27.495674Z"}], "thread_id": "Thread-4", "execution_time": 0.007816076278686523, "adapter_response": {}, "message": null, "failures": null, "unique_id": "test.tiktok_ads.not_null_int_tiktok_ads__most_recent_campaign_campaign_id.8cefa8981c"}, {"status": "success", "timing": [{"name": "compile", "started_at": "2022-01-06T18:49:26.655478Z", "completed_at": "2022-01-06T18:49:27.546122Z"}, {"name": "execute", "started_at": "2022-01-06T18:49:27.546393Z", "completed_at": "2022-01-06T18:49:27.546403Z"}], "thread_id": "Thread-1", "execution_time": 1.103442907333374, "adapter_response": {}, "message": null, "failures": null, "unique_id": "model.tiktok_ads_source.stg_tiktok_ads__advertiser"}, {"status": "success", "timing": [{"name": "compile", "started_at": "2022-01-06T18:49:26.661236Z", "completed_at": "2022-01-06T18:49:27.572112Z"}, {"name": "execute", "started_at": "2022-01-06T18:49:27.572365Z", "completed_at": "2022-01-06T18:49:27.572375Z"}], "thread_id": "Thread-3", "execution_time": 1.1310482025146484, "adapter_response": {}, "message": null, "failures": null, "unique_id": "model.tiktok_ads_source.stg_tiktok_ads__campaign_report_hourly"}, {"status": "success", "timing": [{"name": "compile", "started_at": "2022-01-06T18:49:27.718502Z", "completed_at": "2022-01-06T18:49:27.777141Z"}, {"name": "execute", "started_at": "2022-01-06T18:49:27.778607Z", "completed_at": "2022-01-06T18:49:27.778617Z"}], "thread_id": "Thread-2", "execution_time": 0.06233716011047363, "adapter_response": {}, "message": null, "failures": null, "unique_id": "test.tiktok_ads_source.not_null_stg_tiktok_ads__advertiser_advertiser_id.5deab92def"}, {"status": "success", "timing": [{"name": "compile", "started_at": "2022-01-06T18:49:27.718656Z", "completed_at": "2022-01-06T18:49:27.777661Z"}, {"name": "execute", "started_at": "2022-01-06T18:49:27.779202Z", "completed_at": "2022-01-06T18:49:27.779210Z"}], "thread_id": "Thread-4", "execution_time": 0.06264781951904297, "adapter_response": {}, "message": null, "failures": null, "unique_id": "test.tiktok_ads_source.unique_stg_tiktok_ads__advertiser_advertiser_id.078391ba66"}, {"status": "success", "timing": [{"name": "compile", "started_at": "2022-01-06T18:49:27.718805Z", "completed_at": "2022-01-06T18:49:27.778739Z"}, {"name": "execute", "started_at": "2022-01-06T18:49:27.780518Z", "completed_at": "2022-01-06T18:49:27.780527Z"}], "thread_id": "Thread-1", "execution_time": 0.06365513801574707, "adapter_response": {}, "message": null, "failures": null, "unique_id": "model.tiktok_ads.tiktok_ads__ad_adapter"}, {"status": "success", "timing": [{"name": "compile", "started_at": "2022-01-06T18:49:27.780694Z", "completed_at": "2022-01-06T18:49:27.792808Z"}, {"name": "execute", "started_at": "2022-01-06T18:49:27.799090Z", "completed_at": "2022-01-06T18:49:27.799104Z"}], "thread_id": "Thread-3", "execution_time": 0.04981207847595215, "adapter_response": {}, "message": null, "failures": null, "unique_id": "test.tiktok_ads_source.dbt_utils_unique_combination_of_columns_stg_tiktok_ads__campaign_report_hourly_campaign_id__stat_time_hour.8e4a1e4b34"}, {"status": "success", "timing": [{"name": "compile", "started_at": "2022-01-06T18:49:27.787822Z", "completed_at": "2022-01-06T18:49:27.793788Z"}, {"name": "execute", "started_at": "2022-01-06T18:49:27.829134Z", "completed_at": "2022-01-06T18:49:27.829145Z"}], "thread_id": "Thread-2", "execution_time": 0.04914093017578125, "adapter_response": {}, "message": null, "failures": null, "unique_id": "test.tiktok_ads_source.not_null_stg_tiktok_ads__campaign_report_hourly_campaign_id.ef898379fb"}, {"status": "success", "timing": [{"name": "compile", "started_at": "2022-01-06T18:49:27.793657Z", "completed_at": "2022-01-06T18:49:27.829639Z"}, {"name": "execute", "started_at": "2022-01-06T18:49:27.831186Z", "completed_at": "2022-01-06T18:49:27.831194Z"}], "thread_id": "Thread-1", "execution_time": 0.03942108154296875, "adapter_response": {}, "message": null, "failures": null, "unique_id": "model.tiktok_ads.tiktok_ads__campaign_report"}, {"status": "success", "timing": [{"name": "compile", "started_at": "2022-01-06T18:49:27.793246Z", "completed_at": "2022-01-06T18:49:27.829783Z"}, {"name": "execute", "started_at": "2022-01-06T18:49:27.831348Z", "completed_at": "2022-01-06T18:49:27.831356Z"}], "thread_id": "Thread-4", "execution_time": 0.04392409324645996, "adapter_response": {}, "message": null, "failures": null, "unique_id": "model.tiktok_ads.tiktok_ads__ad_group_report"}, {"status": "success", "timing": [{"name": "compile", "started_at": "2022-01-06T18:49:27.831509Z", "completed_at": "2022-01-06T18:49:27.839075Z"}, {"name": "execute", "started_at": "2022-01-06T18:49:27.844738Z", "completed_at": "2022-01-06T18:49:27.844750Z"}], "thread_id": "Thread-3", "execution_time": 0.020009994506835938, "adapter_response": {}, "message": null, "failures": null, "unique_id": "test.tiktok_ads.dbt_utils_unique_combination_of_columns_tiktok_ads__ad_adapter_ad_id__date_day.c70f86f560"}, {"status": "success", "timing": [{"name": "compile", "started_at": "2022-01-06T18:49:27.839381Z", "completed_at": "2022-01-06T18:49:27.850724Z"}, {"name": "execute", "started_at": "2022-01-06T18:49:27.851226Z", "completed_at": "2022-01-06T18:49:27.851236Z"}], "thread_id": "Thread-2", "execution_time": 0.013586997985839844, "adapter_response": {}, "message": null, "failures": null, "unique_id": "test.tiktok_ads.dbt_utils_unique_combination_of_columns_tiktok_ads__campaign_report_campaign_id__date_day.cc5f756c69"}, {"status": "success", "timing": [{"name": "compile", "started_at": "2022-01-06T18:49:27.839712Z", "completed_at": "2022-01-06T18:49:27.851367Z"}, {"name": "execute", "started_at": "2022-01-06T18:49:27.852131Z", "completed_at": "2022-01-06T18:49:27.852141Z"}], "thread_id": "Thread-1", "execution_time": 0.013849973678588867, "adapter_response": {}, "message": null, "failures": null, "unique_id": "test.tiktok_ads.dbt_utils_unique_combination_of_columns_tiktok_ads__ad_group_report_ad_group_id__date_day.2eb4c2ff6d"}], "elapsed_time": 4.369296073913574, "args": {"write_json": true, "use_colors": true, "printer_width": 80, "version_check": true, "partial_parse": true, "static_parser": true, "profiles_dir": "/Users/renee.li/.dbt", "send_anonymous_usage_stats": true, "event_buffer_size": 100000, "compile": true, "which": "generate", "rpc_method": "docs.generate", "indirect_selection": "eager"}} \ No newline at end of file +{"metadata": {"dbt_schema_version": "https://schemas.getdbt.com/dbt/run-results/v4.json", "dbt_version": "1.0.4", "generated_at": "2022-08-26T20:02:12.569909Z", "invocation_id": "9fdbca68-4741-4af7-99ac-be7d5e1618c0", "env": {}}, "results": [{"status": "success", "timing": [{"name": "compile", "started_at": "2022-08-26T20:02:11.850778Z", "completed_at": "2022-08-26T20:02:11.856042Z"}, {"name": "execute", "started_at": "2022-08-26T20:02:11.862744Z", "completed_at": "2022-08-26T20:02:11.862761Z"}], "thread_id": "Thread-4", "execution_time": 0.012812137603759766, "adapter_response": {}, "message": null, "failures": null, "unique_id": "model.tiktok_ads_source.stg_tiktok_ads__ad_report_hourly_tmp"}, {"status": "success", "timing": [{"name": "compile", "started_at": "2022-08-26T20:02:11.853304Z", "completed_at": "2022-08-26T20:02:11.861739Z"}, {"name": "execute", "started_at": "2022-08-26T20:02:11.863522Z", "completed_at": "2022-08-26T20:02:11.863527Z"}], "thread_id": "Thread-1", "execution_time": 0.014765024185180664, "adapter_response": {}, "message": null, "failures": null, "unique_id": "model.tiktok_ads_source.stg_tiktok_ads__ad_group_history_tmp"}, {"status": "success", "timing": [{"name": "compile", "started_at": "2022-08-26T20:02:11.855738Z", "completed_at": "2022-08-26T20:02:11.862877Z"}, {"name": "execute", "started_at": "2022-08-26T20:02:11.864081Z", "completed_at": "2022-08-26T20:02:11.864085Z"}], "thread_id": "Thread-3", "execution_time": 0.015077829360961914, "adapter_response": {}, "message": null, "failures": null, "unique_id": "model.tiktok_ads_source.stg_tiktok_ads__ad_history_tmp"}, {"status": "success", "timing": [{"name": "compile", "started_at": "2022-08-26T20:02:11.855884Z", "completed_at": "2022-08-26T20:02:11.863360Z"}, {"name": "execute", "started_at": "2022-08-26T20:02:11.864859Z", "completed_at": "2022-08-26T20:02:11.864865Z"}], "thread_id": "Thread-2", "execution_time": 0.015987873077392578, "adapter_response": {}, "message": null, "failures": null, "unique_id": "model.tiktok_ads_source.stg_tiktok_ads__ad_group_report_hourly_tmp"}, {"status": "success", "timing": [{"name": "compile", "started_at": "2022-08-26T20:02:11.866171Z", "completed_at": "2022-08-26T20:02:11.872316Z"}, {"name": "execute", "started_at": "2022-08-26T20:02:11.875913Z", "completed_at": "2022-08-26T20:02:11.875922Z"}], "thread_id": "Thread-4", "execution_time": 0.011881113052368164, "adapter_response": {}, "message": null, "failures": null, "unique_id": "model.tiktok_ads_source.stg_tiktok_ads__advertiser_tmp"}, {"status": "success", "timing": [{"name": "compile", "started_at": "2022-08-26T20:02:11.869554Z", "completed_at": "2022-08-26T20:02:11.875777Z"}, {"name": "execute", "started_at": "2022-08-26T20:02:11.876566Z", "completed_at": "2022-08-26T20:02:11.876570Z"}], "thread_id": "Thread-1", "execution_time": 0.01099085807800293, "adapter_response": {}, "message": null, "failures": null, "unique_id": "model.tiktok_ads_source.stg_tiktok_ads__campaign_history_tmp"}, {"status": "success", "timing": [{"name": "compile", "started_at": "2022-08-26T20:02:11.872478Z", "completed_at": "2022-08-26T20:02:11.876029Z"}, {"name": "execute", "started_at": "2022-08-26T20:02:11.876776Z", "completed_at": "2022-08-26T20:02:11.876779Z"}], "thread_id": "Thread-2", "execution_time": 0.008059263229370117, "adapter_response": {}, "message": null, "failures": null, "unique_id": "seed.tiktok_ads_source_integration_tests.tiktok_ad_history_data"}, {"status": "success", "timing": [{"name": "compile", "started_at": "2022-08-26T20:02:11.869843Z", "completed_at": "2022-08-26T20:02:11.876089Z"}, {"name": "execute", "started_at": "2022-08-26T20:02:11.876880Z", "completed_at": "2022-08-26T20:02:11.876882Z"}], "thread_id": "Thread-3", "execution_time": 0.010905027389526367, "adapter_response": {}, "message": null, "failures": null, "unique_id": "model.tiktok_ads_source.stg_tiktok_ads__campaign_report_hourly_tmp"}, {"status": "success", "timing": [{"name": "compile", "started_at": "2022-08-26T20:02:11.878059Z", "completed_at": "2022-08-26T20:02:11.881236Z"}, {"name": "execute", "started_at": "2022-08-26T20:02:11.885651Z", "completed_at": "2022-08-26T20:02:11.885660Z"}], "thread_id": "Thread-4", "execution_time": 0.009119987487792969, "adapter_response": {}, "message": null, "failures": null, "unique_id": "seed.tiktok_ads_source_integration_tests.tiktok_ad_report_hourly_data"}, {"status": "success", "timing": [{"name": "compile", "started_at": "2022-08-26T20:02:11.881117Z", "completed_at": "2022-08-26T20:02:11.885516Z"}, {"name": "execute", "started_at": "2022-08-26T20:02:11.886516Z", "completed_at": "2022-08-26T20:02:11.886520Z"}], "thread_id": "Thread-1", "execution_time": 0.009266138076782227, "adapter_response": {}, "message": null, "failures": null, "unique_id": "seed.tiktok_ads_source_integration_tests.tiktok_adgroup_history_data"}, {"status": "success", "timing": [{"name": "compile", "started_at": "2022-08-26T20:02:11.881340Z", "completed_at": "2022-08-26T20:02:11.885772Z"}, {"name": "execute", "started_at": "2022-08-26T20:02:11.886912Z", "completed_at": "2022-08-26T20:02:11.886918Z"}], "thread_id": "Thread-2", "execution_time": 0.009424924850463867, "adapter_response": {}, "message": null, "failures": null, "unique_id": "seed.tiktok_ads_source_integration_tests.tiktok_adgroup_report_hourly_data"}, {"status": "success", "timing": [{"name": "compile", "started_at": "2022-08-26T20:02:11.881418Z", "completed_at": "2022-08-26T20:02:11.885874Z"}, {"name": "execute", "started_at": "2022-08-26T20:02:11.887026Z", "completed_at": "2022-08-26T20:02:11.887030Z"}], "thread_id": "Thread-3", "execution_time": 0.009459972381591797, "adapter_response": {}, "message": null, "failures": null, "unique_id": "seed.tiktok_ads_source_integration_tests.tiktok_advertiser_data"}, {"status": "success", "timing": [{"name": "compile", "started_at": "2022-08-26T20:02:11.888510Z", "completed_at": "2022-08-26T20:02:11.890584Z"}, {"name": "execute", "started_at": "2022-08-26T20:02:11.904204Z", "completed_at": "2022-08-26T20:02:11.904211Z"}], "thread_id": "Thread-4", "execution_time": 0.01733088493347168, "adapter_response": {}, "message": null, "failures": null, "unique_id": "seed.tiktok_ads_source_integration_tests.tiktok_campaign_history_data"}, {"status": "success", "timing": [{"name": "compile", "started_at": "2022-08-26T20:02:11.890493Z", "completed_at": "2022-08-26T20:02:11.904105Z"}, {"name": "execute", "started_at": "2022-08-26T20:02:11.904982Z", "completed_at": "2022-08-26T20:02:11.904988Z"}], "thread_id": "Thread-1", "execution_time": 0.017188072204589844, "adapter_response": {}, "message": null, "failures": null, "unique_id": "seed.tiktok_ads_source_integration_tests.tiktok_campaign_report_hourly_data"}, {"status": "success", "timing": [{"name": "compile", "started_at": "2022-08-26T20:02:11.890759Z", "completed_at": "2022-08-26T20:02:12.167780Z"}, {"name": "execute", "started_at": "2022-08-26T20:02:12.168196Z", "completed_at": "2022-08-26T20:02:12.168205Z"}], "thread_id": "Thread-3", "execution_time": 0.30421876907348633, "adapter_response": {}, "message": null, "failures": null, "unique_id": "model.tiktok_ads_source.stg_tiktok_ads__ad_group_history"}, {"status": "success", "timing": [{"name": "compile", "started_at": "2022-08-26T20:02:11.890676Z", "completed_at": "2022-08-26T20:02:12.167910Z"}, {"name": "execute", "started_at": "2022-08-26T20:02:12.168293Z", "completed_at": "2022-08-26T20:02:12.168296Z"}], "thread_id": "Thread-2", "execution_time": 0.3056769371032715, "adapter_response": {}, "message": null, "failures": null, "unique_id": "model.tiktok_ads_source.stg_tiktok_ads__ad_report_hourly"}, {"status": "success", "timing": [{"name": "compile", "started_at": "2022-08-26T20:02:11.906080Z", "completed_at": "2022-08-26T20:02:12.251931Z"}, {"name": "execute", "started_at": "2022-08-26T20:02:12.252149Z", "completed_at": "2022-08-26T20:02:12.252157Z"}], "thread_id": "Thread-4", "execution_time": 0.37087011337280273, "adapter_response": {}, "message": null, "failures": null, "unique_id": "model.tiktok_ads_source.stg_tiktok_ads__ad_history"}, {"status": "success", "timing": [{"name": "compile", "started_at": "2022-08-26T20:02:11.910853Z", "completed_at": "2022-08-26T20:02:12.252368Z"}, {"name": "execute", "started_at": "2022-08-26T20:02:12.252528Z", "completed_at": "2022-08-26T20:02:12.252532Z"}], "thread_id": "Thread-1", "execution_time": 0.3758530616760254, "adapter_response": {}, "message": null, "failures": null, "unique_id": "model.tiktok_ads_source.stg_tiktok_ads__ad_group_report_hourly"}, {"status": "success", "timing": [{"name": "compile", "started_at": "2022-08-26T20:02:12.282179Z", "completed_at": "2022-08-26T20:02:12.289666Z"}, {"name": "execute", "started_at": "2022-08-26T20:02:12.289823Z", "completed_at": "2022-08-26T20:02:12.289829Z"}], "thread_id": "Thread-1", "execution_time": 0.007979869842529297, "adapter_response": {}, "message": null, "failures": null, "unique_id": "test.tiktok_ads_source.dbt_utils_unique_combination_of_columns_stg_tiktok_ads__ad_group_history_ad_group_id__updated_at.cec78c01de"}, {"status": "success", "timing": [{"name": "compile", "started_at": "2022-08-26T20:02:12.290321Z", "completed_at": "2022-08-26T20:02:12.293589Z"}, {"name": "execute", "started_at": "2022-08-26T20:02:12.293725Z", "completed_at": "2022-08-26T20:02:12.293729Z"}], "thread_id": "Thread-1", "execution_time": 0.0037102699279785156, "adapter_response": {}, "message": null, "failures": null, "unique_id": "test.tiktok_ads_source.not_null_stg_tiktok_ads__ad_group_history_ad_group_id.04778d7fad"}, {"status": "success", "timing": [{"name": "compile", "started_at": "2022-08-26T20:02:12.294189Z", "completed_at": "2022-08-26T20:02:12.296635Z"}, {"name": "execute", "started_at": "2022-08-26T20:02:12.296774Z", "completed_at": "2022-08-26T20:02:12.296778Z"}], "thread_id": "Thread-1", "execution_time": 0.002878904342651367, "adapter_response": {}, "message": null, "failures": null, "unique_id": "test.tiktok_ads_source.dbt_utils_unique_combination_of_columns_stg_tiktok_ads__ad_report_hourly_ad_id__stat_time_hour.e70f8cef6d"}, {"status": "success", "timing": [{"name": "compile", "started_at": "2022-08-26T20:02:12.297234Z", "completed_at": "2022-08-26T20:02:12.299801Z"}, {"name": "execute", "started_at": "2022-08-26T20:02:12.299942Z", "completed_at": "2022-08-26T20:02:12.299947Z"}], "thread_id": "Thread-1", "execution_time": 0.0030100345611572266, "adapter_response": {}, "message": null, "failures": null, "unique_id": "test.tiktok_ads_source.not_null_stg_tiktok_ads__ad_report_hourly_ad_id.ee84d783ed"}, {"status": "success", "timing": [{"name": "compile", "started_at": "2022-08-26T20:02:12.300414Z", "completed_at": "2022-08-26T20:02:12.302452Z"}, {"name": "execute", "started_at": "2022-08-26T20:02:12.302592Z", "completed_at": "2022-08-26T20:02:12.302596Z"}], "thread_id": "Thread-1", "execution_time": 0.0024781227111816406, "adapter_response": {}, "message": null, "failures": null, "unique_id": "test.tiktok_ads_source.not_null_stg_tiktok_ads__ad_report_hourly_stat_time_hour.9e2a2dca81"}, {"status": "success", "timing": [{"name": "compile", "started_at": "2022-08-26T20:02:12.303067Z", "completed_at": "2022-08-26T20:02:12.305535Z"}, {"name": "execute", "started_at": "2022-08-26T20:02:12.305678Z", "completed_at": "2022-08-26T20:02:12.305683Z"}], "thread_id": "Thread-1", "execution_time": 0.0029261112213134766, "adapter_response": {}, "message": null, "failures": null, "unique_id": "test.tiktok_ads_source.dbt_utils_unique_combination_of_columns_stg_tiktok_ads__ad_history_ad_id__updated_at.66b86b4dd1"}, {"status": "success", "timing": [{"name": "compile", "started_at": "2022-08-26T20:02:12.306177Z", "completed_at": "2022-08-26T20:02:12.308443Z"}, {"name": "execute", "started_at": "2022-08-26T20:02:12.308591Z", "completed_at": "2022-08-26T20:02:12.308595Z"}], "thread_id": "Thread-1", "execution_time": 0.002741098403930664, "adapter_response": {}, "message": null, "failures": null, "unique_id": "test.tiktok_ads_source.not_null_stg_tiktok_ads__ad_history_ad_id.4ffd05b23a"}, {"status": "success", "timing": [{"name": "compile", "started_at": "2022-08-26T20:02:12.309103Z", "completed_at": "2022-08-26T20:02:12.311846Z"}, {"name": "execute", "started_at": "2022-08-26T20:02:12.312027Z", "completed_at": "2022-08-26T20:02:12.312033Z"}], "thread_id": "Thread-1", "execution_time": 0.0032677650451660156, "adapter_response": {}, "message": null, "failures": null, "unique_id": "test.tiktok_ads_source.dbt_utils_unique_combination_of_columns_stg_tiktok_ads__ad_group_report_hourly_ad_group_id__stat_time_hour.1aeaeb71ad"}, {"status": "success", "timing": [{"name": "compile", "started_at": "2022-08-26T20:02:12.312677Z", "completed_at": "2022-08-26T20:02:12.315077Z"}, {"name": "execute", "started_at": "2022-08-26T20:02:12.315239Z", "completed_at": "2022-08-26T20:02:12.315244Z"}], "thread_id": "Thread-1", "execution_time": 0.0029838085174560547, "adapter_response": {}, "message": null, "failures": null, "unique_id": "test.tiktok_ads_source.not_null_stg_tiktok_ads__ad_group_report_hourly_ad_group_id.8da17119f1"}, {"status": "success", "timing": [{"name": "compile", "started_at": "2022-08-26T20:02:12.315818Z", "completed_at": "2022-08-26T20:02:12.318909Z"}, {"name": "execute", "started_at": "2022-08-26T20:02:12.319057Z", "completed_at": "2022-08-26T20:02:12.319062Z"}], "thread_id": "Thread-1", "execution_time": 0.00362396240234375, "adapter_response": {}, "message": null, "failures": null, "unique_id": "test.tiktok_ads_source.not_null_stg_tiktok_ads__ad_group_report_hourly_stat_time_hour.ca4b495127"}, {"status": "success", "timing": [{"name": "compile", "started_at": "2022-08-26T20:02:12.200064Z", "completed_at": "2022-08-26T20:02:12.462381Z"}, {"name": "execute", "started_at": "2022-08-26T20:02:12.462775Z", "completed_at": "2022-08-26T20:02:12.462791Z"}], "thread_id": "Thread-2", "execution_time": 0.2887916564941406, "adapter_response": {}, "message": null, "failures": null, "unique_id": "model.tiktok_ads_source.stg_tiktok_ads__campaign_history"}, {"status": "success", "timing": [{"name": "compile", "started_at": "2022-08-26T20:02:12.194044Z", "completed_at": "2022-08-26T20:02:12.463017Z"}, {"name": "execute", "started_at": "2022-08-26T20:02:12.463146Z", "completed_at": "2022-08-26T20:02:12.463149Z"}], "thread_id": "Thread-3", "execution_time": 0.2952260971069336, "adapter_response": {}, "message": null, "failures": null, "unique_id": "model.tiktok_ads_source.stg_tiktok_ads__advertiser"}, {"status": "success", "timing": [{"name": "compile", "started_at": "2022-08-26T20:02:12.489714Z", "completed_at": "2022-08-26T20:02:12.497773Z"}, {"name": "execute", "started_at": "2022-08-26T20:02:12.498037Z", "completed_at": "2022-08-26T20:02:12.498043Z"}], "thread_id": "Thread-1", "execution_time": 0.009263038635253906, "adapter_response": {}, "message": null, "failures": null, "unique_id": "test.tiktok_ads_source.dbt_utils_unique_combination_of_columns_stg_tiktok_ads__campaign_history_campaign_id__updated_at.72bf07011b"}, {"status": "success", "timing": [{"name": "compile", "started_at": "2022-08-26T20:02:12.493492Z", "completed_at": "2022-08-26T20:02:12.498447Z"}, {"name": "execute", "started_at": "2022-08-26T20:02:12.498891Z", "completed_at": "2022-08-26T20:02:12.498894Z"}], "thread_id": "Thread-3", "execution_time": 0.009592771530151367, "adapter_response": {}, "message": null, "failures": null, "unique_id": "test.tiktok_ads_source.not_null_stg_tiktok_ads__advertiser_advertiser_id.5deab92def"}, {"status": "success", "timing": [{"name": "compile", "started_at": "2022-08-26T20:02:12.493407Z", "completed_at": "2022-08-26T20:02:12.498621Z"}, {"name": "execute", "started_at": "2022-08-26T20:02:12.499023Z", "completed_at": "2022-08-26T20:02:12.499026Z"}], "thread_id": "Thread-2", "execution_time": 0.013349771499633789, "adapter_response": {}, "message": null, "failures": null, "unique_id": "test.tiktok_ads_source.not_null_stg_tiktok_ads__campaign_history_campaign_id.7f9147d1e1"}, {"status": "success", "timing": [{"name": "compile", "started_at": "2022-08-26T20:02:12.498958Z", "completed_at": "2022-08-26T20:02:12.503137Z"}, {"name": "execute", "started_at": "2022-08-26T20:02:12.503280Z", "completed_at": "2022-08-26T20:02:12.503285Z"}], "thread_id": "Thread-1", "execution_time": 0.004900932312011719, "adapter_response": {}, "message": null, "failures": null, "unique_id": "test.tiktok_ads_source.unique_stg_tiktok_ads__advertiser_advertiser_id.078391ba66"}, {"status": "success", "timing": [{"name": "compile", "started_at": "2022-08-26T20:02:12.277088Z", "completed_at": "2022-08-26T20:02:12.532532Z"}, {"name": "execute", "started_at": "2022-08-26T20:02:12.532683Z", "completed_at": "2022-08-26T20:02:12.532690Z"}], "thread_id": "Thread-4", "execution_time": 0.2827157974243164, "adapter_response": {}, "message": null, "failures": null, "unique_id": "model.tiktok_ads_source.stg_tiktok_ads__campaign_report_hourly"}, {"status": "success", "timing": [{"name": "compile", "started_at": "2022-08-26T20:02:12.560140Z", "completed_at": "2022-08-26T20:02:12.563689Z"}, {"name": "execute", "started_at": "2022-08-26T20:02:12.567956Z", "completed_at": "2022-08-26T20:02:12.567963Z"}], "thread_id": "Thread-3", "execution_time": 0.008278846740722656, "adapter_response": {}, "message": null, "failures": null, "unique_id": "test.tiktok_ads_source.dbt_utils_unique_combination_of_columns_stg_tiktok_ads__campaign_report_hourly_campaign_id__stat_time_hour.8e4a1e4b34"}, {"status": "success", "timing": [{"name": "compile", "started_at": "2022-08-26T20:02:12.563821Z", "completed_at": "2022-08-26T20:02:12.568435Z"}, {"name": "execute", "started_at": "2022-08-26T20:02:12.568715Z", "completed_at": "2022-08-26T20:02:12.568718Z"}], "thread_id": "Thread-1", "execution_time": 0.0055119991302490234, "adapter_response": {}, "message": null, "failures": null, "unique_id": "test.tiktok_ads_source.not_null_stg_tiktok_ads__campaign_report_hourly_stat_time_hour.e75e13184c"}, {"status": "success", "timing": [{"name": "compile", "started_at": "2022-08-26T20:02:12.563759Z", "completed_at": "2022-08-26T20:02:12.568496Z"}, {"name": "execute", "started_at": "2022-08-26T20:02:12.568784Z", "completed_at": "2022-08-26T20:02:12.568787Z"}], "thread_id": "Thread-2", "execution_time": 0.005841970443725586, "adapter_response": {}, "message": null, "failures": null, "unique_id": "test.tiktok_ads_source.not_null_stg_tiktok_ads__campaign_report_hourly_campaign_id.ef898379fb"}], "elapsed_time": 1.377197027206421, "args": {"write_json": true, "use_colors": true, "printer_width": 80, "version_check": true, "partial_parse": true, "static_parser": true, "profiles_dir": "/Users/joseph.markiewicz/.dbt", "send_anonymous_usage_stats": true, "event_buffer_size": 100000, "target": "postgres", "compile": true, "which": "generate", "rpc_method": "docs.generate", "indirect_selection": "eager"}} \ No newline at end of file diff --git a/integration_tests/ci/sample.profiles.yml b/integration_tests/ci/sample.profiles.yml index adb9551..920b933 100644 --- a/integration_tests/ci/sample.profiles.yml +++ b/integration_tests/ci/sample.profiles.yml @@ -16,14 +16,14 @@ integration_tests: pass: "{{ env_var('CI_REDSHIFT_DBT_PASS') }}" dbname: "{{ env_var('CI_REDSHIFT_DBT_DBNAME') }}" port: 5439 - schema: tiktok_ads_source_integration_tests + schema: tiktok_ads_source_integration_tests_1 threads: 8 bigquery: type: bigquery method: service-account keyfile: "{{ env_var('GCLOUD_SERVICE_KEY_PATH') }}" project: 'dbt-package-testing' - schema: tiktok_ads_source_integration_tests + schema: tiktok_ads_source_integration_tests_1 threads: 8 snowflake: type: snowflake @@ -33,12 +33,12 @@ integration_tests: role: "{{ env_var('CI_SNOWFLAKE_DBT_ROLE') }}" database: "{{ env_var('CI_SNOWFLAKE_DBT_DATABASE') }}" warehouse: "{{ env_var('CI_SNOWFLAKE_DBT_WAREHOUSE') }}" - schema: tiktok_ads_source_integration_tests + schema: tiktok_ads_source_integration_tests_1 threads: 8 spark: type: spark method: http - schema: tiktok_ads_source_integration_tests + schema: tiktok_ads_source_integration_tests_1 host: "{{ env_var('CI_SPARK_DBT_HOST') }}" organization: "{{ env_var('CI_SPARK_DBT_ORGANIZATION') }}" token: "{{ env_var('CI_SPARK_DBT_TOKEN') }}" @@ -54,7 +54,7 @@ integration_tests: password: "{{ env_var('CI_POSTGRES_DBT_PASS') }}" port: 5432 dbname: "{{ env_var('CI_POSTGRES_DBT_DATABASE') }}" - schema: tiktok_ads_source_integration_tests + schema: tiktok_ads_source_integration_tests_1 threads: 8 keepalives_idle: 0 sslmode: prefer \ No newline at end of file diff --git a/integration_tests/dbt_project.yml b/integration_tests/dbt_project.yml index 54c9ffa..a819cc3 100644 --- a/integration_tests/dbt_project.yml +++ b/integration_tests/dbt_project.yml @@ -1,20 +1,18 @@ name: 'tiktok_ads_source_integration_tests' -version: '0.1.0' +version: '0.2.0' profile: 'integration_tests' config-version: 2 vars: tiktok_ads_source: - ad_group_history: "{{ ref('tiktok_adgroup_history_data') }}" - ad_history: "{{ ref('tiktok_ad_history_data') }}" - advertiser: "{{ ref('tiktok_advertiser_data') }}" - campaign_history: "{{ ref('tiktok_campaign_history_data') }}" - ad_report_daily: "{{ ref('tiktok_ad_report_daily_data') }}" - ad_report_hourly: "{{ ref('tiktok_ad_report_hourly_data') }}" - ad_group_daily: "{{ ref('tiktok_adgroup_report_daily_data') }}" - ad_group_hourly: "{{ ref('tiktok_adgroup_report_hourly_data') }}" - campaign_report_daily: "{{ ref('tiktok_campaign_report_daily_data') }}" - campaign_report_hourly: "{{ ref('tiktok_campaign_report_hourly_data') }}" + tiktok_ads_schema: tiktok_ads_source_integration_tests_1 + tiktok_ads__ad_group_history_identifier: "tiktok_adgroup_history_data" + tiktok_ads__ad_history_identifier: "tiktok_ad_history_data" + tiktok_ads__advertiser_identifier: "tiktok_advertiser_data" + tiktok_ads__campaign_history_identifier: "tiktok_campaign_history_data" + tiktok_ads__ad_report_hourly_identifier: "tiktok_ad_report_hourly_data" + tiktok_ads__ad_group_report_hourly_identifier: "tiktok_adgroup_report_hourly_data" + tiktok_ads__campaign_report_hourly_identifier: "tiktok_campaign_report_hourly_data" seeds: diff --git a/integration_tests/requirements.txt b/integration_tests/requirements.txt index 89c6ccb..4913903 100644 --- a/integration_tests/requirements.txt +++ b/integration_tests/requirements.txt @@ -1,6 +1,6 @@ -dbt-snowflake~=1.0.0 -dbt-bigquery~=1.0.0 -dbt-redshift~=1.0.0 -dbt-postgres~=1.0.0 -dbt-spark~=1.0.0 -dbt-spark[PyHive]~=1.0.0 +dbt-snowflake>=1.0.0 +dbt-bigquery>=1.0.0 +dbt-redshift>=1.0.0 +dbt-postgres>=1.0.0 +dbt-spark>=1.0.0 +dbt-spark[PyHive]>=1.0.0 \ No newline at end of file diff --git a/integration_tests/seeds/tiktok_ad_history_data.csv b/integration_tests/seeds/tiktok_ad_history_data.csv index 14e35fa..94ba9cc 100644 --- a/integration_tests/seeds/tiktok_ad_history_data.csv +++ b/integration_tests/seeds/tiktok_ad_history_data.csv @@ -1,5 +1,5 @@ AD_ID,UPDATED_AT,ADVERTISER_ID,ADGROUP_ID,CAMPAIGN_ID,CREATE_TIME,AD_NAME,CALL_TO_ACTION,STATUS,OPT_STATUS,AD_TEXT,VIDEO_ID,APP_NAME,OPEN_URL,LANDING_PAGE_URL,DISPLAY_NAME,PROFILE_IMAGE,IMPRESSION_TRACKING_URL,CLICK_TRACKING_URL,PLAYABLE_URL,IS_ACO,IS_CREATIVE_AUTHORIZED,IS_NEW_STRUCTURE,IMAGE_IDS,_FIVETRAN_SYNCED -1,2021-09-15 04:26:28.000 +0000,1,1,1,2021-08-27 14:13:57.000 +0000,ad name one,SIGN_UP,AD_STATUS_DELIVERY_OK,DISABLE,subscribe,v10033g50000c4kf54jc77ucvou6fv0g,,,https://www.stuffthatworks.health/,health,,,,,TRUE,FALSE,TRUE,[ 124938917 ],2021-09-15 15:53:16.797 +0000 -2,2021-09-15 03:19:25.000 +0000,2,2,2,2021-09-13 18:54:11.000 +0000,ad name two,SIGN_UP,AD_STATUS_DELIVERY_OK,ENABLE,join us,v10033g50000c4vnvmbc77u58bhlklvg,,,https://swaggystocks.com/dashboard/home,stocks,,,,,TRUE,FALSE,TRUE,[ 124938917 ],2021-09-15 15:53:16.641 +0000 -3,2021-09-15 03:54:51.000 +0000,3,3,3,2021-07-26 16:28:39.000 +0000,ad name three,INTERESTED,AD_STATUS_DELIVERY_OK,ENABLE,like and share,v10033g50000c3qbo6jc77uaacd9hvv0,,,https://finviz.com/screener.ashx,more stocks,,,,,TRUE,FALSE,TRUE,[ 124938917 ],2021-09-15 15:53:18.918 +0000 -4,2021-09-15 04:26:26.000 +0000,4,4,4,2021-08-05 21:02:33.000 +0000,ad name four,SUBSCRIBE,AD_STATUS_DELIVERY_OK,DISABLE,get stuck in,v10033g50000c3qbo6jc77ucp113o3qg,,,linkedin.com,linkedin,,,,,TRUE,FALSE,TRUE,[ 124938917 ],2021-09-15 15:53:18.897 +0000 \ No newline at end of file +1,2021-09-15 04:26:28.000,1,1,1,2021-08-27 14:13:57.000,ad name one,SIGN_UP,AD_STATUS_DELIVERY_OK,DISABLE,subscribe,v10033g50000c4kf54jc77ucvou6fv0g,,,https://www.stuffthatworks.health/,health,,,,,TRUE,FALSE,TRUE,[ 124938917 ],2021-09-15 15:53:16.797 +2,2021-09-15 03:19:25.000,2,2,2,2021-09-13 18:54:11.000,ad name two,SIGN_UP,AD_STATUS_DELIVERY_OK,ENABLE,join us,v10033g50000c4vnvmbc77u58bhlklvg,,,https://swaggystocks.com/dashboard/home,stocks,,,,,TRUE,FALSE,TRUE,[ 124938917 ],2021-09-15 15:53:16.641 +3,2021-09-15 03:54:51.000,3,3,3,2021-07-26 16:28:39.000,ad name three,INTERESTED,AD_STATUS_DELIVERY_OK,ENABLE,like and share,v10033g50000c3qbo6jc77uaacd9hvv0,,,https://finviz.com/screener.ashx,more stocks,,,,,TRUE,FALSE,TRUE,[ 124938917 ],2021-09-15 15:53:18.918 +4,2021-09-15 04:26:26.000,4,4,4,2021-08-05 21:02:33.000,ad name four,SUBSCRIBE,AD_STATUS_DELIVERY_OK,DISABLE,get stuck in,v10033g50000c3qbo6jc77ucp113o3qg,,,linkedin.com,linkedin,,,,,TRUE,FALSE,TRUE,[ 124938917 ],2021-09-15 15:53:18.897 \ No newline at end of file diff --git a/integration_tests/seeds/tiktok_ad_report_hourly_data.csv b/integration_tests/seeds/tiktok_ad_report_hourly_data.csv index 69f8600..7bf854e 100644 --- a/integration_tests/seeds/tiktok_ad_report_hourly_data.csv +++ b/integration_tests/seeds/tiktok_ad_report_hourly_data.csv @@ -1,5 +1,5 @@ AD_ID,STAT_TIME_HOUR,COST_PER_CONVERSION,REAL_TIME_CONVERSION,CPC,VIDEO_PLAY_ACTIONS,CONVERSION_RATE,VIDEO_VIEWS_P_75,RESULT,VIDEO_VIEWS_P_50,IMPRESSIONS,COMMENTS,REAL_TIME_COST_PER_RESULT,CONVERSION,REAL_TIME_RESULT,VIDEO_VIEWS_P_100,SHARES,REAL_TIME_CONVERSION_RATE,COST_PER_SECONDARY_GOAL_RESULT,SECONDARY_GOAL_RESULT_RATE,CLICKS,COST_PER_1000_REACHED,VIDEO_VIEWS_P_25,REACH,REAL_TIME_COST_PER_CONVERSION,PROFILE_VISITS_RATE,AVERAGE_VIDEO_PLAY,PROFILE_VISITS,CPM,CTR,VIDEO_WATCHED_2_S,FOLLOWS,RESULT_RATE,VIDEO_WATCHED_6_S,SECONDARY_GOAL_RESULT,COST_PER_RESULT,AVERAGE_VIDEO_PLAY_PER_USER,REAL_TIME_RESULT_RATE,SPEND,LIKES,_FIVETRAN_SYNCED -1,2021-09-15 10:00:00,0,0,0,22,0,2,0,2,23,0,0,0,0,0,0,0,-,-,0,0,22,0,0,0,2.22,0,32.22,0,2,0,0,22,-,0,0,0,2.22,0,2021-09-15 15:56:34.862 +0000 -2,2021-09-15 10:00:00,0,0,0,33,0,0,0,0,22,0,0,0,0,0,0,0,-,-,0,0,3,0,0,0,2.22,0,2.22,0,2,0,0,2,-,0,0,0,0.22,0,2021-09-15 15:56:34.953 +0000 -3,2021-09-15 10:00:00,0,0,0,2,0,0,0,0,2,0,0,0,0,0,0,0,-,-,0,0,0,0,0,0,2.22,0,0,0,0,0,0,0,-,0,0,0,0,0,2021-09-15 15:56:34.923 +0000 -4,2021-09-15 10:00:00,0.22,2,0.22,22,222,2,2,2,22,0,0.22,2,2,2,0,200,-,-,2,0,2,0,0.22,0,2.22,0,22.22,2.22,2,0,100,2,-,0.22,0,222,0.22,2,2021-09-15 15:56:34.950 +0000 \ No newline at end of file +1,2021-09-15 10:00:00,0,0,0,22,0,2,0,2,23,0,0,0,0,0,0,0,-,-,0,0,22,0,0,0,2.22,0,32.22,0,2,0,0,22,-,0,0,0,2.22,0,2021-09-15 15:56:34.862 +2,2021-09-15 10:00:00,0,0,0,33,0,0,0,0,22,0,0,0,0,0,0,0,-,-,0,0,3,0,0,0,2.22,0,2.22,0,2,0,0,2,-,0,0,0,0.22,0,2021-09-15 15:56:34.953 +3,2021-09-15 10:00:00,0,0,0,2,0,0,0,0,2,0,0,0,0,0,0,0,-,-,0,0,0,0,0,0,2.22,0,0,0,0,0,0,0,-,0,0,0,0,0,2021-09-15 15:56:34.923 +4,2021-09-15 10:00:00,0.22,2,0.22,22,222,2,2,2,22,0,0.22,2,2,2,0,200,-,-,2,0,2,0,0.22,0,2.22,0,22.22,2.22,2,0,100,2,-,0.22,0,222,0.22,2,2021-09-15 15:56:34.950 \ No newline at end of file diff --git a/integration_tests/seeds/tiktok_adgroup_history_data.csv b/integration_tests/seeds/tiktok_adgroup_history_data.csv index 776e7ae..59577a5 100644 --- a/integration_tests/seeds/tiktok_adgroup_history_data.csv +++ b/integration_tests/seeds/tiktok_adgroup_history_data.csv @@ -1,5 +1,5 @@ ADGROUP_ID,UPDATED_AT,ADVERTISER_ID,CAMPAIGN_ID,CREATE_TIME,ADGROUP_NAME,PLACEMENT_TYPE,PROFILE_IMAGE,LANDING_PAGE_URL,DISPLAY_NAME,APP_TYPE,APP_DOWNLOAD_URL,APP_NAME,EXTERNAL_ACTION,DEEP_EXTERNAL_ACTION,CREATIVE_MATERIAL_MODE,AUDIENCE_TYPE,GENDER,ANDROID_OSV,IOS_OSV,BUDGET_MODE,SCHEDULE_TYPE,DAYPARTING,OPTIMIZE_GOAL,CPV_VIDEO_DURATION,PACING,BILLING_EVENT,BID_TYPE,DEEP_BID_TYPE,IMPRESSION_TRACKING_URL,CLICK_TRACKING_URL,STATUS,OPT_STATUS,STATISTIC_TYPE,VIDEO_DOWNLOAD,OPEN_URL,OPEN_URL_TYPE,FALLBACK_TYPE,BUDGET,BID,CONVERSION_BID,DEEP_CPABID,SCHEDULE_START_TIME,SCHEDULE_END_TIME,APP_ID,PIXEL_ID,ENABLE_INVENTORY_FILTER,IS_HFSS,IS_NEW_STRUCTURE,CATEGORY,IS_COMMENT_DISABLE,SKIP_LEARNING_PHASE,FREQUENCY,FREQUENCY_SCHEDULE,ACTION_DAYS,AUDIENCE,EXCLUDED_AUDIENCE,LOCATION,INTEREST_CATEGORY_V_2,PANGLE_BLOCK_APP_LIST_ID,ACTION_CATEGORIES,PLACEMENT,KEYWORDS,AGE,LANGUAGES,OPERATION_SYSTEM,CONNECTION_TYPE,CARRIERS,VIDEO_ACTIONS,PACKAGE,_FIVETRAN_SYNCED -1,2021-09-15 02:44:56.000 +0000,111,222,2021-08-05 01:34:25.000 +0000,Ad group name one,PLACEMENT_TYPE_NORMAL,,,,,,,ON_WEB_REGISTER,,DYNAMIC,,GENDER_UNLIMITED,,,BUDGET_MODE_DAY,SCHEDULE_FROM_NOW,,CONVERT,,PACING_MODE_SMOOTH,OCPM,BID_TYPE_NO_BID,,,,ADGROUP_STATUS_DELIVERY_OK,ENABLE,,ALLOW_DOWNLOAD,,,,500,0,0,0,2021-08-05 02:30:23.000 +0000,2031-08-03 02:30:23.000 +0000,,543543543,FALSE,FALSE,TRUE,0,1,1,,,,[ 124938917 ],[ 124938917 ],[ 124938917 ],[ 124938917 ],[],[],"[ ""PLACEMENT_TIKTOK"" ]",,"[ ""AGE_25_34"", ""AGE_35_44"", ""AGE_45_54"", ""AGE_55_100"", ""AGE_18_24"" ]","[ ""en"" ]",[],[],[],[],,2021-09-15 02:47:55.652 +0000 -2,2021-09-15 00:52:08.000 +0000,222,333,2021-08-16 20:40:16.000 +0000,Ad group name two,PLACEMENT_TYPE_NORMAL,,,,,,,ON_WEB_REGISTER,,DYNAMIC,,GENDER_UNLIMITED,,,BUDGET_MODE_INFINITE,SCHEDULE_FROM_NOW,,CONVERT,,PACING_MODE_SMOOTH,OCPM,BID_TYPE_NO_BID,,,,ADGROUP_STATUS_DELIVERY_OK,ENABLE,,ALLOW_DOWNLOAD,,,,0,0,0,0,2021-08-17 13:00:08.000 +0000,2031-08-15 13:00:08.000 +0000,,543543543,FALSE,FALSE,TRUE,0,1,1,,,,[ 124938917 ],[ 124938917 ],[ 124938917 ],[ 124938917 ],[],[],"[ ""PLACEMENT_TIKTOK"" ]",,"[ ""AGE_25_34"", ""AGE_35_44"", ""AGE_45_54"", ""AGE_55_100"", ""AGE_18_24"" ]","[ ""en"" ]",[],[],[],[],,2021-09-15 02:47:55.643 +0000 -3,2021-09-15 02:44:55.000 +0000,333,444,2021-09-13 18:44:14.000 +0000,Ad group name three,PLACEMENT_TYPE_NORMAL,,,,,,,ON_WEB_REGISTER,,CUSTOM,,GENDER_UNLIMITED,,,BUDGET_MODE_DAY,SCHEDULE_FROM_NOW,,CONVERT,,PACING_MODE_SMOOTH,OCPM,BID_TYPE_NO_BID,,,,ADGROUP_STATUS_DELIVERY_OK,ENABLE,,ALLOW_DOWNLOAD,,,,900,0,0,0,2021-09-13 18:44:05.000 +0000,2031-09-11 18:44:05.000 +0000,,654645654,FALSE,FALSE,TRUE,0,1,1,,,,[ 124938917 ],[ 124938917 ],[ 124938917 ],[ 124938917 ],[],[],"[ ""PLACEMENT_TIKTOK"" ]",,"[ ""AGE_25_34"", ""AGE_35_44"", ""AGE_45_54"", ""AGE_55_100"", ""AGE_18_24"" ]","[ ""en"" ]",[],[],[],[],,2021-09-15 02:47:55.635 +0000 -4,2021-09-15 02:44:55.000 +0000,444,555,2021-09-13 19:21:33.000 +0000,Ad group name four,PLACEMENT_TYPE_NORMAL,,,,,,,ON_WEB_REGISTER,,DYNAMIC,,GENDER_UNLIMITED,,,BUDGET_MODE_DAY,SCHEDULE_FROM_NOW,,CONVERT,,PACING_MODE_SMOOTH,OCPM,BID_TYPE_NO_BID,,,,ADGROUP_STATUS_DELIVERY_OK,ENABLE,,ALLOW_DOWNLOAD,,,,500,0,0,0,2021-09-13 20:14:52.000 +0000,2031-09-11 20:14:52.000 +0000,,867876867,FALSE,FALSE,TRUE,0,1,1,,,,[ 124938917 ],[ 124938917 ],[ 124938917 ],[ 124938917 ],[],[],"[ ""PLACEMENT_TIKTOK"" ]",,"[ ""AGE_25_34"", ""AGE_35_44"", ""AGE_45_54"", ""AGE_55_100"", ""AGE_18_24"" ]","[ ""en"" ]",[],[],[],[],,2021-09-15 02:47:55.633 +0000 \ No newline at end of file +1,2021-09-15 02:44:56.000,111,222,2021-08-05 01:34:25.000,Ad group name one,PLACEMENT_TYPE_NORMAL,,,,,,,ON_WEB_REGISTER,,DYNAMIC,,GENDER_UNLIMITED,,,BUDGET_MODE_DAY,SCHEDULE_FROM_NOW,,CONVERT,,PACING_MODE_SMOOTH,OCPM,BID_TYPE_NO_BID,,,,ADGROUP_STATUS_DELIVERY_OK,ENABLE,,ALLOW_DOWNLOAD,,,,500,0,0,0,2021-08-05 02:30:23.000,2031-08-03 02:30:23.000,,543543543,FALSE,FALSE,TRUE,0,1,1,,,,[ 124938917 ],[ 124938917 ],[ 124938917 ],[ 124938917 ],[],[],"[ ""PLACEMENT_TIKTOK"" ]",,"[ ""AGE_25_34"", ""AGE_35_44"", ""AGE_45_54"", ""AGE_55_100"", ""AGE_18_24"" ]","[ ""en"" ]",[],[],[],[],,2021-09-15 02:47:55.652 +2,2021-09-15 00:52:08.000,222,333,2021-08-16 20:40:16.000,Ad group name two,PLACEMENT_TYPE_NORMAL,,,,,,,ON_WEB_REGISTER,,DYNAMIC,,GENDER_UNLIMITED,,,BUDGET_MODE_INFINITE,SCHEDULE_FROM_NOW,,CONVERT,,PACING_MODE_SMOOTH,OCPM,BID_TYPE_NO_BID,,,,ADGROUP_STATUS_DELIVERY_OK,ENABLE,,ALLOW_DOWNLOAD,,,,0,0,0,0,2021-08-17 13:00:08.000,2031-08-15 13:00:08.000,,543543543,FALSE,FALSE,TRUE,0,1,1,,,,[ 124938917 ],[ 124938917 ],[ 124938917 ],[ 124938917 ],[],[],"[ ""PLACEMENT_TIKTOK"" ]",,"[ ""AGE_25_34"", ""AGE_35_44"", ""AGE_45_54"", ""AGE_55_100"", ""AGE_18_24"" ]","[ ""en"" ]",[],[],[],[],,2021-09-15 02:47:55.643 +3,2021-09-15 02:44:55.000,333,444,2021-09-13 18:44:14.000,Ad group name three,PLACEMENT_TYPE_NORMAL,,,,,,,ON_WEB_REGISTER,,CUSTOM,,GENDER_UNLIMITED,,,BUDGET_MODE_DAY,SCHEDULE_FROM_NOW,,CONVERT,,PACING_MODE_SMOOTH,OCPM,BID_TYPE_NO_BID,,,,ADGROUP_STATUS_DELIVERY_OK,ENABLE,,ALLOW_DOWNLOAD,,,,900,0,0,0,2021-09-13 18:44:05.000,2031-09-11 18:44:05.000,,654645654,FALSE,FALSE,TRUE,0,1,1,,,,[ 124938917 ],[ 124938917 ],[ 124938917 ],[ 124938917 ],[],[],"[ ""PLACEMENT_TIKTOK"" ]",,"[ ""AGE_25_34"", ""AGE_35_44"", ""AGE_45_54"", ""AGE_55_100"", ""AGE_18_24"" ]","[ ""en"" ]",[],[],[],[],,2021-09-15 02:47:55.635 +4,2021-09-15 02:44:55.000,444,555,2021-09-13 19:21:33.000,Ad group name four,PLACEMENT_TYPE_NORMAL,,,,,,,ON_WEB_REGISTER,,DYNAMIC,,GENDER_UNLIMITED,,,BUDGET_MODE_DAY,SCHEDULE_FROM_NOW,,CONVERT,,PACING_MODE_SMOOTH,OCPM,BID_TYPE_NO_BID,,,,ADGROUP_STATUS_DELIVERY_OK,ENABLE,,ALLOW_DOWNLOAD,,,,500,0,0,0,2021-09-13 20:14:52.000,2031-09-11 20:14:52.000,,867876867,FALSE,FALSE,TRUE,0,1,1,,,,[ 124938917 ],[ 124938917 ],[ 124938917 ],[ 124938917 ],[],[],"[ ""PLACEMENT_TIKTOK"" ]",,"[ ""AGE_25_34"", ""AGE_35_44"", ""AGE_45_54"", ""AGE_55_100"", ""AGE_18_24"" ]","[ ""en"" ]",[],[],[],[],,2021-09-15 02:47:55.633 \ No newline at end of file diff --git a/integration_tests/seeds/tiktok_adgroup_report_hourly_data.csv b/integration_tests/seeds/tiktok_adgroup_report_hourly_data.csv index ec92421..61b04ea 100644 --- a/integration_tests/seeds/tiktok_adgroup_report_hourly_data.csv +++ b/integration_tests/seeds/tiktok_adgroup_report_hourly_data.csv @@ -1,5 +1,5 @@ ADGROUP_ID,STAT_TIME_HOUR,COST_PER_CONVERSION,REAL_TIME_CONVERSION,CPC,VIDEO_PLAY_ACTIONS,CONVERSION_RATE,VIDEO_VIEWS_P_75,RESULT,VIDEO_VIEWS_P_50,IMPRESSIONS,COMMENTS,REAL_TIME_COST_PER_RESULT,CONVERSION,REAL_TIME_RESULT,VIDEO_VIEWS_P_100,SHARES,REAL_TIME_CONVERSION_RATE,COST_PER_SECONDARY_GOAL_RESULT,SECONDARY_GOAL_RESULT_RATE,CLICKS,COST_PER_1000_REACHED,VIDEO_VIEWS_P_25,REACH,REAL_TIME_COST_PER_CONVERSION,PROFILE_VISITS_RATE,AVERAGE_VIDEO_PLAY,PROFILE_VISITS,CPM,CTR,VIDEO_WATCHED_2_S,FOLLOWS,RESULT_RATE,VIDEO_WATCHED_6_S,SECONDARY_GOAL_RESULT,COST_PER_RESULT,AVERAGE_VIDEO_PLAY_PER_USER,REAL_TIME_RESULT_RATE,SPEND,LIKES,_FIVETRAN_SYNCED -1,2021-09-15 5:00:00,0,0,1.77,555,0,33,0,38,32,0,0,0,0,3,0,0,-,-,2,18.44,150,333,0,0,5,0,17.99,1.22,333,0,0,133,-,0,4.66,0,7.6,3,2021-09-15 15:57:22.614 +0000 -2,2021-09-15 7:00:00,1.33,7,0.76,1111,39,33,5,33,3235,0,4.123,5,3,44,0,43.22,-,-,34,0,150,0,1.75,0,3.33,0,13.66,1.44,333,0,36.77,233,-,2.3342,0,38.88,17.22,3,2021-09-15 15:57:22.606 +0000 -3,2021-09-15 7:00:00,3.23,7,1,2222,33,33,7,443,3235,0,2.353,5,7,55,0,22,-,-,33,0,333,0,4.44,0,4.22,0,11.88,1.55,334,0,34,233,-,3.6212,0,22,25.33,4,2021-09-15 15:57:22.616 +0000 -4,2021-09-15 4:00:00,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-,-,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-,0,0,0,0,0,2021-09-15 15:57:22.616 +0000 \ No newline at end of file +1,2021-09-15 5:00:00,0,0,1.77,555,0,33,0,38,32,0,0,0,0,3,0,0,-,-,2,18.44,150,333,0,0,5,0,17.99,1.22,333,0,0,133,-,0,4.66,0,7.6,3,2021-09-15 15:57:22.614 +2,2021-09-15 7:00:00,1.33,7,0.76,1111,39,33,5,33,3235,0,4.123,5,3,44,0,43.22,-,-,34,0,150,0,1.75,0,3.33,0,13.66,1.44,333,0,36.77,233,-,2.3342,0,38.88,17.22,3,2021-09-15 15:57:22.606 +3,2021-09-15 7:00:00,3.23,7,1,2222,33,33,7,443,3235,0,2.353,5,7,55,0,22,-,-,33,0,333,0,4.44,0,4.22,0,11.88,1.55,334,0,34,233,-,3.6212,0,22,25.33,4,2021-09-15 15:57:22.616 +4,2021-09-15 4:00:00,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-,-,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-,0,0,0,0,0,2021-09-15 15:57:22.616 \ No newline at end of file diff --git a/integration_tests/seeds/tiktok_advertiser_data.csv b/integration_tests/seeds/tiktok_advertiser_data.csv index 9ad3ad7..2565a05 100644 --- a/integration_tests/seeds/tiktok_advertiser_data.csv +++ b/integration_tests/seeds/tiktok_advertiser_data.csv @@ -1,3 +1,3 @@ ID,NAME,ADDRESS,COMPANY,CONTACTER,COUNTRY,CURRENCY,DESCRIPTION,EMAIL,INDUSTRY,LICENSE_NO,LICENSE_URL,PROMOTION_AREA,REASON,ROLE,STATUS,TELEPHONE,TIMEZONE,BALANCE,CREATE_TIME,LANGUAGE,PHONE_NUMBER,_FIVETRAN_SYNCED -1,US,1600 pennsylvania avenue,White House,,US,USD,hello,louis@vuitton.com,123,,,111,,ROLE_ADVERTISER,STATUS_ENABLE,1,Etc/GMT+5,32.12,2021-08-27 18:13:41.000 +0000,en,string,2021-09-15 15:53:18.938 +0000 -2,Canada,21 w wacker st,Blanco House,,CAN,CAN,world,jeff@bezos.com,321,,,0,,ROLE_ADVERTISER,STATUS_ENABLE,1,Etc/GMT+5,321.22,2021-03-09 20:55:37.000 +0000,en,string,2021-09-15 15:53:07.621 +0000 \ No newline at end of file +1,US,1600 pennsylvania avenue,White House,,US,USD,hello,louis@vuitton.com,123,,,111,,ROLE_ADVERTISER,STATUS_ENABLE,1,Etc/GMT+5,32.12,2021-08-27 18:13:41.000,en,string,2021-09-15 15:53:18.938 +2,Canada,21 w wacker st,Blanco House,,CAN,CAN,world,jeff@bezos.com,321,,,0,,ROLE_ADVERTISER,STATUS_ENABLE,1,Etc/GMT+5,321.22,2021-03-09 20:55:37.000,en,string,2021-09-15 15:53:07.621 \ No newline at end of file diff --git a/integration_tests/seeds/tiktok_campaign_history_data.csv b/integration_tests/seeds/tiktok_campaign_history_data.csv index 7bb3120..383d484 100644 --- a/integration_tests/seeds/tiktok_campaign_history_data.csv +++ b/integration_tests/seeds/tiktok_campaign_history_data.csv @@ -1,5 +1,5 @@ CAMPAIGN_ID,UPDATED_AT,ADVERTISER_ID,CAMPAIGN_NAME,CAMPAIGN_TYPE,BUDGET,BUDGET_MODE,OPT_STATUS,OBJECTIVE_TYPE,IS_NEW_STRUCTURE,SPLIT_TEST_VARIABLE,CREATE_TIME,_FIVETRAN_SYNCED -1,2021-09-15 00:52:08.000 +0000,1,campaign name one,REGULAR_CAMPAIGN,450,BUDGET_MODE_DAY,ENABLE,CONVERSIONS,TRUE,,2021-08-16 20:40:15.000 +0000,2021-09-15 02:47:54.737 +0000 -2,2021-09-15 01:33:37.000 +0000,2,campaign name two,REGULAR_CAMPAIGN,300,BUDGET_MODE_DAY,ENABLE,CONVERSIONS,TRUE,,2021-08-16 20:29:06.000 +0000,2021-09-15 02:47:54.737 +0000 -3,2021-09-14 02:53:48.000 +0000,3,campaign name three,REGULAR_CAMPAIGN,450,BUDGET_MODE_DAY,ENABLE,CONVERSIONS,TRUE,,2021-08-16 20:40:15.000 +0000,2021-09-14 03:01:03.005 +0000 -4,2021-09-14 02:59:01.000 +0000,4,campaign name four,REGULAR_CAMPAIGN,300,BUDGET_MODE_DAY,ENABLE,CONVERSIONS,TRUE,,2021-08-16 20:29:06.000 +0000,2021-09-14 03:01:03.006 +0000 \ No newline at end of file +1,2021-09-15 00:52:08.000,1,campaign name one,REGULAR_CAMPAIGN,450,BUDGET_MODE_DAY,ENABLE,CONVERSIONS,TRUE,,2021-08-16 20:40:15.000,2021-09-15 02:47:54.737 +2,2021-09-15 01:33:37.000,2,campaign name two,REGULAR_CAMPAIGN,300,BUDGET_MODE_DAY,ENABLE,CONVERSIONS,TRUE,,2021-08-16 20:29:06.000,2021-09-15 02:47:54.737 +3,2021-09-14 02:53:48.000,3,campaign name three,REGULAR_CAMPAIGN,450,BUDGET_MODE_DAY,ENABLE,CONVERSIONS,TRUE,,2021-08-16 20:40:15.000,2021-09-14 03:01:03.005 +4,2021-09-14 02:59:01.000,4,campaign name four,REGULAR_CAMPAIGN,300,BUDGET_MODE_DAY,ENABLE,CONVERSIONS,TRUE,,2021-08-16 20:29:06.000,2021-09-14 03:01:03.006 \ No newline at end of file diff --git a/integration_tests/seeds/tiktok_campaign_report_hourly_data.csv b/integration_tests/seeds/tiktok_campaign_report_hourly_data.csv index 1515c79..dbf4271 100644 --- a/integration_tests/seeds/tiktok_campaign_report_hourly_data.csv +++ b/integration_tests/seeds/tiktok_campaign_report_hourly_data.csv @@ -1,5 +1,5 @@ CAMPAIGN_ID,STAT_TIME_HOUR,COST_PER_CONVERSION,REAL_TIME_CONVERSION,CPC,VIDEO_PLAY_ACTIONS,CONVERSION_RATE,VIDEO_VIEWS_P_75,RESULT,VIDEO_VIEWS_P_50,IMPRESSIONS,COMMENTS,REAL_TIME_COST_PER_RESULT,CONVERSION,REAL_TIME_RESULT,VIDEO_VIEWS_P_100,SHARES,REAL_TIME_CONVERSION_RATE,COST_PER_SECONDARY_GOAL_RESULT,SECONDARY_GOAL_RESULT_RATE,CLICKS,COST_PER_1000_REACHED,VIDEO_VIEWS_P_25,REACH,REAL_TIME_COST_PER_CONVERSION,PROFILE_VISITS_RATE,AVERAGE_VIDEO_PLAY,PROFILE_VISITS,CPM,CTR,VIDEO_WATCHED_2_S,FOLLOWS,RESULT_RATE,VIDEO_WATCHED_6_S,SECONDARY_GOAL_RESULT,COST_PER_RESULT,AVERAGE_VIDEO_PLAY_PER_USER,REAL_TIME_RESULT_RATE,SPEND,LIKES,_FIVETRAN_SYNCED -1,2021-09-15 5:00:00,0,0,1.88,32322,0,222,222,222,22222,0,3.3235,0,23423,33,0,0,-,-,22,2.234,233,22413,0,0,2.22,0,2.35,0.33,2222,0,22.35,322,-,35.32,2.13,22.22,222.12,22,2021-09-15 15:58:05.904 +0000 -2,2021-09-15 4:00:00,0,0,0,4,0,0,0,0,4,0,0,0,0,0,0,0,-,-,0,22,1,4,0,0,3.334,0,22,0,2,0,0,2,-,3,2.35,0,0.22,2,2021-09-15 15:58:05.905 +0000 -3,2021-09-15 8:00:00,2.3,22,2.2,222222,222,222,22,787,12222,0,4.12312,22,33,222,2,22.2,-,-,222,0,2335,0,2.55,0,3.52,0,22.22,0.232,3322,0,33.22,2222,-,2.2222,0,22.2,222.22,22,2021-09-15 15:58:05.903 +0000 -4,2021-09-15 10:00:00,0,0,0,15,0,1,0,1,22,0,0,0,0,1,0,0,-,-,0,0,2,0,0,0,3.324,0,22,0,3,0,0,4,-,0,0,0,0.232,22,2021-09-15 15:58:05.903 +0000 \ No newline at end of file +1,2021-09-15 5:00:00,0,0,1.88,32322,0,222,222,222,22222,0,3.3235,0,23423,33,0,0,-,-,22,2.234,233,22413,0,0,2.22,0,2.35,0.33,2222,0,22.35,322,-,35.32,2.13,22.22,222.12,22,2021-09-15 15:58:05.904 +2,2021-09-15 4:00:00,0,0,0,4,0,0,0,0,4,0,0,0,0,0,0,0,-,-,0,22,1,4,0,0,3.334,0,22,0,2,0,0,2,-,3,2.35,0,0.22,2,2021-09-15 15:58:05.905 +3,2021-09-15 8:00:00,2.3,22,2.2,222222,222,222,22,787,12222,0,4.12312,22,33,222,2,22.2,-,-,222,0,2335,0,2.55,0,3.52,0,22.22,0.232,3322,0,33.22,2222,-,2.2222,0,22.2,222.22,22,2021-09-15 15:58:05.903 +4,2021-09-15 10:00:00,0,0,0,15,0,1,0,1,22,0,0,0,0,1,0,0,-,-,0,0,2,0,0,0,3.324,0,22,0,3,0,0,4,-,0,0,0,0.232,22,2021-09-15 15:58:05.903 \ No newline at end of file diff --git a/macros/get_ad_group_history_columns.sql b/macros/get_ad_group_history_columns.sql index 904ebd9..66527a8 100644 --- a/macros/get_ad_group_history_columns.sql +++ b/macros/get_ad_group_history_columns.sql @@ -1,71 +1,22 @@ {% macro get_ad_group_history_columns() %} {% set columns = [ - {"name": "_fivetran_synced", "datatype": dbt_utils.type_timestamp()}, {"name": "action_days", "datatype": dbt_utils.type_numeric()}, {"name": "adgroup_id", "datatype": dbt_utils.type_numeric()}, {"name": "adgroup_name", "datatype": dbt_utils.type_string()}, {"name": "advertiser_id", "datatype": dbt_utils.type_numeric()}, - {"name": "android_osv", "datatype": dbt_utils.type_string()}, - {"name": "app_download_url", "datatype": dbt_utils.type_string()}, - {"name": "app_id", "datatype": dbt_utils.type_numeric()}, - {"name": "app_name", "datatype": dbt_utils.type_string()}, - {"name": "app_type", "datatype": dbt_utils.type_string()}, {"name": "audience_type", "datatype": dbt_utils.type_string()}, - {"name": "bid", "datatype": dbt_utils.type_float()}, - {"name": "bid_type", "datatype": dbt_utils.type_string()}, - {"name": "billing_event", "datatype": dbt_utils.type_string()}, {"name": "budget", "datatype": dbt_utils.type_float()}, - {"name": "budget_mode", "datatype": dbt_utils.type_string()}, {"name": "campaign_id", "datatype": dbt_utils.type_numeric()}, {"name": "category", "datatype": dbt_utils.type_numeric()}, - {"name": "click_tracking_url", "datatype": dbt_utils.type_string()}, - {"name": "conversion_bid", "datatype": dbt_utils.type_float()}, - {"name": "cpv_video_duration", "datatype": dbt_utils.type_string()}, - {"name": "create_time", "datatype": dbt_utils.type_timestamp()}, - {"name": "creative_material_mode", "datatype": dbt_utils.type_string()}, - {"name": "dayparting", "datatype": dbt_utils.type_string()}, - {"name": "deep_bid_type", "datatype": dbt_utils.type_string()}, - {"name": "deep_cpabid", "datatype": dbt_utils.type_float()}, - {"name": "deep_external_action", "datatype": dbt_utils.type_string()}, {"name": "display_name", "datatype": dbt_utils.type_string()}, - {"name": "enable_inventory_filter", "datatype": "boolean"}, - {"name": "external_action", "datatype": dbt_utils.type_string()}, - {"name": "fallback_type", "datatype": dbt_utils.type_string()}, {"name": "frequency", "datatype": dbt_utils.type_numeric()}, {"name": "frequency_schedule", "datatype": dbt_utils.type_numeric()}, {"name": "gender", "datatype": dbt_utils.type_string()}, - {"name": "impression_tracking_url", "datatype": dbt_utils.type_string()}, - {"name": "ios_osv", "datatype": dbt_utils.type_string()}, - {"name": "is_comment_disable", "datatype": dbt_utils.type_numeric()}, - {"name": "is_hfss", "datatype": "boolean"}, - {"name": "is_new_structure", "datatype": "boolean"}, {"name": "landing_page_url", "datatype": dbt_utils.type_string()}, - {"name": "open_url", "datatype": dbt_utils.type_string()}, - {"name": "open_url_type", "datatype": dbt_utils.type_string()}, - {"name": "opt_status", "datatype": dbt_utils.type_string()}, - {"name": "optimize_goal", "datatype": dbt_utils.type_string()}, - {"name": "pacing", "datatype": dbt_utils.type_string()}, - {"name": "package", "datatype": dbt_utils.type_string()}, - {"name": "pixel_id", "datatype": dbt_utils.type_numeric()}, - {"name": "placement_type", "datatype": dbt_utils.type_string()}, - {"name": "profile_image", "datatype": dbt_utils.type_string()}, - {"name": "schedule_end_time", "datatype": dbt_utils.type_timestamp()}, - {"name": "schedule_start_time", "datatype": dbt_utils.type_timestamp()}, - {"name": "schedule_type", "datatype": dbt_utils.type_string()}, - {"name": "skip_learning_phase", "datatype": dbt_utils.type_numeric()}, - {"name": "statistic_type", "datatype": dbt_utils.type_string()}, - {"name": "status", "datatype": dbt_utils.type_string()}, {"name": "updated_at", "datatype": dbt_utils.type_timestamp()}, - {"name": "video_download", "datatype": dbt_utils.type_string()}, - {"name": "audience", "datatype": dbt_utils.type_string()}, - {"name": "excluded_audience", "datatype": dbt_utils.type_string()}, - {"name": "location", "datatype": dbt_utils.type_string()}, {"name": "interest_category_v_2", "datatype": dbt_utils.type_string()}, - {"name": "pangle_block_app_list_id", "datatype": dbt_utils.type_string()}, {"name": "action_categories", "datatype": dbt_utils.type_string()}, - {"name": "placement", "datatype": dbt_utils.type_string()}, - {"name": "keywords", "datatype": dbt_utils.type_string()}, {"name": "age", "datatype": dbt_utils.type_string()}, {"name": "languages", "datatype": dbt_utils.type_string()} diff --git a/macros/get_ad_group_report_hourly_columns.sql b/macros/get_ad_group_report_hourly_columns.sql index 0694210..5b89db4 100644 --- a/macros/get_ad_group_report_hourly_columns.sql +++ b/macros/get_ad_group_report_hourly_columns.sql @@ -1,7 +1,6 @@ {% macro get_ad_group_report_hourly_columns() %} {% set columns = [ - {"name": "_fivetran_synced", "datatype": dbt_utils.type_timestamp()}, {"name": "adgroup_id", "datatype": dbt_utils.type_numeric()}, {"name": "average_video_play", "datatype": dbt_utils.type_float()}, {"name": "average_video_play_per_user", "datatype": dbt_utils.type_float()}, @@ -9,10 +8,7 @@ {"name": "comments", "datatype": dbt_utils.type_numeric()}, {"name": "conversion", "datatype": dbt_utils.type_numeric()}, {"name": "conversion_rate", "datatype": dbt_utils.type_float()}, - {"name": "cost_per_1000_reached", "datatype": dbt_utils.type_float()}, {"name": "cost_per_conversion", "datatype": dbt_utils.type_float()}, - {"name": "cost_per_result", "datatype": dbt_utils.type_float()}, - {"name": "cost_per_secondary_goal_result", "datatype": dbt_utils.type_string()}, {"name": "cpc", "datatype": dbt_utils.type_float()}, {"name": "cpm", "datatype": dbt_utils.type_float()}, {"name": "ctr", "datatype": dbt_utils.type_float()}, @@ -20,23 +16,11 @@ {"name": "impressions", "datatype": dbt_utils.type_numeric()}, {"name": "likes", "datatype": dbt_utils.type_numeric()}, {"name": "profile_visits", "datatype": dbt_utils.type_numeric()}, - {"name": "profile_visits_rate", "datatype": dbt_utils.type_float()}, {"name": "reach", "datatype": dbt_utils.type_numeric()}, - {"name": "real_time_conversion", "datatype": dbt_utils.type_numeric()}, - {"name": "real_time_conversion_rate", "datatype": dbt_utils.type_float()}, - {"name": "real_time_cost_per_conversion", "datatype": dbt_utils.type_float()}, - {"name": "real_time_cost_per_result", "datatype": dbt_utils.type_float()}, - {"name": "real_time_result", "datatype": dbt_utils.type_numeric()}, - {"name": "real_time_result_rate", "datatype": dbt_utils.type_float()}, - {"name": "result", "datatype": dbt_utils.type_numeric()}, - {"name": "result_rate", "datatype": dbt_utils.type_float()}, - {"name": "secondary_goal_result", "datatype": dbt_utils.type_string()}, - {"name": "secondary_goal_result_rate", "datatype": dbt_utils.type_string()}, {"name": "shares", "datatype": dbt_utils.type_numeric()}, - {"name": "spend", "datatype": dbt_utils.type_float()}, + {"name": "spend", "datatype": dbt_utils.type_numeric()}, {"name": "stat_time_hour", "datatype": dbt_utils.type_timestamp()}, {"name": "video_play_actions", "datatype": dbt_utils.type_numeric()}, - {"name": "video_views_p_100", "datatype": dbt_utils.type_numeric()}, {"name": "video_views_p_25", "datatype": dbt_utils.type_numeric()}, {"name": "video_views_p_50", "datatype": dbt_utils.type_numeric()}, {"name": "video_views_p_75", "datatype": dbt_utils.type_numeric()}, @@ -46,4 +30,6 @@ {{ return(columns) }} +{{ fivetran_utils.add_pass_through_columns(columns, var('tiktok_ads__ad_group_hourly_passthrough_metrics')) }} + {% endmacro %} \ No newline at end of file diff --git a/macros/get_ad_history_columns.sql b/macros/get_ad_history_columns.sql index 7ba03b3..9b763fb 100644 --- a/macros/get_ad_history_columns.sql +++ b/macros/get_ad_history_columns.sql @@ -1,31 +1,16 @@ {% macro get_ad_history_columns() %} {% set columns = [ - {"name": "_fivetran_synced", "datatype": dbt_utils.type_timestamp()}, {"name": "ad_id", "datatype": dbt_utils.type_numeric()}, {"name": "ad_name", "datatype": dbt_utils.type_string()}, - {"name": "ad_text", "datatype": dbt_utils.type_string()}, {"name": "adgroup_id", "datatype": dbt_utils.type_numeric()}, {"name": "advertiser_id", "datatype": dbt_utils.type_numeric()}, - {"name": "app_name", "datatype": dbt_utils.type_string()}, {"name": "call_to_action", "datatype": dbt_utils.type_string()}, {"name": "campaign_id", "datatype": dbt_utils.type_numeric()}, {"name": "click_tracking_url", "datatype": dbt_utils.type_string()}, - {"name": "create_time", "datatype": dbt_utils.type_timestamp()}, - {"name": "display_name", "datatype": dbt_utils.type_string()}, {"name": "impression_tracking_url", "datatype": dbt_utils.type_string()}, - {"name": "is_aco", "datatype": "boolean"}, - {"name": "is_creative_authorized", "datatype": "boolean"}, - {"name": "is_new_structure", "datatype": "boolean"}, {"name": "landing_page_url", "datatype": dbt_utils.type_string()}, - {"name": "open_url", "datatype": dbt_utils.type_string()}, - {"name": "opt_status", "datatype": dbt_utils.type_string()}, - {"name": "playable_url", "datatype": dbt_utils.type_string()}, - {"name": "profile_image", "datatype": dbt_utils.type_string()}, - {"name": "status", "datatype": dbt_utils.type_string()}, - {"name": "updated_at", "datatype": dbt_utils.type_timestamp()}, - {"name": "video_id", "datatype": dbt_utils.type_string()}, - {"name": "image_ids", "datatype": dbt_utils.type_string()} + {"name": "updated_at", "datatype": dbt_utils.type_timestamp()} ] %} diff --git a/macros/get_ad_report_hourly_columns.sql b/macros/get_ad_report_hourly_columns.sql index f11afdd..41b8d99 100644 --- a/macros/get_ad_report_hourly_columns.sql +++ b/macros/get_ad_report_hourly_columns.sql @@ -1,7 +1,6 @@ {% macro get_ad_report_hourly_columns() %} {% set columns = [ - {"name": "_fivetran_synced", "datatype": dbt_utils.type_timestamp()}, {"name": "ad_id", "datatype": dbt_utils.type_numeric()}, {"name": "average_video_play", "datatype": dbt_utils.type_float()}, {"name": "average_video_play_per_user", "datatype": dbt_utils.type_float()}, @@ -9,10 +8,7 @@ {"name": "comments", "datatype": dbt_utils.type_numeric()}, {"name": "conversion", "datatype": dbt_utils.type_numeric()}, {"name": "conversion_rate", "datatype": dbt_utils.type_float()}, - {"name": "cost_per_1000_reached", "datatype": dbt_utils.type_float()}, {"name": "cost_per_conversion", "datatype": dbt_utils.type_float()}, - {"name": "cost_per_result", "datatype": dbt_utils.type_float()}, - {"name": "cost_per_secondary_goal_result", "datatype": dbt_utils.type_string()}, {"name": "cpc", "datatype": dbt_utils.type_float()}, {"name": "cpm", "datatype": dbt_utils.type_float()}, {"name": "ctr", "datatype": dbt_utils.type_float()}, @@ -20,23 +16,11 @@ {"name": "impressions", "datatype": dbt_utils.type_numeric()}, {"name": "likes", "datatype": dbt_utils.type_numeric()}, {"name": "profile_visits", "datatype": dbt_utils.type_numeric()}, - {"name": "profile_visits_rate", "datatype": dbt_utils.type_float()}, {"name": "reach", "datatype": dbt_utils.type_numeric()}, - {"name": "real_time_conversion", "datatype": dbt_utils.type_numeric()}, - {"name": "real_time_conversion_rate", "datatype": dbt_utils.type_float()}, - {"name": "real_time_cost_per_conversion", "datatype": dbt_utils.type_float()}, - {"name": "real_time_cost_per_result", "datatype": dbt_utils.type_float()}, - {"name": "real_time_result", "datatype": dbt_utils.type_numeric()}, - {"name": "real_time_result_rate", "datatype": dbt_utils.type_float()}, - {"name": "result", "datatype": dbt_utils.type_numeric()}, - {"name": "result_rate", "datatype": dbt_utils.type_float()}, - {"name": "secondary_goal_result", "datatype": dbt_utils.type_string()}, - {"name": "secondary_goal_result_rate", "datatype": dbt_utils.type_string()}, {"name": "shares", "datatype": dbt_utils.type_numeric()}, - {"name": "spend", "datatype": dbt_utils.type_float()}, + {"name": "spend", "datatype": dbt_utils.type_numeric()}, {"name": "stat_time_hour", "datatype": dbt_utils.type_timestamp()}, {"name": "video_play_actions", "datatype": dbt_utils.type_numeric()}, - {"name": "video_views_p_100", "datatype": dbt_utils.type_numeric()}, {"name": "video_views_p_25", "datatype": dbt_utils.type_numeric()}, {"name": "video_views_p_50", "datatype": dbt_utils.type_numeric()}, {"name": "video_views_p_75", "datatype": dbt_utils.type_numeric()}, @@ -46,4 +30,6 @@ {{ return(columns) }} +{{ fivetran_utils.add_pass_through_columns(columns, var('tiktok_ads__ad_hourly_passthrough_metrics')) }} + {% endmacro %} \ No newline at end of file diff --git a/macros/get_advertiser_columns.sql b/macros/get_advertiser_columns.sql index 9e082dd..e863dd0 100644 --- a/macros/get_advertiser_columns.sql +++ b/macros/get_advertiser_columns.sql @@ -1,27 +1,19 @@ {% macro get_advertiser_columns() %} {% set columns = [ - {"name": "_fivetran_synced", "datatype": dbt_utils.type_timestamp()}, {"name": "address", "datatype": dbt_utils.type_string()}, {"name": "balance", "datatype": dbt_utils.type_float()}, {"name": "company", "datatype": dbt_utils.type_string()}, {"name": "contacter", "datatype": dbt_utils.type_string()}, {"name": "country", "datatype": dbt_utils.type_string()}, - {"name": "create_time", "datatype": dbt_utils.type_timestamp()}, {"name": "currency", "datatype": dbt_utils.type_string()}, {"name": "description", "datatype": dbt_utils.type_string()}, {"name": "email", "datatype": dbt_utils.type_string()}, {"name": "id", "datatype": dbt_utils.type_numeric()}, {"name": "industry", "datatype": dbt_utils.type_string()}, {"name": "language", "datatype": dbt_utils.type_string()}, - {"name": "license_no", "datatype": dbt_utils.type_string()}, - {"name": "license_url", "datatype": dbt_utils.type_string()}, {"name": "name", "datatype": dbt_utils.type_string()}, {"name": "phone_number", "datatype": dbt_utils.type_string()}, - {"name": "promotion_area", "datatype": dbt_utils.type_string()}, - {"name": "reason", "datatype": dbt_utils.type_string()}, - {"name": "role", "datatype": dbt_utils.type_string()}, - {"name": "status", "datatype": dbt_utils.type_string()}, {"name": "telephone", "datatype": dbt_utils.type_string()}, {"name": "timezone", "datatype": dbt_utils.type_string()} ] %} diff --git a/macros/get_campaign_history_columns.sql b/macros/get_campaign_history_columns.sql index 5e47ebf..13a87ed 100644 --- a/macros/get_campaign_history_columns.sql +++ b/macros/get_campaign_history_columns.sql @@ -1,17 +1,10 @@ {% macro get_campaign_history_columns() %} {% set columns = [ - {"name": "_fivetran_synced", "datatype": dbt_utils.type_timestamp()}, {"name": "advertiser_id", "datatype": dbt_utils.type_numeric()}, - {"name": "budget", "datatype": dbt_utils.type_float()}, - {"name": "budget_mode", "datatype": dbt_utils.type_string()}, {"name": "campaign_id", "datatype": dbt_utils.type_numeric()}, {"name": "campaign_name", "datatype": dbt_utils.type_string()}, {"name": "campaign_type", "datatype": dbt_utils.type_string()}, - {"name": "create_time", "datatype": dbt_utils.type_timestamp()}, - {"name": "is_new_structure", "datatype": dbt_utils.type_string()}, - {"name": "objective_type", "datatype": dbt_utils.type_string()}, - {"name": "opt_status", "datatype": dbt_utils.type_string()}, {"name": "split_test_variable", "datatype": dbt_utils.type_string()}, {"name": "updated_at", "datatype": dbt_utils.type_timestamp()} ] %} diff --git a/macros/get_campaign_report_hourly_columns.sql b/macros/get_campaign_report_hourly_columns.sql index b69d230..1fe290d 100644 --- a/macros/get_campaign_report_hourly_columns.sql +++ b/macros/get_campaign_report_hourly_columns.sql @@ -1,18 +1,14 @@ {% macro get_campaign_report_hourly_columns() %} {% set columns = [ - {"name": "_fivetran_synced", "datatype": dbt_utils.type_timestamp()}, + {"name": "campaign_id", "datatype": dbt_utils.type_numeric()}, {"name": "average_video_play", "datatype": dbt_utils.type_float()}, {"name": "average_video_play_per_user", "datatype": dbt_utils.type_float()}, - {"name": "campaign_id", "datatype": dbt_utils.type_numeric()}, {"name": "clicks", "datatype": dbt_utils.type_numeric()}, {"name": "comments", "datatype": dbt_utils.type_numeric()}, {"name": "conversion", "datatype": dbt_utils.type_numeric()}, {"name": "conversion_rate", "datatype": dbt_utils.type_float()}, - {"name": "cost_per_1000_reached", "datatype": dbt_utils.type_float()}, {"name": "cost_per_conversion", "datatype": dbt_utils.type_float()}, - {"name": "cost_per_result", "datatype": dbt_utils.type_float()}, - {"name": "cost_per_secondary_goal_result", "datatype": dbt_utils.type_string()}, {"name": "cpc", "datatype": dbt_utils.type_float()}, {"name": "cpm", "datatype": dbt_utils.type_float()}, {"name": "ctr", "datatype": dbt_utils.type_float()}, @@ -20,23 +16,11 @@ {"name": "impressions", "datatype": dbt_utils.type_numeric()}, {"name": "likes", "datatype": dbt_utils.type_numeric()}, {"name": "profile_visits", "datatype": dbt_utils.type_numeric()}, - {"name": "profile_visits_rate", "datatype": dbt_utils.type_float()}, {"name": "reach", "datatype": dbt_utils.type_numeric()}, - {"name": "real_time_conversion", "datatype": dbt_utils.type_numeric()}, - {"name": "real_time_conversion_rate", "datatype": dbt_utils.type_float()}, - {"name": "real_time_cost_per_conversion", "datatype": dbt_utils.type_float()}, - {"name": "real_time_cost_per_result", "datatype": dbt_utils.type_float()}, - {"name": "real_time_result", "datatype": dbt_utils.type_numeric()}, - {"name": "real_time_result_rate", "datatype": dbt_utils.type_float()}, - {"name": "result", "datatype": dbt_utils.type_numeric()}, - {"name": "result_rate", "datatype": dbt_utils.type_float()}, - {"name": "secondary_goal_result", "datatype": dbt_utils.type_string()}, - {"name": "secondary_goal_result_rate", "datatype": dbt_utils.type_string()}, {"name": "shares", "datatype": dbt_utils.type_numeric()}, - {"name": "spend", "datatype": dbt_utils.type_float()}, + {"name": "spend", "datatype": dbt_utils.type_numeric()}, {"name": "stat_time_hour", "datatype": dbt_utils.type_timestamp()}, {"name": "video_play_actions", "datatype": dbt_utils.type_numeric()}, - {"name": "video_views_p_100", "datatype": dbt_utils.type_numeric()}, {"name": "video_views_p_25", "datatype": dbt_utils.type_numeric()}, {"name": "video_views_p_50", "datatype": dbt_utils.type_numeric()}, {"name": "video_views_p_75", "datatype": dbt_utils.type_numeric()}, @@ -46,4 +30,6 @@ {{ return(columns) }} +{{ fivetran_utils.add_pass_through_columns(columns, var('tiktok_ads__campaign_hourly_passthrough_metrics')) }} + {% endmacro %} \ No newline at end of file diff --git a/models/src_tiktok_ads.yml b/models/src_tiktok_ads.yml index 5ac0c9d..693d9c5 100644 --- a/models/src_tiktok_ads.yml +++ b/models/src_tiktok_ads.yml @@ -8,8 +8,16 @@ sources: loader: fivetran loaded_at_field: _fivetran_synced + freshness: + warn_after: {count: 48, period: hour} + error_after: {count: 168, period: hour} + + config: + enabled: "{{ var('ad_reporting__tiktok_ads_enabled', true) }}" + tables: - name: advertiser + identifier: "{{ var('tiktok_ads__advertiser_identifier', 'advertiser') }}" description: Each record represents data for one advertiser. columns: - name: id @@ -60,6 +68,7 @@ sources: description: Timestamp of when Fivetran synced a record. - name: campaign_history + identifier: "{{ var('tiktok_ads__campaign_history_identifier', 'campaign_history') }}" description: Each record represents a version of a TikTok campaign. columns: - name: campaign_id @@ -89,8 +98,8 @@ sources: - name: split_test_variable description: Split Test variables. Optional values; TARGETING, BIDDING_OPTIMIZATION , CREATIVE. - - - name: adgroup_history + - name: adgroup_history + identifier: "{{ var('tiktok_ads__ad_group_history_identifier', 'adgroup_history') }}" description: Each record represents a version of a TikTok ad group. columns: - name: adgroup_id @@ -241,8 +250,8 @@ sources: - name: video_download description: Whether users can download your video ads on TikTok(cannot be updated once created). - - - name: ad_history + - name: ad_history + identifier: "{{ var('tiktok_ads__ad_history_identifier', 'ad_history') }}" description: Each record represents a version of a TikTok ad. columns: - name: ad_id @@ -297,6 +306,7 @@ sources: description: The video ID. - name: ad_report_hourly + identifier: "{{ var('tiktok_ads__ad_report_hourly_identifier', 'ad_report_hourly') }}" description: Each record represents data for each ad for each hour. columns: - name: ad_id @@ -413,8 +423,8 @@ sources: - name: _fivetran_synced description: Timestamp of when Fivetran synced a record. - - name: campaign_report_hourly + identifier: "{{ var('tiktok_ads__campaign_report_hourly_identifier', 'campaign_report_hourly') }}" description: Each record represents data for each campaign for each hour. columns: - name: campaign_id @@ -442,7 +452,7 @@ sources: - name: result description: > The number of times your ad achieved an outcome, based on the optimization goal - you selected. As one campaign may have a number of different optimization goals, + you selected. As one campaign may have a number of different optimization goals, this statistic is not supported for campaigns. Please go to ad groups or ads to view the results. (The total count is calculated based on the time each ad impression occurred.) - name: video_views_p_50 @@ -533,8 +543,8 @@ sources: - name: _fivetran_synced description: Timestamp of when Fivetran synced a record. - - name: adgroup_report_hourly + identifier: "{{ var('tiktok_ads__ad_group_report_hourly_identifier', 'adgroup_report_hourly') }}" description: Each record represents data for each ad group for each hour. columns: - name: adgroup_id diff --git a/models/stg_tiktok_ads.yml b/models/stg_tiktok_ads.yml index 530faa3..c976612 100644 --- a/models/stg_tiktok_ads.yml +++ b/models/stg_tiktok_ads.yml @@ -37,7 +37,7 @@ models: description: License number - name: license_url description: License preview address, the link is valid for an hour by default. - - name: name + - name: advertiser_name description: Advertiser name - name: phone_number description: Contact mobile number, desensitised data @@ -45,10 +45,6 @@ models: description: Fixed phone number, desensitised data - name: timezone description: Ad account time zone including GMT offset - - name: _fivetran_synced - description: Timestamp of when Fivetran synced a record. - - name: is_most_recent_record - description: Whether record is the most recent one for this particular grain. - name: stg_tiktok_ads__ad_group_history @@ -99,11 +95,8 @@ models: description: Landing page URL. - name: languages description: Codes of the languages that you want to target. - - name: _fivetran_synced - description: Timestamp of when Fivetran synced a record. - name: is_most_recent_record description: Whether record is the most recent one for this particular grain. - - name: stg_tiktok_ads__ad_history description: Each record represents data for each ad. @@ -129,8 +122,6 @@ models: description: Campaign ID - name: ad_name description: Ad Name. - - name: ad_text - description: The ad text. - name: call_to_action description: Call to action values. - name: click_tracking_url @@ -153,10 +144,6 @@ models: description: The utm_content parameter of the ad, extracted from the `landing_page_url`. - name: utm_term description: The utm_term parameter of the ad, extracted from the `landing_page_url`. - - name: video_id - description: The video ID. - - name: _fivetran_synced - description: Timestamp of when Fivetran synced a record. - name: is_most_recent_record description: Whether record is the most recent one for this particular grain. @@ -183,12 +170,10 @@ models: description: Campaign Type, indicates the campaign is a regular campaign or iOS 14 campaign. - name: split_test_variable description: Split Test variables. Optional values; TARGETING, BIDDING_OPTIMIZATION , CREATIVE. - - name: _fivetran_synced - description: Timestamp of when Fivetran synced a record. - name: is_most_recent_record description: Whether record is the most recent one for this particular grain. - + - name: stg_tiktok_ads__ad_report_hourly description: Each record represents data for each ad for each hour. tests: @@ -199,8 +184,12 @@ models: columns: - name: ad_id description: Ad id + tests: + - not_null - name: stat_time_hour description: Hour of activity + tests: + - not_null - name: cost_per_conversion description: > The average amount of money you've spent on a conversion. @@ -257,11 +246,9 @@ models: - name: spend description: The estimated total amount of money you've spent on your campaign, ad group or ad during its schedule. - name: likes - description: The number of likes your video creative received within 1 day of a user seeing a paid ad. - - name: _fivetran_synced - description: Timestamp of when Fivetran synced a record. + description: The number of likes your video creative received within 1 day of a user seeing a paid ad. + - - name: stg_tiktok_ads__ad_group_report_hourly description: Each record represents data for each ad group for each hour. tests: @@ -276,6 +263,8 @@ models: - not_null - name: stat_time_hour description: Hour of activity + tests: + - not_null - name: cost_per_conversion description: > The average amount of money you've spent on a conversion. @@ -333,8 +322,6 @@ models: description: The estimated total amount of money you've spent on your campaign, ad group or ad during its schedule. - name: likes description: The number of likes your video creative received within 1 day of a user seeing a paid ad. - - name: _fivetran_synced - description: Timestamp of when Fivetran synced a record. - name: stg_tiktok_ads__campaign_report_hourly @@ -351,6 +338,8 @@ models: - not_null - name: stat_time_hour description: Hour of activity + tests: + - not_null - name: cost_per_conversion description: > The average amount of money you've spent on a conversion. @@ -407,6 +396,4 @@ models: - name: spend description: The estimated total amount of money you've spent on your campaign, ad group or ad during its schedule. - name: likes - description: The number of likes your video creative received within 1 day of a user seeing a paid ad. - - name: _fivetran_synced - description: Timestamp of when Fivetran synced a record. \ No newline at end of file + description: The number of likes your video creative received within 1 day of a user seeing a paid ad. \ No newline at end of file diff --git a/models/stg_tiktok_ads__ad_group_history.sql b/models/stg_tiktok_ads__ad_group_history.sql index 24755f2..9da4275 100644 --- a/models/stg_tiktok_ads__ad_group_history.sql +++ b/models/stg_tiktok_ads__ad_group_history.sql @@ -1,8 +1,9 @@ +{{ config(enabled=var('ad_reporting__tiktok_ads_enabled', true)) }} + with base as ( select * from {{ ref('stg_tiktok_ads__ad_group_history_tmp') }} - ), fields as ( @@ -16,14 +17,13 @@ fields as ( }} from base - ), final as ( - select + select adgroup_id as ad_group_id, - updated_at, + cast(updated_at as {{ dbt_utils.type_timestamp() }}) as updated_at, advertiser_id, campaign_id, action_days, @@ -40,18 +40,9 @@ final as ( gender, languages, landing_page_url, - _fivetran_synced + row_number() over (partition by adgroup_id order by updated_at desc) = 1 as is_most_recent_record from fields - -), - -most_recent as ( - - select - *, - row_number() over (partition by ad_group_id order by updated_at desc) = 1 as is_most_recent_record - from final - ) -select * from most_recent \ No newline at end of file +select * +from final \ No newline at end of file diff --git a/models/stg_tiktok_ads__ad_group_report_hourly.sql b/models/stg_tiktok_ads__ad_group_report_hourly.sql index 5c50349..a42fb10 100644 --- a/models/stg_tiktok_ads__ad_group_report_hourly.sql +++ b/models/stg_tiktok_ads__ad_group_report_hourly.sql @@ -1,8 +1,9 @@ +{{ config(enabled=var('ad_reporting__tiktok_ads_enabled', true)) }} + with base as ( select * from {{ ref('stg_tiktok_ads__ad_group_report_hourly_tmp') }} - ), fields as ( @@ -14,17 +15,14 @@ fields as ( staging_columns=get_ad_group_report_hourly_columns() ) }} - from base - ), final as ( select - adgroup_id as ad_group_id, - _fivetran_synced, - stat_time_hour, + adgroup_id as ad_group_id, + cast(stat_time_hour as {{ dbt_utils.type_timestamp() }}) as stat_time_hour, cpc, cpm, ctr, @@ -48,9 +46,12 @@ final as ( video_views_p_75, average_video_play, average_video_play_per_user - from fields + {{ fivetran_utils.fill_pass_through_columns('tiktok_ads__ad_group_hourly_passthrough_metrics') }} + + from fields ) -select * from final +select * +from final diff --git a/models/stg_tiktok_ads__ad_history.sql b/models/stg_tiktok_ads__ad_history.sql index b2dea57..acadc3c 100644 --- a/models/stg_tiktok_ads__ad_history.sql +++ b/models/stg_tiktok_ads__ad_history.sql @@ -1,8 +1,9 @@ +{{ config(enabled=var('ad_reporting__tiktok_ads_enabled', true)) }} + with base as ( select * from {{ ref('stg_tiktok_ads__ad_history_tmp') }} - ), fields as ( @@ -16,19 +17,17 @@ fields as ( }} from base - ), final as ( select ad_id, - updated_at, + cast(updated_at as {{ dbt_utils.type_timestamp() }}) as updated_at, adgroup_id as ad_group_id, advertiser_id, campaign_id, ad_name, - ad_text, call_to_action, click_tracking_url, impression_tracking_url, @@ -41,19 +40,9 @@ final as ( {{ dbt_utils.get_url_parameter('landing_page_url', 'utm_content') }} as utm_content, {{ dbt_utils.get_url_parameter('landing_page_url', 'utm_term') }} as utm_term, landing_page_url, - video_id, - _fivetran_synced - from fields - -), - -most_recent as ( - - select - *, row_number() over (partition by ad_id order by updated_at desc) = 1 as is_most_recent_record - from final - + from fields ) -select * from most_recent \ No newline at end of file +select * +from final \ No newline at end of file diff --git a/models/stg_tiktok_ads__ad_report_hourly.sql b/models/stg_tiktok_ads__ad_report_hourly.sql index 9d1bdf4..9d1fdf8 100644 --- a/models/stg_tiktok_ads__ad_report_hourly.sql +++ b/models/stg_tiktok_ads__ad_report_hourly.sql @@ -1,8 +1,9 @@ +{{ config(enabled=var('ad_reporting__tiktok_ads_enabled', true)) }} + with base as ( select * from {{ ref('stg_tiktok_ads__ad_report_hourly_tmp') }} - ), fields as ( @@ -14,17 +15,14 @@ fields as ( staging_columns=get_ad_report_hourly_columns() ) }} - from base - ), final as ( select ad_id, - _fivetran_synced, - stat_time_hour, + cast(stat_time_hour as {{ dbt_utils.type_timestamp() }}) as stat_time_hour, cpc, cpm, ctr, @@ -48,9 +46,11 @@ final as ( video_views_p_75, average_video_play, average_video_play_per_user - from fields + {{ fivetran_utils.fill_pass_through_columns('tiktok_ads__ad_hourly_passthrough_metrics') }} + from fields ) -select * from final +select * +from final diff --git a/models/stg_tiktok_ads__advertiser.sql b/models/stg_tiktok_ads__advertiser.sql index 0c2d449..215fd29 100644 --- a/models/stg_tiktok_ads__advertiser.sql +++ b/models/stg_tiktok_ads__advertiser.sql @@ -1,8 +1,9 @@ +{{ config(enabled=var('ad_reporting__tiktok_ads_enabled', true)) }} + with base as ( select * from {{ ref('stg_tiktok_ads__advertiser_tmp') }} - ), fields as ( @@ -16,8 +17,7 @@ fields as ( }} from base - -), +), final as ( @@ -33,13 +33,12 @@ final as ( email, industry, language, - name, + name as advertiser_name, phone_number, telephone, - timezone, - _fivetran_synced + timezone from fields - ) -select * from final \ No newline at end of file +select * +from final \ No newline at end of file diff --git a/models/stg_tiktok_ads__campaign_history.sql b/models/stg_tiktok_ads__campaign_history.sql index e7d6fa6..5cb0d38 100644 --- a/models/stg_tiktok_ads__campaign_history.sql +++ b/models/stg_tiktok_ads__campaign_history.sql @@ -1,8 +1,9 @@ +{{ config(enabled=var('ad_reporting__tiktok_ads_enabled', true)) }} + with base as ( select * from {{ ref('stg_tiktok_ads__campaign_history_tmp') }} - ), fields as ( @@ -14,33 +15,21 @@ fields as ( staging_columns=get_campaign_history_columns() ) }} - from base - ), final as ( select - campaign_id, - updated_at, - advertiser_id, - campaign_name, - campaign_type, + campaign_id, + cast(updated_at as {{ dbt_utils.type_timestamp() }}) as updated_at, + advertiser_id, + campaign_name, + campaign_type, split_test_variable, - _fivetran_synced - - from fields - -), - -most_recent as ( - - select - *, row_number() over (partition by campaign_id order by updated_at desc) = 1 as is_most_recent_record - from final - + from fields ) -select * from most_recent \ No newline at end of file +select * +from final \ No newline at end of file diff --git a/models/stg_tiktok_ads__campaign_report_hourly.sql b/models/stg_tiktok_ads__campaign_report_hourly.sql index b354960..582c880 100644 --- a/models/stg_tiktok_ads__campaign_report_hourly.sql +++ b/models/stg_tiktok_ads__campaign_report_hourly.sql @@ -1,8 +1,9 @@ +{{ config(enabled=var('ad_reporting__tiktok_ads_enabled', true)) }} + with base as ( select * from {{ ref('stg_tiktok_ads__campaign_report_hourly_tmp') }} - ), fields as ( @@ -14,43 +15,43 @@ fields as ( staging_columns=get_campaign_report_hourly_columns() ) }} - from base - ), final as ( select - campaign_id, - _fivetran_synced, - stat_time_hour, + campaign_id, + cast(stat_time_hour as {{ dbt_utils.type_timestamp() }}) as stat_time_hour, cpc, - cpm, - ctr, - impressions, - clicks, - spend, - reach, - conversion, - cost_per_conversion, - conversion_rate, - likes, - comments, - shares, + cpm, + ctr, + impressions, + clicks, + spend, + reach, + conversion, + cost_per_conversion, + conversion_rate, + likes, + comments, + shares, profile_visits, - follows, - video_play_actions, - video_watched_2_s, - video_watched_6_s, - video_views_p_25, + follows, + video_play_actions, + video_watched_2_s, + video_watched_6_s, + video_views_p_25, video_views_p_50, - video_views_p_75, - average_video_play, + video_views_p_75, + average_video_play, average_video_play_per_user - from fields + {{ fivetran_utils.fill_pass_through_columns('tiktok_ads__campaign_hourly_passthrough_metrics') }} + + from fields ) -select * from final +select * +from final diff --git a/models/tmp/stg_tiktok_ads__ad_group_history_tmp.sql b/models/tmp/stg_tiktok_ads__ad_group_history_tmp.sql index 2066a1e..cc8ca4b 100644 --- a/models/tmp/stg_tiktok_ads__ad_group_history_tmp.sql +++ b/models/tmp/stg_tiktok_ads__ad_group_history_tmp.sql @@ -1,2 +1,4 @@ +{{ config(enabled=var('ad_reporting__tiktok_ads_enabled', true)) }} + select * from {{ var('ad_group_history') }} \ No newline at end of file diff --git a/models/tmp/stg_tiktok_ads__ad_group_report_hourly_tmp.sql b/models/tmp/stg_tiktok_ads__ad_group_report_hourly_tmp.sql index c495494..7859c8c 100644 --- a/models/tmp/stg_tiktok_ads__ad_group_report_hourly_tmp.sql +++ b/models/tmp/stg_tiktok_ads__ad_group_report_hourly_tmp.sql @@ -1,2 +1,4 @@ +{{ config(enabled=var('ad_reporting__tiktok_ads_enabled', true)) }} + select * from {{ var('ad_group_hourly') }} \ No newline at end of file diff --git a/models/tmp/stg_tiktok_ads__ad_history_tmp.sql b/models/tmp/stg_tiktok_ads__ad_history_tmp.sql index 8f73813..e23724b 100644 --- a/models/tmp/stg_tiktok_ads__ad_history_tmp.sql +++ b/models/tmp/stg_tiktok_ads__ad_history_tmp.sql @@ -1,2 +1,4 @@ +{{ config(enabled=var('ad_reporting__tiktok_ads_enabled', true)) }} + select * from {{ var('ad_history') }} \ No newline at end of file diff --git a/models/tmp/stg_tiktok_ads__ad_report_hourly_tmp.sql b/models/tmp/stg_tiktok_ads__ad_report_hourly_tmp.sql index b3cb0f6..5669e53 100644 --- a/models/tmp/stg_tiktok_ads__ad_report_hourly_tmp.sql +++ b/models/tmp/stg_tiktok_ads__ad_report_hourly_tmp.sql @@ -1,2 +1,4 @@ +{{ config(enabled=var('ad_reporting__tiktok_ads_enabled', true)) }} + select * from {{ var('ad_report_hourly') }} \ No newline at end of file diff --git a/models/tmp/stg_tiktok_ads__advertiser_tmp.sql b/models/tmp/stg_tiktok_ads__advertiser_tmp.sql index 9e7dcb3..a682285 100644 --- a/models/tmp/stg_tiktok_ads__advertiser_tmp.sql +++ b/models/tmp/stg_tiktok_ads__advertiser_tmp.sql @@ -1,2 +1,4 @@ +{{ config(enabled=var('ad_reporting__tiktok_ads_enabled', true)) }} + select * from {{ var('advertiser') }} \ No newline at end of file diff --git a/models/tmp/stg_tiktok_ads__campaign_history_tmp.sql b/models/tmp/stg_tiktok_ads__campaign_history_tmp.sql index 1350a19..57868e0 100644 --- a/models/tmp/stg_tiktok_ads__campaign_history_tmp.sql +++ b/models/tmp/stg_tiktok_ads__campaign_history_tmp.sql @@ -1,2 +1,4 @@ +{{ config(enabled=var('ad_reporting__tiktok_ads_enabled', true)) }} + select * from {{ var('campaign_history') }} \ No newline at end of file diff --git a/models/tmp/stg_tiktok_ads__campaign_report_hourly_tmp.sql b/models/tmp/stg_tiktok_ads__campaign_report_hourly_tmp.sql index 28e5dac..15dcce1 100644 --- a/models/tmp/stg_tiktok_ads__campaign_report_hourly_tmp.sql +++ b/models/tmp/stg_tiktok_ads__campaign_report_hourly_tmp.sql @@ -1,2 +1,4 @@ +{{ config(enabled=var('ad_reporting__tiktok_ads_enabled', true)) }} + select * from {{ var('campaign_report_hourly') }} \ No newline at end of file diff --git a/packages.yml b/packages.yml index aedd2b5..6ed7ed9 100644 --- a/packages.yml +++ b/packages.yml @@ -2,4 +2,4 @@ packages: - package: fivetran/fivetran_utils version: [">=0.3.0", "<0.4.0"] - package: dbt-labs/spark_utils - version: [">=0.3.0", "<0.4.0"] \ No newline at end of file + version: [">=0.3.0", "<0.4.0"]